Skip to content

Commit b25dfc0

Browse files
committed
feat: Added playwright to example site + gh action for CI
1 parent 3bc0273 commit b25dfc0

File tree

8 files changed

+248
-9
lines changed

8 files changed

+248
-9
lines changed

.github/workflows/playwright.yml

Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
name: Testing for visual regression on old theme
2+
3+
# Run the workflow when code is pushed or when a pull request is created
4+
on:
5+
push:
6+
branches:
7+
- '**'
8+
pull_request:
9+
branches:
10+
- main
11+
12+
jobs:
13+
playwright:
14+
name: Run Playwright
15+
runs-on: ubuntu-latest
16+
steps:
17+
# Checkout the repository so the workflow has access to the code
18+
- name: Checkout code
19+
uses: actions/checkout@v3
20+
- name: Install dependencies
21+
run: cd tests && npm ci
22+
- name: Setup Hugo
23+
uses: peaceiris/actions-hugo@75d2e84710de30f6ff7268e08f310b60ef14033f # v3.0.0
24+
with:
25+
hugo-version: "0.134.2"
26+
extended: true
27+
- name: Install Playwright browsers
28+
run: npx playwright install --with-deps
29+
- name: Run Playwright tests
30+
id: test-visual
31+
run: |
32+
make tests | tee output.log
33+
if grep -q -e "Error: A snapshot doesn't exist at" -e "Screenshot comparison failed" output.log; then
34+
echo "Playwright tests failed due to a snapshot issue."
35+
echo "SNAPSHOT_DIFFERENCES=true" >> $GITHUB_ENV
36+
exit 1
37+
elif grep -q "failed" output.log; then
38+
echo "Playwright tests failed due to a non-snapshot issue."
39+
exit 1
40+
fi
41+
- uses: actions/upload-artifact@v4
42+
id: artifact-upload
43+
if: ${{ !cancelled() && failure() && steps.test-visual.conclusion == 'failure' }}
44+
with:
45+
name: playwright-report
46+
path: tests/playwright-report/
47+
retention-days: 3
48+
- name: Comment on PR with Playwright report
49+
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
50+
if: ${{ failure() && env.SNAPSHOT_DIFFERENCES == 'true' }}
51+
with:
52+
script: |
53+
const body = `### <span aria-hidden="true">❌</span> Playwright visual snapshot differences were detected.
54+
55+
View the [Playwright report](${{ steps.artifact-upload.outputs.artifact-url }})
56+
**To approve the snapshot changes and update the snapshots, please comment:** /approve-snapshots`;
57+
58+
await github.rest.issues.createComment({
59+
issue_number: context.issue.number,
60+
owner: context.repo.owner,
61+
repo: context.repo.repo,
62+
body: body,
63+
});
64+
65+
# - name: Update the screenshots based on Ubuntu env on GH
66+
# id: test-visual-update
67+
# if: ${{ failure() && steps.test-visual.conclusion == 'failure' }}
68+
# run: make tests-update-screenshots
69+
# - name: Upload updated Playwright screenshots
70+
# uses: actions/upload-artifact@v4
71+
# if: ${{ failure() && steps.test-visual-update.conclusion == 'success' }}
72+
# with:
73+
# name: playwright-screenshots-updated
74+
# path: tests/src/__screenshots__/**/*.png
75+
# retention-days: 3

.gitignore

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ Thumbs.db
1515
########
1616
*.log
1717

18-
node_modules/*
18+
*/node_modules
1919
.markdownlint.json
2020
resources/*
2121

@@ -27,4 +27,9 @@ public/*
2727
exampleSite/public
2828

2929
# Python
30-
.venv
30+
.venv
31+
32+
# Playwright
33+
/coverage
34+
*/test-results
35+
*/playwright-report

Makefile

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,19 @@ WRITE_FLAG := --write
66
list help::
77
$(info Available Make targets:)
88
@echo "<COMMON>"
9-
@echo " list | help: Print these available make targets"
9+
@echo " list | help: Print these available make targets"
1010
@echo "<LINTING AND FORMATTING>"
11-
@echo " biome-format: Runs the biome formatter."
12-
@echo " biome-lint: Runs the biome linter."
13-
@echo " biome-all: Runs both the lint and formatting commands."
11+
@echo " biome-format: Runs the biome formatter."
12+
@echo " biome-lint: Runs the biome linter."
13+
@echo " biome-all: Runs both the lint and formatting commands."
1414
@echo " (Set BIOME_ARGS to add additional arguments to biome command (ex: make biome-all BIOME_ARGS=write))"
15+
@echo "<PRE-COMMIT>"
16+
@echo " setup-pre-commit: Sets up pre-commit (assuming it is installed)"
17+
@echo "<PLAYWRIGHT TESTS>"
18+
@echo " test: Runs playwright against the old theme."
19+
@echo " tests-update-screenshots: Runs playwright against the old theme."
1520

16-
.PHONY: biome-format biome-lint biome-all setup-pre-commit
17-
BIOME_ARGS ?=
21+
.PHONY: biome-format biome-lint biome-all setup-pre-commit tests
1822
FLAG :=
1923
ifeq ($(BIOME_ARGS), write)
2024
FLAG := $(WRITE_FLAG)
@@ -36,3 +40,8 @@ setup-pre-commit:
3640
pre-commit install --hook-type commit-msg; \
3741
echo "pre-commit hooks have been successfully installed."; \
3842
fi
43+
44+
tests:
45+
cd tests && npx playwright test
46+
tests-update-screenshots:
47+
cd tests && npx playwright test --update-snapshots

biome.json

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
"**/coveo.css",
2323
"**/f5-hugo.css",
2424
"**/highlight.css",
25-
"**/*-overrides.css"
25+
"**/*-overrides.css",
26+
"public/*",
27+
"test-results/*"
2628
]
2729
},
2830
"formatter": {

tests/package-lock.json

Lines changed: 78 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tests/package.json

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "nginx-docs-theme-test",
3+
"version": "1.0.0",
4+
"private": "true",
5+
"devDependencies": {
6+
"@playwright/test": "^1.48.0"
7+
}
8+
}

tests/playwright.config.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
import { defineConfig, devices } from '@playwright/test';
2+
3+
const BASE_URL = 'http://127.0.0.1';
4+
const PORT = 1313;
5+
export default defineConfig({
6+
testDir: './src',
7+
fullyParallel: true,
8+
workers: 1,
9+
outputDir: './test-results',
10+
snapshotPathTemplate: '{testDir}/__screenshots__/{testFilePath}/{arg}{ext}',
11+
reporter: [['html', { outputFolder: './playwright-report' }]],
12+
use: {
13+
baseURL: `${BASE_URL}:${PORT}`,
14+
screenshots: 'only-on-failure',
15+
video: 'retain-on-failure',
16+
trace: 'on-first-retry',
17+
timezoneId: 'America/Los_Angeles',
18+
},
19+
projects: [
20+
{
21+
name: 'firefox',
22+
use: { ...devices['Desktop Firefox'] },
23+
},
24+
{
25+
name: 'webkit',
26+
use: { ...devices['Desktop Safari'] },
27+
},
28+
{
29+
name: 'Mobile Chrome',
30+
use: { ...devices['Pixel 5'] },
31+
},
32+
],
33+
webServer: {
34+
command: `cd ../exampleSite && hugo mod get && hugo --gc -e production && hugo serve --port ${PORT}`,
35+
url: `${BASE_URL}:${PORT}`,
36+
stdout: 'ignore',
37+
},
38+
expect: {
39+
toHaveScreenshot: {
40+
pathTemplate:
41+
'{testDir}/__screenshots__{/projectName}/{testFilePath}/{arg}{ext}',
42+
maxDiffPixels: 10,
43+
},
44+
},
45+
});

tests/src/visual-regression.spec.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { expect, test } from '@playwright/test';
2+
3+
test.describe('Testing old theme', () => {
4+
test('should ensure the old theme does not visually regress', async ({
5+
page,
6+
}) => {
7+
const currentPlus = 'nginx/installing-nginx-open-source/';
8+
await page.goto(`/${currentPlus}`, { waitUntil: 'networkidle' });
9+
await page.evaluate(() => {
10+
// switch to old theme
11+
useNewTheme(false);
12+
window.scrollTo(0, 0);
13+
});
14+
await page.waitForFunction(() => window.scrollY === 0);
15+
await expect(page).toHaveScreenshot('example-site-screenshot.png');
16+
});
17+
});

0 commit comments

Comments
 (0)