nuxt-spec 0.4.0-alpha.2 → 0.4.0-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/README.md +13 -13
- package/app/app.vue +10 -10
- package/app/components/NuxtSpecApiTestComponent.vue +24 -24
- package/app/components/NuxtSpecTestComponent.vue +9 -9
- package/app/components/index.d.ts +7 -7
- package/app/components/index.ts +2 -2
- package/app/utils/vitest-utils.ts +5 -5
- package/config/index.d.ts +36 -36
- package/config/index.mjs +147 -147
- package/config/report/report-entry.html +6 -6
- package/config/report/report-head.html +34 -34
- package/config/report/report-screenshot.html +8 -8
- package/config/report/report-tail.html +4 -4
- package/config/templates/.github/workflows/ci-test-update.yml.template +105 -105
- package/config/templates/.github/workflows/ci-test-verify.yml.template +68 -68
- package/config/templates/.gitlab/ci/ci-test-update.yml.template +69 -69
- package/config/templates/.gitlab/ci/ci-test-verify.yml.template +41 -41
- package/config/templates/.gitlab-ci.yml.template +6 -6
- package/config/templates/pnpm-workspace.yaml.template +19 -19
- package/config/templates/vitest.config.ts.template +5 -5
- package/config/utils/merge.mjs +43 -43
- package/config/utils/options.d.mts +59 -59
- package/config/utils/options.mjs +116 -116
- package/config/utils/reporter.mjs +409 -409
- package/config/utils/warnings.mjs +38 -38
- package/modules/spec-options.ts +23 -23
- package/nuxt.config.ts +20 -20
- package/package.json +17 -23
- package/utils/e2e.ts +131 -131
- package/utils/helpers/check-params.ts +44 -44
- package/utils/helpers/location-hint.ts +30 -30
- package/utils/helpers/screenshot-utils.ts +27 -27
- package/utils/index.ts +12 -12
- package/utils/playwright.ts +28 -28
- package/utils/screenshot.ts +201 -201
- package/bin/_internal/prepublish-check.js +0 -16
- package/bin/cli.js +0 -53
- package/bin/commands/ci.js +0 -124
- package/bin/commands/setup.js +0 -367
- package/bin/commands/update.js +0 -126
- package/bin/helpers/commands.js +0 -82
- package/bin/helpers/constants.js +0 -8
- package/bin/helpers/git.js +0 -73
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
<div class="screenshot">
|
|
2
|
-
<h3>{{FILE_NAME}}</h3>
|
|
3
|
-
<p class="message">{{MESSAGE}}</p>
|
|
4
|
-
<div class="pair">
|
|
5
|
-
<figure><figcaption>Baseline image</figcaption><img src="{{BASELINE_URI}}" alt="Baseline image for reference"></figure>
|
|
6
|
-
<figure><figcaption>Actual screenshot</figcaption><img src="{{ACTUAL_URI}}" alt="Actual screenshot taken"></figure>
|
|
7
|
-
</div>
|
|
8
|
-
</div>
|
|
1
|
+
<div class="screenshot">
|
|
2
|
+
<h3>{{FILE_NAME}}</h3>
|
|
3
|
+
<p class="message">{{MESSAGE}}</p>
|
|
4
|
+
<div class="pair">
|
|
5
|
+
<figure><figcaption>Baseline image</figcaption><img src="{{BASELINE_URI}}" alt="Baseline image for reference"></figure>
|
|
6
|
+
<figure><figcaption>Actual screenshot</figcaption><img src="{{ACTUAL_URI}}" alt="Actual screenshot taken"></figure>
|
|
7
|
+
</div>
|
|
8
|
+
</div>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- END failure entries -->
|
|
2
|
-
<div>Generated by <a href="https://github.com/AloisSeckar/nuxt-spec">Nuxt Spec</a> @ {{TIMESTAMP}}</div>
|
|
3
|
-
</body>
|
|
4
|
-
</html>
|
|
1
|
+
<!-- END failure entries -->
|
|
2
|
+
<div>Generated by <a href="https://github.com/AloisSeckar/nuxt-spec">Nuxt Spec</a> @ {{TIMESTAMP}}</div>
|
|
3
|
+
</body>
|
|
4
|
+
</html>
|
|
@@ -1,105 +1,105 @@
|
|
|
1
|
-
# GitHub Actions workflow (scaffolded by Nuxt Spec) to update test baselines (manually triggered).
|
|
2
|
-
# Runs in the same pinned Playwright container as "verify" workflow.
|
|
3
|
-
# Updated baselines (`__baseline__`, `__screenshots__`) and snapshots (`__snapshots__`) are committed back to the dispatched branch.
|
|
4
|
-
# If the push is rejected (e.g. protected branch), a new branch with a pull request is created instead.
|
|
5
|
-
# PREREQUISITE: for the pull request fallback, enable
|
|
6
|
-
# "Settings > Actions > General > Allow GitHub Actions to create and approve pull requests".
|
|
7
|
-
# NOTE: commits and pull requests created via GITHUB_TOKEN don't trigger other workflows - run "verify" manually afterwards.
|
|
8
|
-
|
|
9
|
-
name: Nuxt Spec CI Tests (update baselines)
|
|
10
|
-
|
|
11
|
-
on:
|
|
12
|
-
workflow_dispatch:
|
|
13
|
-
|
|
14
|
-
concurrency:
|
|
15
|
-
group: ci-test-update-${{ github.ref }}
|
|
16
|
-
cancel-in-progress: false
|
|
17
|
-
|
|
18
|
-
permissions:
|
|
19
|
-
contents: write
|
|
20
|
-
pull-requests: write
|
|
21
|
-
|
|
22
|
-
jobs:
|
|
23
|
-
update:
|
|
24
|
-
runs-on: ubuntu-latest
|
|
25
|
-
container:
|
|
26
|
-
# must match `playwright` dependency version
|
|
27
|
-
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
28
|
-
steps:
|
|
29
|
-
- name: Checkout
|
|
30
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
31
|
-
with:
|
|
32
|
-
ref: ${{ github.ref_name }}
|
|
33
|
-
|
|
34
|
-
- name: Enable pnpm via corepack
|
|
35
|
-
run: corepack enable
|
|
36
|
-
|
|
37
|
-
- name: Resolve pnpm store path
|
|
38
|
-
id: pnpm-store
|
|
39
|
-
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"
|
|
40
|
-
|
|
41
|
-
- name: Cache pnpm store
|
|
42
|
-
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
43
|
-
with:
|
|
44
|
-
path: ${{ steps.pnpm-store.outputs.path }}
|
|
45
|
-
key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
46
|
-
restore-keys: pnpm-${{ runner.os }}-
|
|
47
|
-
|
|
48
|
-
- name: Install dependencies
|
|
49
|
-
run: pnpm install --frozen-lockfile
|
|
50
|
-
|
|
51
|
-
- name: Prune pnpm store
|
|
52
|
-
run: pnpm store prune
|
|
53
|
-
|
|
54
|
-
- name: Regenerate test baselines
|
|
55
|
-
run: pnpm test-u
|
|
56
|
-
|
|
57
|
-
- name: Commit updated baselines
|
|
58
|
-
env:
|
|
59
|
-
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
60
|
-
REPO: ${{ github.repository }}
|
|
61
|
-
REF_NAME: ${{ github.ref_name }}
|
|
62
|
-
RUN_NUMBER: ${{ github.run_number }}
|
|
63
|
-
run: |
|
|
64
|
-
set -eu
|
|
65
|
-
|
|
66
|
-
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
67
|
-
git config user.name "github-actions[bot]"
|
|
68
|
-
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
69
|
-
|
|
70
|
-
# `git add` fails on a glob without matches, `git ls-files` doesn't
|
|
71
|
-
git ls-files -z -m -d -o --exclude-standard -- \
|
|
72
|
-
':(glob)**/__baseline__/**' \
|
|
73
|
-
':(glob)**/__screenshots__/**' \
|
|
74
|
-
':(glob)**/__snapshots__/**' \
|
|
75
|
-
| xargs -0 -r git add -A --
|
|
76
|
-
if git diff --cached --quiet; then
|
|
77
|
-
echo "No baseline changes to commit."
|
|
78
|
-
exit 0
|
|
79
|
-
fi
|
|
80
|
-
|
|
81
|
-
git commit -m "test(ci): update test baselines"
|
|
82
|
-
|
|
83
|
-
if git push origin "HEAD:$REF_NAME"; then
|
|
84
|
-
echo "Updated baselines pushed to '$REF_NAME'."
|
|
85
|
-
exit 0
|
|
86
|
-
fi
|
|
87
|
-
|
|
88
|
-
echo "Push to '$REF_NAME' was rejected (e.g. protected branch) - creating pull request..."
|
|
89
|
-
export NEW_BRANCH="ci-test/update-$(date +%Y%m%d%H%M%S)"
|
|
90
|
-
git push origin "HEAD:refs/heads/$NEW_BRANCH"
|
|
91
|
-
BODY=$(node -e '
|
|
92
|
-
const { NEW_BRANCH, REF_NAME, RUN_NUMBER } = process.env
|
|
93
|
-
console.log(JSON.stringify({
|
|
94
|
-
title: "test(ci): update test baselines",
|
|
95
|
-
head: NEW_BRANCH,
|
|
96
|
-
base: REF_NAME,
|
|
97
|
-
body: `Test baselines update triggered on run #${RUN_NUMBER} against branch \`${REF_NAME}\`.`,
|
|
98
|
-
}))')
|
|
99
|
-
curl -sS -X POST \
|
|
100
|
-
-H "Authorization: Bearer $GH_TOKEN" \
|
|
101
|
-
-H "Accept: application/vnd.github+json" \
|
|
102
|
-
-H "Content-Type: application/json" \
|
|
103
|
-
-d "$BODY" \
|
|
104
|
-
--fail-with-body \
|
|
105
|
-
"https://api.github.com/repos/$REPO/pulls"
|
|
1
|
+
# GitHub Actions workflow (scaffolded by Nuxt Spec) to update test baselines (manually triggered).
|
|
2
|
+
# Runs in the same pinned Playwright container as "verify" workflow.
|
|
3
|
+
# Updated baselines (`__baseline__`, `__screenshots__`) and snapshots (`__snapshots__`) are committed back to the dispatched branch.
|
|
4
|
+
# If the push is rejected (e.g. protected branch), a new branch with a pull request is created instead.
|
|
5
|
+
# PREREQUISITE: for the pull request fallback, enable
|
|
6
|
+
# "Settings > Actions > General > Allow GitHub Actions to create and approve pull requests".
|
|
7
|
+
# NOTE: commits and pull requests created via GITHUB_TOKEN don't trigger other workflows - run "verify" manually afterwards.
|
|
8
|
+
|
|
9
|
+
name: Nuxt Spec CI Tests (update baselines)
|
|
10
|
+
|
|
11
|
+
on:
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
concurrency:
|
|
15
|
+
group: ci-test-update-${{ github.ref }}
|
|
16
|
+
cancel-in-progress: false
|
|
17
|
+
|
|
18
|
+
permissions:
|
|
19
|
+
contents: write
|
|
20
|
+
pull-requests: write
|
|
21
|
+
|
|
22
|
+
jobs:
|
|
23
|
+
update:
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
container:
|
|
26
|
+
# must match `playwright` dependency version
|
|
27
|
+
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
28
|
+
steps:
|
|
29
|
+
- name: Checkout
|
|
30
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
31
|
+
with:
|
|
32
|
+
ref: ${{ github.ref_name }}
|
|
33
|
+
|
|
34
|
+
- name: Enable pnpm via corepack
|
|
35
|
+
run: corepack enable
|
|
36
|
+
|
|
37
|
+
- name: Resolve pnpm store path
|
|
38
|
+
id: pnpm-store
|
|
39
|
+
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"
|
|
40
|
+
|
|
41
|
+
- name: Cache pnpm store
|
|
42
|
+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
43
|
+
with:
|
|
44
|
+
path: ${{ steps.pnpm-store.outputs.path }}
|
|
45
|
+
key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
46
|
+
restore-keys: pnpm-${{ runner.os }}-
|
|
47
|
+
|
|
48
|
+
- name: Install dependencies
|
|
49
|
+
run: pnpm install --frozen-lockfile
|
|
50
|
+
|
|
51
|
+
- name: Prune pnpm store
|
|
52
|
+
run: pnpm store prune
|
|
53
|
+
|
|
54
|
+
- name: Regenerate test baselines
|
|
55
|
+
run: pnpm test-u
|
|
56
|
+
|
|
57
|
+
- name: Commit updated baselines
|
|
58
|
+
env:
|
|
59
|
+
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
60
|
+
REPO: ${{ github.repository }}
|
|
61
|
+
REF_NAME: ${{ github.ref_name }}
|
|
62
|
+
RUN_NUMBER: ${{ github.run_number }}
|
|
63
|
+
run: |
|
|
64
|
+
set -eu
|
|
65
|
+
|
|
66
|
+
git config --global --add safe.directory "$GITHUB_WORKSPACE"
|
|
67
|
+
git config user.name "github-actions[bot]"
|
|
68
|
+
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
|
69
|
+
|
|
70
|
+
# `git add` fails on a glob without matches, `git ls-files` doesn't
|
|
71
|
+
git ls-files -z -m -d -o --exclude-standard -- \
|
|
72
|
+
':(glob)**/__baseline__/**' \
|
|
73
|
+
':(glob)**/__screenshots__/**' \
|
|
74
|
+
':(glob)**/__snapshots__/**' \
|
|
75
|
+
| xargs -0 -r git add -A --
|
|
76
|
+
if git diff --cached --quiet; then
|
|
77
|
+
echo "No baseline changes to commit."
|
|
78
|
+
exit 0
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
git commit -m "test(ci): update test baselines"
|
|
82
|
+
|
|
83
|
+
if git push origin "HEAD:$REF_NAME"; then
|
|
84
|
+
echo "Updated baselines pushed to '$REF_NAME'."
|
|
85
|
+
exit 0
|
|
86
|
+
fi
|
|
87
|
+
|
|
88
|
+
echo "Push to '$REF_NAME' was rejected (e.g. protected branch) - creating pull request..."
|
|
89
|
+
export NEW_BRANCH="ci-test/update-$(date +%Y%m%d%H%M%S)"
|
|
90
|
+
git push origin "HEAD:refs/heads/$NEW_BRANCH"
|
|
91
|
+
BODY=$(node -e '
|
|
92
|
+
const { NEW_BRANCH, REF_NAME, RUN_NUMBER } = process.env
|
|
93
|
+
console.log(JSON.stringify({
|
|
94
|
+
title: "test(ci): update test baselines",
|
|
95
|
+
head: NEW_BRANCH,
|
|
96
|
+
base: REF_NAME,
|
|
97
|
+
body: `Test baselines update triggered on run #${RUN_NUMBER} against branch \`${REF_NAME}\`.`,
|
|
98
|
+
}))')
|
|
99
|
+
curl -sS -X POST \
|
|
100
|
+
-H "Authorization: Bearer $GH_TOKEN" \
|
|
101
|
+
-H "Accept: application/vnd.github+json" \
|
|
102
|
+
-H "Content-Type: application/json" \
|
|
103
|
+
-d "$BODY" \
|
|
104
|
+
--fail-with-body \
|
|
105
|
+
"https://api.github.com/repos/$REPO/pulls"
|
|
@@ -1,68 +1,68 @@
|
|
|
1
|
-
# GitHub Actions workflow (scaffolded by Nuxt Spec) to run test suite in a pinned Playwright container for reproducible results.
|
|
2
|
-
# Triggered automatically on push/pull requests to default branch with possible manual dispatch.
|
|
3
|
-
# Uses pnpm - the pnpm store is cached so subsequent `pnpm install` runs reuse downloaded deps.
|
|
4
|
-
# If tests fail, `ci-test-report` artifact (HTML report, current screenshots, Vitest attachments) is uploaded for inspection.
|
|
5
|
-
# NOTE: commits pushed by "update baselines" workflow don't trigger this workflow - dispatch it manually afterwards.
|
|
6
|
-
|
|
7
|
-
name: Nuxt Spec CI Tests (verify)
|
|
8
|
-
|
|
9
|
-
on:
|
|
10
|
-
push:
|
|
11
|
-
branches: [__DEFAULT_BRANCH__]
|
|
12
|
-
pull_request:
|
|
13
|
-
branches: [__DEFAULT_BRANCH__]
|
|
14
|
-
workflow_dispatch:
|
|
15
|
-
|
|
16
|
-
concurrency:
|
|
17
|
-
group: ci-test-verify-${{ github.ref }}
|
|
18
|
-
cancel-in-progress: true
|
|
19
|
-
|
|
20
|
-
permissions:
|
|
21
|
-
contents: read
|
|
22
|
-
|
|
23
|
-
jobs:
|
|
24
|
-
verify:
|
|
25
|
-
runs-on: ubuntu-latest
|
|
26
|
-
container:
|
|
27
|
-
# must match `playwright` dependency version
|
|
28
|
-
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
29
|
-
steps:
|
|
30
|
-
- name: Checkout
|
|
31
|
-
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
32
|
-
|
|
33
|
-
- name: Enable pnpm via corepack
|
|
34
|
-
run: corepack enable
|
|
35
|
-
|
|
36
|
-
- name: Resolve pnpm store path
|
|
37
|
-
id: pnpm-store
|
|
38
|
-
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"
|
|
39
|
-
|
|
40
|
-
- name: Cache pnpm store
|
|
41
|
-
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
42
|
-
with:
|
|
43
|
-
path: ${{ steps.pnpm-store.outputs.path }}
|
|
44
|
-
key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
45
|
-
restore-keys: pnpm-${{ runner.os }}-
|
|
46
|
-
|
|
47
|
-
- name: Install dependencies
|
|
48
|
-
run: pnpm install --frozen-lockfile
|
|
49
|
-
|
|
50
|
-
- name: Prune pnpm store
|
|
51
|
-
run: pnpm store prune
|
|
52
|
-
|
|
53
|
-
- name: Run tests
|
|
54
|
-
run: pnpm test
|
|
55
|
-
|
|
56
|
-
- name: Upload test report
|
|
57
|
-
if: failure()
|
|
58
|
-
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
59
|
-
with:
|
|
60
|
-
name: ci-test-report-${{ github.run_id }}-${{ github.run_attempt }}
|
|
61
|
-
path: |
|
|
62
|
-
test/__reports__
|
|
63
|
-
**/__current__/**
|
|
64
|
-
.vitest/attachments
|
|
65
|
-
!**/node_modules/**
|
|
66
|
-
include-hidden-files: true
|
|
67
|
-
if-no-files-found: ignore
|
|
68
|
-
retention-days: 14
|
|
1
|
+
# GitHub Actions workflow (scaffolded by Nuxt Spec) to run test suite in a pinned Playwright container for reproducible results.
|
|
2
|
+
# Triggered automatically on push/pull requests to default branch with possible manual dispatch.
|
|
3
|
+
# Uses pnpm - the pnpm store is cached so subsequent `pnpm install` runs reuse downloaded deps.
|
|
4
|
+
# If tests fail, `ci-test-report` artifact (HTML report, current screenshots, Vitest attachments) is uploaded for inspection.
|
|
5
|
+
# NOTE: commits pushed by "update baselines" workflow don't trigger this workflow - dispatch it manually afterwards.
|
|
6
|
+
|
|
7
|
+
name: Nuxt Spec CI Tests (verify)
|
|
8
|
+
|
|
9
|
+
on:
|
|
10
|
+
push:
|
|
11
|
+
branches: [__DEFAULT_BRANCH__]
|
|
12
|
+
pull_request:
|
|
13
|
+
branches: [__DEFAULT_BRANCH__]
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
concurrency:
|
|
17
|
+
group: ci-test-verify-${{ github.ref }}
|
|
18
|
+
cancel-in-progress: true
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
jobs:
|
|
24
|
+
verify:
|
|
25
|
+
runs-on: ubuntu-latest
|
|
26
|
+
container:
|
|
27
|
+
# must match `playwright` dependency version
|
|
28
|
+
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
29
|
+
steps:
|
|
30
|
+
- name: Checkout
|
|
31
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
32
|
+
|
|
33
|
+
- name: Enable pnpm via corepack
|
|
34
|
+
run: corepack enable
|
|
35
|
+
|
|
36
|
+
- name: Resolve pnpm store path
|
|
37
|
+
id: pnpm-store
|
|
38
|
+
run: echo "path=$(pnpm store path --silent)" >> "$GITHUB_OUTPUT"
|
|
39
|
+
|
|
40
|
+
- name: Cache pnpm store
|
|
41
|
+
uses: actions/cache@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
42
|
+
with:
|
|
43
|
+
path: ${{ steps.pnpm-store.outputs.path }}
|
|
44
|
+
key: pnpm-${{ runner.os }}-${{ hashFiles('pnpm-lock.yaml') }}
|
|
45
|
+
restore-keys: pnpm-${{ runner.os }}-
|
|
46
|
+
|
|
47
|
+
- name: Install dependencies
|
|
48
|
+
run: pnpm install --frozen-lockfile
|
|
49
|
+
|
|
50
|
+
- name: Prune pnpm store
|
|
51
|
+
run: pnpm store prune
|
|
52
|
+
|
|
53
|
+
- name: Run tests
|
|
54
|
+
run: pnpm test
|
|
55
|
+
|
|
56
|
+
- name: Upload test report
|
|
57
|
+
if: failure()
|
|
58
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
59
|
+
with:
|
|
60
|
+
name: ci-test-report-${{ github.run_id }}-${{ github.run_attempt }}
|
|
61
|
+
path: |
|
|
62
|
+
test/__reports__
|
|
63
|
+
**/__current__/**
|
|
64
|
+
.vitest/attachments
|
|
65
|
+
!**/node_modules/**
|
|
66
|
+
include-hidden-files: true
|
|
67
|
+
if-no-files-found: ignore
|
|
68
|
+
retention-days: 14
|
|
@@ -1,69 +1,69 @@
|
|
|
1
|
-
# GitLab CI/CD job (scaffolded by Nuxt Spec) to update test baselines (manually triggered).
|
|
2
|
-
# Start it via "Build > Pipelines > Run pipeline" on selected branch with `NUXT_SPEC_UPDATE_BASELINES` set to `true`.
|
|
3
|
-
# Runs in the same pinned Playwright container as "verify" job.
|
|
4
|
-
# Updated baselines (`__baseline__`, `__screenshots__`) and snapshots (`__snapshots__`) are committed back to the selected branch.
|
|
5
|
-
# If the push is rejected (e.g. protected branch), a new branch with a merge request is created instead.
|
|
6
|
-
# PREREQUISITE: project access token with `write_repository` scope stored as masked CI/CD variable `NUXT_SPEC_CI_TOKEN`
|
|
7
|
-
# (CI_JOB_TOKEN cannot be used for pushing; the token role decides whether it may push into protected branches).
|
|
8
|
-
|
|
9
|
-
variables:
|
|
10
|
-
NUXT_SPEC_UPDATE_BASELINES:
|
|
11
|
-
value: "false"
|
|
12
|
-
options: ["false", "true"]
|
|
13
|
-
description: Set to "true" to regenerate and commit test baselines (Nuxt Spec).
|
|
14
|
-
|
|
15
|
-
ci-test-update:
|
|
16
|
-
stage: test
|
|
17
|
-
# must match `playwright` dependency version
|
|
18
|
-
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
19
|
-
resource_group: ci-test-update-$CI_COMMIT_REF_SLUG
|
|
20
|
-
rules:
|
|
21
|
-
- if: $CI_PIPELINE_SOURCE == "web" && $NUXT_SPEC_UPDATE_BASELINES == "true" && $CI_COMMIT_BRANCH
|
|
22
|
-
variables:
|
|
23
|
-
PNPM_STORE_DIR: $CI_PROJECT_DIR/.pnpm-store
|
|
24
|
-
cache:
|
|
25
|
-
key:
|
|
26
|
-
prefix: pnpm
|
|
27
|
-
files:
|
|
28
|
-
- pnpm-lock.yaml
|
|
29
|
-
paths:
|
|
30
|
-
- .pnpm-store/
|
|
31
|
-
before_script:
|
|
32
|
-
- ': "${NUXT_SPEC_CI_TOKEN:?CI/CD variable NUXT_SPEC_CI_TOKEN (project access token with write_repository scope) is required}"'
|
|
33
|
-
- corepack enable
|
|
34
|
-
- pnpm install --frozen-lockfile --store-dir "$PNPM_STORE_DIR"
|
|
35
|
-
- pnpm store prune --store-dir "$PNPM_STORE_DIR"
|
|
36
|
-
script:
|
|
37
|
-
- pnpm test-u
|
|
38
|
-
- |
|
|
39
|
-
set -eu
|
|
40
|
-
|
|
41
|
-
git config user.name "$GITLAB_USER_NAME"
|
|
42
|
-
git config user.email "$GITLAB_USER_EMAIL"
|
|
43
|
-
|
|
44
|
-
# `git add` fails on a glob without matches, `git ls-files` doesn't
|
|
45
|
-
git ls-files -z -m -d -o --exclude-standard -- \
|
|
46
|
-
':(glob)**/__baseline__/**' \
|
|
47
|
-
':(glob)**/__screenshots__/**' \
|
|
48
|
-
':(glob)**/__snapshots__/**' \
|
|
49
|
-
| xargs -0 -r git add -A --
|
|
50
|
-
if git diff --cached --quiet; then
|
|
51
|
-
echo "No baseline changes to commit."
|
|
52
|
-
exit 0
|
|
53
|
-
fi
|
|
54
|
-
|
|
55
|
-
git commit -m "test(ci): update test baselines"
|
|
56
|
-
|
|
57
|
-
PUSH_URL="${CI_SERVER_PROTOCOL}://oauth2:${NUXT_SPEC_CI_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/${CI_PROJECT_PATH}.git"
|
|
58
|
-
if git push "$PUSH_URL" "HEAD:refs/heads/$CI_COMMIT_BRANCH"; then
|
|
59
|
-
echo "Updated baselines pushed to '$CI_COMMIT_BRANCH'."
|
|
60
|
-
exit 0
|
|
61
|
-
fi
|
|
62
|
-
|
|
63
|
-
echo "Push to '$CI_COMMIT_BRANCH' was rejected (e.g. protected branch) - creating merge request..."
|
|
64
|
-
NEW_BRANCH="ci-test/update-$(date +%Y%m%d%H%M%S)"
|
|
65
|
-
git push "$PUSH_URL" "HEAD:refs/heads/$NEW_BRANCH" \
|
|
66
|
-
-o merge_request.create \
|
|
67
|
-
-o merge_request.target="$CI_COMMIT_BRANCH" \
|
|
68
|
-
-o merge_request.title="test(ci): update test baselines" \
|
|
69
|
-
-o merge_request.description="Test baselines update triggered by pipeline #$CI_PIPELINE_IID against branch \`$CI_COMMIT_BRANCH\`."
|
|
1
|
+
# GitLab CI/CD job (scaffolded by Nuxt Spec) to update test baselines (manually triggered).
|
|
2
|
+
# Start it via "Build > Pipelines > Run pipeline" on selected branch with `NUXT_SPEC_UPDATE_BASELINES` set to `true`.
|
|
3
|
+
# Runs in the same pinned Playwright container as "verify" job.
|
|
4
|
+
# Updated baselines (`__baseline__`, `__screenshots__`) and snapshots (`__snapshots__`) are committed back to the selected branch.
|
|
5
|
+
# If the push is rejected (e.g. protected branch), a new branch with a merge request is created instead.
|
|
6
|
+
# PREREQUISITE: project access token with `write_repository` scope stored as masked CI/CD variable `NUXT_SPEC_CI_TOKEN`
|
|
7
|
+
# (CI_JOB_TOKEN cannot be used for pushing; the token role decides whether it may push into protected branches).
|
|
8
|
+
|
|
9
|
+
variables:
|
|
10
|
+
NUXT_SPEC_UPDATE_BASELINES:
|
|
11
|
+
value: "false"
|
|
12
|
+
options: ["false", "true"]
|
|
13
|
+
description: Set to "true" to regenerate and commit test baselines (Nuxt Spec).
|
|
14
|
+
|
|
15
|
+
ci-test-update:
|
|
16
|
+
stage: test
|
|
17
|
+
# must match `playwright` dependency version
|
|
18
|
+
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
19
|
+
resource_group: ci-test-update-$CI_COMMIT_REF_SLUG
|
|
20
|
+
rules:
|
|
21
|
+
- if: $CI_PIPELINE_SOURCE == "web" && $NUXT_SPEC_UPDATE_BASELINES == "true" && $CI_COMMIT_BRANCH
|
|
22
|
+
variables:
|
|
23
|
+
PNPM_STORE_DIR: $CI_PROJECT_DIR/.pnpm-store
|
|
24
|
+
cache:
|
|
25
|
+
key:
|
|
26
|
+
prefix: pnpm
|
|
27
|
+
files:
|
|
28
|
+
- pnpm-lock.yaml
|
|
29
|
+
paths:
|
|
30
|
+
- .pnpm-store/
|
|
31
|
+
before_script:
|
|
32
|
+
- ': "${NUXT_SPEC_CI_TOKEN:?CI/CD variable NUXT_SPEC_CI_TOKEN (project access token with write_repository scope) is required}"'
|
|
33
|
+
- corepack enable
|
|
34
|
+
- pnpm install --frozen-lockfile --store-dir "$PNPM_STORE_DIR"
|
|
35
|
+
- pnpm store prune --store-dir "$PNPM_STORE_DIR"
|
|
36
|
+
script:
|
|
37
|
+
- pnpm test-u
|
|
38
|
+
- |
|
|
39
|
+
set -eu
|
|
40
|
+
|
|
41
|
+
git config user.name "$GITLAB_USER_NAME"
|
|
42
|
+
git config user.email "$GITLAB_USER_EMAIL"
|
|
43
|
+
|
|
44
|
+
# `git add` fails on a glob without matches, `git ls-files` doesn't
|
|
45
|
+
git ls-files -z -m -d -o --exclude-standard -- \
|
|
46
|
+
':(glob)**/__baseline__/**' \
|
|
47
|
+
':(glob)**/__screenshots__/**' \
|
|
48
|
+
':(glob)**/__snapshots__/**' \
|
|
49
|
+
| xargs -0 -r git add -A --
|
|
50
|
+
if git diff --cached --quiet; then
|
|
51
|
+
echo "No baseline changes to commit."
|
|
52
|
+
exit 0
|
|
53
|
+
fi
|
|
54
|
+
|
|
55
|
+
git commit -m "test(ci): update test baselines"
|
|
56
|
+
|
|
57
|
+
PUSH_URL="${CI_SERVER_PROTOCOL}://oauth2:${NUXT_SPEC_CI_TOKEN}@${CI_SERVER_HOST}:${CI_SERVER_PORT}/${CI_PROJECT_PATH}.git"
|
|
58
|
+
if git push "$PUSH_URL" "HEAD:refs/heads/$CI_COMMIT_BRANCH"; then
|
|
59
|
+
echo "Updated baselines pushed to '$CI_COMMIT_BRANCH'."
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
echo "Push to '$CI_COMMIT_BRANCH' was rejected (e.g. protected branch) - creating merge request..."
|
|
64
|
+
NEW_BRANCH="ci-test/update-$(date +%Y%m%d%H%M%S)"
|
|
65
|
+
git push "$PUSH_URL" "HEAD:refs/heads/$NEW_BRANCH" \
|
|
66
|
+
-o merge_request.create \
|
|
67
|
+
-o merge_request.target="$CI_COMMIT_BRANCH" \
|
|
68
|
+
-o merge_request.title="test(ci): update test baselines" \
|
|
69
|
+
-o merge_request.description="Test baselines update triggered by pipeline #$CI_PIPELINE_IID against branch \`$CI_COMMIT_BRANCH\`."
|
|
@@ -1,41 +1,41 @@
|
|
|
1
|
-
# GitLab CI/CD job (scaffolded by Nuxt Spec) to run test suite in a pinned Playwright container for reproducible results.
|
|
2
|
-
# Triggered automatically on push to default branch and on merge requests targeting it.
|
|
3
|
-
# Can be started manually via "Build > Pipelines > Run pipeline" (with `NUXT_SPEC_UPDATE_BASELINES` left as `false`).
|
|
4
|
-
# Uses pnpm - the pnpm store is cached so subsequent `pnpm install` runs reuse downloaded deps.
|
|
5
|
-
# If tests fail, artifacts (HTML report, current screenshots, Vitest attachments) are kept for inspection.
|
|
6
|
-
|
|
7
|
-
ci-test-verify:
|
|
8
|
-
stage: test
|
|
9
|
-
# must match `playwright` dependency version
|
|
10
|
-
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
11
|
-
interruptible: true
|
|
12
|
-
rules:
|
|
13
|
-
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
14
|
-
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
|
|
15
|
-
- if: $CI_PIPELINE_SOURCE == "web" && $NUXT_SPEC_UPDATE_BASELINES != "true"
|
|
16
|
-
variables:
|
|
17
|
-
PNPM_STORE_DIR: $CI_PROJECT_DIR/.pnpm-store
|
|
18
|
-
cache:
|
|
19
|
-
key:
|
|
20
|
-
prefix: pnpm
|
|
21
|
-
files:
|
|
22
|
-
- pnpm-lock.yaml
|
|
23
|
-
paths:
|
|
24
|
-
- .pnpm-store/
|
|
25
|
-
before_script:
|
|
26
|
-
- corepack enable
|
|
27
|
-
- pnpm install --frozen-lockfile --store-dir "$PNPM_STORE_DIR"
|
|
28
|
-
- pnpm store prune --store-dir "$PNPM_STORE_DIR"
|
|
29
|
-
script:
|
|
30
|
-
- pnpm test
|
|
31
|
-
artifacts:
|
|
32
|
-
name: ci-test-report-$CI_PIPELINE_ID
|
|
33
|
-
when: on_failure
|
|
34
|
-
expire_in: 14 days
|
|
35
|
-
paths:
|
|
36
|
-
- test/__reports__/
|
|
37
|
-
- "**/__current__/"
|
|
38
|
-
- .vitest/attachments/
|
|
39
|
-
exclude:
|
|
40
|
-
- node_modules/**/*
|
|
41
|
-
- .pnpm-store/**/*
|
|
1
|
+
# GitLab CI/CD job (scaffolded by Nuxt Spec) to run test suite in a pinned Playwright container for reproducible results.
|
|
2
|
+
# Triggered automatically on push to default branch and on merge requests targeting it.
|
|
3
|
+
# Can be started manually via "Build > Pipelines > Run pipeline" (with `NUXT_SPEC_UPDATE_BASELINES` left as `false`).
|
|
4
|
+
# Uses pnpm - the pnpm store is cached so subsequent `pnpm install` runs reuse downloaded deps.
|
|
5
|
+
# If tests fail, artifacts (HTML report, current screenshots, Vitest attachments) are kept for inspection.
|
|
6
|
+
|
|
7
|
+
ci-test-verify:
|
|
8
|
+
stage: test
|
|
9
|
+
# must match `playwright` dependency version
|
|
10
|
+
image: mcr.microsoft.com/playwright:v__PLAYWRIGHT_VERSION__-jammy
|
|
11
|
+
interruptible: true
|
|
12
|
+
rules:
|
|
13
|
+
- if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
|
14
|
+
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_MERGE_REQUEST_TARGET_BRANCH_NAME == $CI_DEFAULT_BRANCH
|
|
15
|
+
- if: $CI_PIPELINE_SOURCE == "web" && $NUXT_SPEC_UPDATE_BASELINES != "true"
|
|
16
|
+
variables:
|
|
17
|
+
PNPM_STORE_DIR: $CI_PROJECT_DIR/.pnpm-store
|
|
18
|
+
cache:
|
|
19
|
+
key:
|
|
20
|
+
prefix: pnpm
|
|
21
|
+
files:
|
|
22
|
+
- pnpm-lock.yaml
|
|
23
|
+
paths:
|
|
24
|
+
- .pnpm-store/
|
|
25
|
+
before_script:
|
|
26
|
+
- corepack enable
|
|
27
|
+
- pnpm install --frozen-lockfile --store-dir "$PNPM_STORE_DIR"
|
|
28
|
+
- pnpm store prune --store-dir "$PNPM_STORE_DIR"
|
|
29
|
+
script:
|
|
30
|
+
- pnpm test
|
|
31
|
+
artifacts:
|
|
32
|
+
name: ci-test-report-$CI_PIPELINE_ID
|
|
33
|
+
when: on_failure
|
|
34
|
+
expire_in: 14 days
|
|
35
|
+
paths:
|
|
36
|
+
- test/__reports__/
|
|
37
|
+
- "**/__current__/"
|
|
38
|
+
- .vitest/attachments/
|
|
39
|
+
exclude:
|
|
40
|
+
- node_modules/**/*
|
|
41
|
+
- .pnpm-store/**/*
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# GitLab CI/CD configuration (scaffolded by Nuxt Spec).
|
|
2
|
-
# Nuxt Spec test jobs are defined in the included files.
|
|
3
|
-
|
|
4
|
-
include:
|
|
5
|
-
- local: .gitlab/ci/ci-test-verify.yml
|
|
6
|
-
- local: .gitlab/ci/ci-test-update.yml
|
|
1
|
+
# GitLab CI/CD configuration (scaffolded by Nuxt Spec).
|
|
2
|
+
# Nuxt Spec test jobs are defined in the included files.
|
|
3
|
+
|
|
4
|
+
include:
|
|
5
|
+
- local: .gitlab/ci/ci-test-verify.yml
|
|
6
|
+
- local: .gitlab/ci/ci-test-update.yml
|
|
@@ -1,19 +1,19 @@
|
|
|
1
|
-
# settings for Nuxt & pnpm
|
|
2
|
-
|
|
3
|
-
# https://pnpm.io/settings/node-modules#shamefullyhoist
|
|
4
|
-
# required to handle transitive dependencies
|
|
5
|
-
# without having to explicitly declare them
|
|
6
|
-
shamefullyHoist: true
|
|
7
|
-
|
|
8
|
-
# https://pnpm.io/settings/build#allowbuilds
|
|
9
|
-
# pnpm naturally blocks all post-install scripts
|
|
10
|
-
# some are required for development, others are not relevant
|
|
11
|
-
allowBuilds:
|
|
12
|
-
# provides fallback repair of platform-specific Rust native engine
|
|
13
|
-
'unrs-resolver': true
|
|
14
|
-
# allows node-gyp build of associated native binaries from local sources
|
|
15
|
-
# disabled because it would require an explicit opt-in
|
|
16
|
-
'@parcel/watcher': false
|
|
17
|
-
# optimization for CLI usage of 'esbuild'
|
|
18
|
-
# disabled because its runtime resolves native binaries itself
|
|
19
|
-
'esbuild': false
|
|
1
|
+
# settings for Nuxt & pnpm
|
|
2
|
+
|
|
3
|
+
# https://pnpm.io/settings/node-modules#shamefullyhoist
|
|
4
|
+
# required to handle transitive dependencies
|
|
5
|
+
# without having to explicitly declare them
|
|
6
|
+
shamefullyHoist: true
|
|
7
|
+
|
|
8
|
+
# https://pnpm.io/settings/build#allowbuilds
|
|
9
|
+
# pnpm naturally blocks all post-install scripts
|
|
10
|
+
# some are required for development, others are not relevant
|
|
11
|
+
allowBuilds:
|
|
12
|
+
# provides fallback repair of platform-specific Rust native engine
|
|
13
|
+
'unrs-resolver': true
|
|
14
|
+
# allows node-gyp build of associated native binaries from local sources
|
|
15
|
+
# disabled because it would require an explicit opt-in
|
|
16
|
+
'@parcel/watcher': false
|
|
17
|
+
# optimization for CLI usage of 'esbuild'
|
|
18
|
+
# disabled because its runtime resolves native binaries itself
|
|
19
|
+
'esbuild': false
|