Files
pulse/.github/workflows/test-updates.yml
T
2026-04-22 10:12:15 +01:00

127 lines
4.0 KiB
YAML

name: Update Integration Tests
on:
pull_request:
paths:
# Trigger on changes to update-related code
- 'internal/updates/**'
- 'internal/api/updates.go'
- 'internal/api/rate_limit*.go'
- 'frontend-modern/src/components/Update*.tsx'
- 'frontend-modern/src/api/updates.ts'
- 'frontend-modern/src/stores/updates.ts'
- 'tests/integration/**'
- '.github/workflows/test-updates.yml'
push:
branches:
- main
- master
paths:
- 'internal/updates/**'
- 'internal/api/updates.go'
- 'frontend-modern/src/components/Update*.tsx'
- 'tests/integration/**'
workflow_dispatch: # Allow manual triggering
permissions:
contents: read
jobs:
integration-tests:
name: Update Flow Integration Tests
runs-on: ubuntu-24.04
timeout-minutes: 30
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Set up Go
uses: actions/setup-go@40f1582b2485089dde7abd97c1529aa768e1baff # v5
with:
go-version-file: go.mod
cache: true
- name: Set up Node.js
uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: tests/integration/package-lock.json
- name: Install Playwright dependencies
working-directory: tests/integration
run: |
npm ci
npx playwright install --with-deps chromium
- name: Install frontend dependencies
working-directory: frontend-modern
run: npm ci
- name: Build Pulse for testing
run: |
make build || go build -o pulse ./cmd/pulse
- name: Build Docker images for test environment
working-directory: tests/integration
run: |
# Build mock GitHub server
docker build -t pulse-mock-github:test ./mock-github-server
# Build Pulse test image
cd ../../
env:
PULSE_LICENSE_PUBLIC_KEY: ${{ secrets.PULSE_LICENSE_PUBLIC_KEY }}
- name: Run diagnostic smoke test
working-directory: tests/integration
env:
MOCK_CHECKSUM_ERROR: "false"
MOCK_NETWORK_ERROR: "false"
MOCK_RATE_LIMIT: "false"
MOCK_STALE_RELEASE: "false"
run: |
docker compose -f docker-compose.test.yml up -d --wait
npx playwright test tests/00-diagnostic.spec.ts --reporter=list,html
UPDATE_API_BASE_URL=http://localhost:7655 go test ../../tests/integration/api -run TestUpdateFlowIntegration -count=1
docker compose -f docker-compose.test.yml down -v
- name: Upload test results
if: always()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: playwright-report
path: tests/integration/playwright-report/
retention-days: 30
- name: Upload test videos and screenshots
if: failure()
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
with:
name: test-failures
path: |
tests/integration/test-results/
retention-days: 7
- name: Cleanup Docker resources
if: always()
working-directory: tests/integration
run: |
docker compose -f docker-compose.test.yml down -v || true
docker system prune -f || true
- name: Comment PR with test results
if: github.event_name == 'pull_request' && failure()
uses: actions/github-script@f28e40c7f34bde8b3046d885e986cb6290c5673b # v7
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '❌ Update integration tests failed. Please check the [workflow run](${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}) for details.'
})