Skip to content

Commit c7887cf

Browse files
committed
feat(#1369486): add playwright screenshots and video on test failures
1 parent ad28bc8 commit c7887cf

File tree

2 files changed

+71
-47
lines changed

2 files changed

+71
-47
lines changed

.github/workflows/tests.yml

Lines changed: 53 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,12 @@ jobs:
3535
if: github.event.pull_request.draft == false
3636
name: Tests
3737
runs-on: ubuntu-24.04
38-
38+
3939
env:
4040
ref: ${{ inputs.use_default_github_ref == false && inputs.version || '' }}
4141
composer_version: ${{ inputs.version == 'main' && 'dev-main' || (contains(inputs.version, 'x') && format('{0}-dev', inputs.version) || inputs.version) }}
4242
docker_compose_cmd: docker compose -f compose.yml -f compose.ci.yml ${{ inputs.search_engine != 'opensearch' && format('-f compose.{0}.yml', inputs.search_engine) || '' }}
43-
43+
4444
steps:
4545
- name: Disk cleanup
4646
shell: bash
@@ -115,57 +115,65 @@ jobs:
115115
${{env.docker_compose_cmd}} exec -T php bin/console gally:index:clear --no-interaction
116116
${{env.docker_compose_cmd}} exec -T php bin/console hautelook:fixtures:load --append --no-interaction -vv
117117
${{env.docker_compose_cmd}} exec -T php bin/console doctrine:fixtures:load --append --no-interaction -vv
118-
- name: Coverage
119-
run: ${{env.docker_compose_cmd}} exec -T php php -d pcov.enabled=1 -d pcov.directory=vendor/gally bin/phpunit --coverage-clover=coverage/coverage.xml vendor/gally
120-
121-
- name: Cleanup coverage file
122-
run: ${{env.docker_compose_cmd}} exec -T php sed -i 's:<file name="/srv/:<file name="/:' coverage/coverage.xml
123-
124-
- if: ${{ github.event_name == 'pull_request' }}
125-
name: Download artifact
126-
uses: dawidd6/action-download-artifact@v6
127-
continue-on-error: true
128-
id: base_coverage_report
129-
with:
130-
workflow: .github/workflows/ci.yml
131-
branch: ${{ github.base_ref }}
132-
name: coverage-report
133-
path: coverage/base # Retrieve previous coverage file at the root directory, not inside api/coverage
134-
135-
- name: Backend Coverage Report as Comment (Compared to a base)
136-
if: ${{ github.event_name == 'pull_request' && steps.base_coverage_report.outcome == 'success' }}
137-
uses: lucassabreu/comment-coverage-clover@main
138-
continue-on-error: true
139-
with:
140-
with-chart: false
141-
file: api/coverage/coverage.xml
142-
base-file: coverage/base/coverage.xml
143-
max-line-coverage-decrease: 10.0
144-
max-method-coverage-decrease: 10.0
145-
min-line-coverage: 75
146-
min-method-coverage: 75
147-
signature: "Backend Coverage compared to target branch"
148-
149-
- name: Backend Coverage Report as Comment (Clean)
150-
uses: lucassabreu/comment-coverage-clover@v0.3.0
151-
if: ${{ (github.event_name == 'pull_request' && steps.base_coverage_report.outcome != 'success') || github.event_name == 'push'}}
152-
with:
153-
with-chart: false
154-
file: api/coverage/coverage.xml
155-
signature: "Backend Coverage of this branch"
156-
157-
- uses: actions/upload-artifact@v4
158-
with:
159-
name: coverage-report
160-
path: api/coverage/coverage.xml
118+
# - name: Coverage
119+
# run: ${{env.docker_compose_cmd}} exec -T php php -d pcov.enabled=1 -d pcov.directory=vendor/gally bin/phpunit --coverage-clover=coverage/coverage.xml vendor/gally
120+
#
121+
# - name: Cleanup coverage file
122+
# run: ${{env.docker_compose_cmd}} exec -T php sed -i 's:<file name="/srv/:<file name="/:' coverage/coverage.xml
123+
#
124+
# - if: ${{ github.event_name == 'pull_request' }}
125+
# name: Download artifact
126+
# uses: dawidd6/action-download-artifact@v6
127+
# continue-on-error: true
128+
# id: base_coverage_report
129+
# with:
130+
# workflow: .github/workflows/ci.yml
131+
# branch: ${{ github.base_ref }}
132+
# name: coverage-report
133+
# path: coverage/base # Retrieve previous coverage file at the root directory, not inside api/coverage
134+
#
135+
# - name: Backend Coverage Report as Comment (Compared to a base)
136+
# if: ${{ github.event_name == 'pull_request' && steps.base_coverage_report.outcome == 'success' }}
137+
# uses: lucassabreu/comment-coverage-clover@main
138+
# continue-on-error: true
139+
# with:
140+
# with-chart: false
141+
# file: api/coverage/coverage.xml
142+
# base-file: coverage/base/coverage.xml
143+
# max-line-coverage-decrease: 10.0
144+
# max-method-coverage-decrease: 10.0
145+
# min-line-coverage: 75
146+
# min-method-coverage: 75
147+
# signature: "Backend Coverage compared to target branch"
148+
#
149+
# - name: Backend Coverage Report as Comment (Clean)
150+
# uses: lucassabreu/comment-coverage-clover@v0.3.0
151+
# if: ${{ (github.event_name == 'pull_request' && steps.base_coverage_report.outcome != 'success') || github.event_name == 'push'}}
152+
# with:
153+
# with-chart: false
154+
# file: api/coverage/coverage.xml
155+
# signature: "Backend Coverage of this branch"
156+
#
157+
# - uses: actions/upload-artifact@v4
158+
# with:
159+
# name: coverage-report
160+
# path: api/coverage/coverage.xml
161161

162162
- name: Jest
163163
run: ${{env.docker_compose_cmd}} exec -T pwa yarn test:ci
164164

165165
- name: e2e
166+
id: e2e
166167
continue-on-error: true
167168
run: ${{env.docker_compose_cmd}} exec -T e2e yarn test:ci
168169

170+
- uses: actions/upload-artifact@v4
171+
if: failure() && steps.e2e.outcome == 'failure'
172+
with:
173+
name: playwright-report
174+
path: playwright-report/
175+
retention-days: 30
176+
169177
- name: Frontend Coverage Report
170178
uses: 5monkeys/cobertura-action@v12
171179
if: ${{ github.event_name == 'pull_request' }}

front/e2e/playwright.config.ts

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,43 @@
11
import { defineConfig, devices } from '@playwright/test'
22

3+
const reporters: Array<[string, Record<string, unknown>]> = [
4+
['list', {printSteps: true}],
5+
]
6+
7+
if (process.env.CI) {
8+
reporters.push(['html', {outputFolder: 'playwright-report', open: 'never'}])
9+
}
10+
311
export default defineConfig({
412
testDir: './src/tests',
513
fullyParallel: false,
614
forbidOnly: !!process.env.CI,
715
retries: process.env.CI ? 0 : 0, // Experimental settings, update it if necessary for the CI
816
workers: process.env.CI ? 1 : 1, // We put 1 worker even for dev mode to save computer resources
9-
reporter: [['list', {printSteps: true}]],
17+
reporter: reporters,
1018
timeout: process.env.CI ? 180000 : 120000, // 3min in CI per test, 2min in local
1119
use: {
1220
baseURL: process.env.SERVER_BASE_URL || 'https://gally.local',
1321
trace: 'on',
1422
headless: true,
1523
ignoreHTTPSErrors: true,
1624
permissions: ['clipboard-read', 'clipboard-write'],
25+
// Capture screenshot and video on test failure in CI env for easier debugging.
26+
screenshot: process.env.CI ? 'only-on-failure' : 'off',
27+
// Record videos at lower size than the viewport to save space
28+
video: process.env.CI ? { mode: 'retain-on-failure', size: { width: 1280, height: 720 }} : 'off',
1729
},
1830
expect: {
1931
timeout: process.env.CI ? 30000 : 20000, // 30s in CI per expect, 20s in local,
2032
},
2133
projects: [
2234
{
2335
name: 'chromium',
24-
use: {...devices['Desktop Chrome']},
36+
use: {
37+
...devices['Desktop Chrome'],
38+
// Increase viewport resolution for easier visual debugging
39+
viewport: { width: 1920, height: 1080 },
40+
},
2541
},
2642
],
2743
})

0 commit comments

Comments
 (0)