refactor: combine quickshell into the app too #74
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Integration Tests | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| workflow_dispatch: | |
| # Cancel in-flight integration runs on the same branch on new pushes. | |
| concurrency: | |
| group: integration-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true | |
| jobs: | |
| integration: | |
| name: Integration tests | |
| runs-on: ubuntu-24.04 | |
| timeout-minutes: 60 | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: actions/setup-go@v6 | |
| with: | |
| go-version-file: go.mod | |
| cache: true | |
| # Docker is pre-installed on ubuntu-24.04; testcontainers-go uses it. | |
| # Privileged containers (required for FUSE + fanotify) are allowed on | |
| # GitHub Actions Linux runners. | |
| - name: Verify Docker is accessible | |
| run: docker info | |
| - name: Cache Go tools | |
| id: cache-go-tools | |
| uses: actions/cache@v4 | |
| with: | |
| path: ~/go/bin | |
| key: go-tools-${{ runner.os }}-gotestsum-v1.13.0 | |
| - name: Install gotestsum | |
| if: steps.cache-go-tools.outputs.cache-hit != 'true' | |
| run: go install gotest.tools/gotestsum@v1.13.0 | |
| - name: Run integration tests | |
| working-directory: test/integration | |
| env: | |
| # Use Docker explicitly (not Podman) on CI. | |
| DOCKER_HOST: unix:///var/run/docker.sock | |
| # Keep the Ryuk reaper enabled; it ensures cleanup even on failure. | |
| TESTCONTAINERS_RYUK_DISABLED: "false" | |
| # Force inotify backend for deterministic CI behavior on hosted runners. | |
| TILBO_TEST_WATCHER: inotify | |
| run: | | |
| mkdir -p test-results | |
| gotestsum \ | |
| --format=github-actions \ | |
| --junitfile=test-results/junit.xml \ | |
| -- \ | |
| -v \ | |
| -count=1 \ | |
| -timeout=45m \ | |
| ./... | |
| - name: Write integration test summary | |
| if: always() | |
| run: | | |
| echo "## Integration Test Results" >> "$GITHUB_STEP_SUMMARY" | |
| echo "" >> "$GITHUB_STEP_SUMMARY" | |
| if [ -f test/integration/test-results/junit.xml ]; then | |
| # Quick pass/fail/skip tally from JUnit XML | |
| python3 - <<'EOF' | |
| import xml.etree.ElementTree as ET, sys, os | |
| tree = ET.parse("test/integration/test-results/junit.xml") | |
| root = tree.getroot() | |
| suites = root.findall(".//testsuite") | |
| tests = sum(int(s.get("tests", 0)) for s in suites) | |
| failures = sum(int(s.get("failures", 0)) for s in suites) | |
| skipped = sum(int(s.get("skipped", 0)) for s in suites) | |
| passed = tests - failures - skipped | |
| with open(os.environ["GITHUB_STEP_SUMMARY"], "a") as f: | |
| f.write(f"| Result | Count |\n|--------|-------|\n") | |
| f.write(f"| ✅ Passed | {passed} |\n") | |
| f.write(f"| ❌ Failed | {failures} |\n") | |
| f.write(f"| ⏭️ Skipped | {skipped} |\n") | |
| f.write(f"| **Total** | **{tests}** |\n\n") | |
| EOF | |
| fi | |
| - name: Upload integration test results | |
| if: always() | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: integration-test-results | |
| path: test/integration/test-results/junit.xml | |
| retention-days: 30 | |
| - name: Report integration test results | |
| if: always() | |
| uses: dorny/test-reporter@v2 | |
| with: | |
| name: Integration test results | |
| path: test/integration/test-results/junit.xml | |
| reporter: java-junit | |
| fail-on-error: true |