mirror of
https://github.com/penpot/penpot.git
synced 2026-08-14 16:58:35 +00:00
Enable Playwright's JSON reporter alongside `list` and publish a summary of flaky tests to the job step summary. The JSON report is kept as an artifact for 30 days so flakiness rates can be aggregated over time. CI already runs with `retries: 2`, so unstable tests have been passing silently on retry. This only surfaces what the suite already absorbs; no test behaviour changes. The reporter in `frontend/scripts/test-e2e` becomes overridable via `PLAYWRIGHT_REPORTER` so the local developer default stays untouched.
125 lines
3.1 KiB
YAML
125 lines
3.1 KiB
YAML
name: "CI: Integration"
|
|
|
|
defaults:
|
|
run:
|
|
shell: bash
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'frontend/**'
|
|
- 'common/**'
|
|
- 'render-wasm/**'
|
|
|
|
types:
|
|
- opened
|
|
- synchronize
|
|
- ready_for_review
|
|
|
|
push:
|
|
branches:
|
|
- develop
|
|
- staging
|
|
|
|
paths:
|
|
- 'frontend/**'
|
|
- 'common/**'
|
|
- 'render-wasm/**'
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
|
|
cancel-in-progress: true
|
|
|
|
jobs:
|
|
build-integration:
|
|
if: ${{ !github.event.pull_request.draft }}
|
|
name: "Build Integration Bundle"
|
|
runs-on: penpot-runner-02
|
|
container:
|
|
image: penpotapp/devenv:latest
|
|
volumes:
|
|
- /var/cache/github-runner/m2:/root/.m2
|
|
- /var/cache/github-runner/gitlib:/root/.gitlibs
|
|
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Build Bundle
|
|
working-directory: ./frontend
|
|
run: |
|
|
./scripts/build
|
|
|
|
- name: Store Bundle Cache
|
|
uses: actions/cache@v5
|
|
with:
|
|
key: "integration-bundle-${{ github.sha }}"
|
|
path: frontend/resources/public
|
|
|
|
test-integration:
|
|
if: ${{ !github.event.pull_request.draft }}
|
|
name: "Integration Tests"
|
|
runs-on: penpot-runner-02
|
|
container:
|
|
image: penpotapp/devenv:latest
|
|
volumes:
|
|
- /var/cache/github-runner/m2:/root/.m2
|
|
- /var/cache/github-runner/gitlib:/root/.gitlibs
|
|
|
|
needs: build-integration
|
|
|
|
steps:
|
|
- name: Checkout Repository
|
|
uses: actions/checkout@v6
|
|
|
|
- name: Restore Cache
|
|
uses: actions/cache/restore@v5
|
|
with:
|
|
key: "integration-bundle-${{ github.sha }}"
|
|
path: frontend/resources/public
|
|
|
|
- name: Run Tests
|
|
working-directory: ./frontend
|
|
env:
|
|
PLAYWRIGHT_REPORTER: list,json
|
|
PLAYWRIGHT_JSON_OUTPUT_NAME: report.json
|
|
run: |
|
|
./scripts/test-e2e
|
|
|
|
- name: Flaky summary
|
|
if: always()
|
|
working-directory: ./frontend
|
|
run: |
|
|
if [ ! -f report.json ]; then
|
|
echo "No report.json produced (the run failed early)." >> "$GITHUB_STEP_SUMMARY"
|
|
exit 0
|
|
fi
|
|
|
|
jq -r '
|
|
[ .. | objects
|
|
| select(has("tests") and has("file"))
|
|
| select(any(.tests[]; .status == "flaky"))
|
|
| "- `\(.file):\(.line)` — \(.title)"
|
|
] as $f
|
|
| "## Flaky tests: \($f | length)\n"
|
|
+ (if ($f | length) == 0 then "_none_" else ($f | join("\n")) end)
|
|
' report.json >> "$GITHUB_STEP_SUMMARY"
|
|
|
|
- name: Upload JSON report
|
|
uses: actions/upload-artifact@v7
|
|
if: always()
|
|
with:
|
|
name: integration-json-report
|
|
path: frontend/report.json
|
|
overwrite: true
|
|
retention-days: 30
|
|
|
|
- name: Upload test result
|
|
uses: actions/upload-artifact@v7
|
|
if: always()
|
|
with:
|
|
name: integration-tests-result
|
|
path: frontend/test-results/
|
|
overwrite: true
|
|
retention-days: 3
|