Skip to content

refactor: combine quickshell into the app too #74

refactor: combine quickshell into the app too

refactor: combine quickshell into the app too #74

Workflow file for this run

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