-
Notifications
You must be signed in to change notification settings - Fork 139
131 lines (114 loc) · 4.07 KB
/
ci-behavior.yml
File metadata and controls
131 lines (114 loc) · 4.07 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
name: Behavior Tests
permissions:
contents: read
on:
pull_request:
branches: [main, stable]
merge_group:
workflow_dispatch:
concurrency:
group: ci-behavior-${{ github.event.pull_request.number || github.run_id }}
cancel-in-progress: true
jobs:
detect:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: read
outputs:
behavior: ${{ steps.set.outputs.behavior }}
steps:
- uses: actions/checkout@v6
- uses: dorny/paths-filter@fbd0ab8f3e69293af611ebaee6363fc25e6d187d # v4.0.1
id: filter
if: github.event_name == 'pull_request'
with:
filters: |
behavior:
- 'packages/super-editor/**'
- 'packages/superdoc/**'
- 'packages/layout-engine/**'
- 'packages/word-layout/**'
- 'packages/preset-geometry/**'
- 'packages/document-api/**'
- 'shared/**'
- 'tests/behavior/**'
- 'pnpm-lock.yaml'
- 'package.json'
- 'pnpm-workspace.yaml'
- '.nvmrc'
- 'tsconfig.base.json'
- 'tsconfig.references.json'
- 'vite.sourceResolve.ts'
- '.github/workflows/ci-behavior.yml'
- id: set
run: |
if [[ "${{ github.event_name }}" == "pull_request" ]]; then
echo "behavior=${{ steps.filter.outputs.behavior }}" >> "$GITHUB_OUTPUT"
else
echo "behavior=true" >> "$GITHUB_OUTPUT"
fi
test:
needs: detect
if: needs.detect.outputs.behavior == 'true'
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
# PRs without behavior-relevant changes are skipped entirely by the
# detect gate above. When the suite does run, exercise all 3 browsers
# so cross-browser regressions are caught at PR time.
browser: [chromium, firefox, webkit]
shard: [1, 2, 3, 4]
steps:
- uses: actions/checkout@v6
- uses: pnpm/action-setup@v4
- uses: actions/setup-node@v6
with:
node-version-file: .nvmrc
cache: pnpm
- name: Install dependencies
run: pnpm install --ignore-scripts
- name: Build SuperDoc
run: pnpm build
- name: Get Playwright version
id: pw
run: echo "version=$(node -p "require('@playwright/test/package.json').version")" >> $GITHUB_OUTPUT
working-directory: tests/behavior
- name: Cache Playwright browsers
uses: actions/cache@v5
id: pw-cache
with:
path: ~/.cache/ms-playwright
key: playwright-${{ runner.os }}-${{ steps.pw.outputs.version }}-${{ matrix.browser }}
- name: Install Playwright browser
if: steps.pw-cache.outputs.cache-hit != 'true'
run: pnpm exec playwright install --with-deps ${{ matrix.browser }}
working-directory: tests/behavior
- name: Install Playwright system deps
if: steps.pw-cache.outputs.cache-hit == 'true'
run: pnpm exec playwright install-deps ${{ matrix.browser }}
working-directory: tests/behavior
- name: Run behavior tests (${{ matrix.browser }} shard ${{ matrix.shard }}/4)
run: pnpm exec playwright test --project=${{ matrix.browser }} --shard=${{ matrix.shard }}/4
working-directory: tests/behavior
validate:
name: Behavior Tests / validate
if: always()
needs: [detect, test]
runs-on: ubuntu-latest
steps:
- name: Check results
run: |
if [[ "${{ needs.detect.result }}" != "success" ]]; then
echo "Detect job did not succeed (result: ${{ needs.detect.result }})."
exit 1
fi
if [[ "${{ needs.detect.outputs.behavior }}" != "true" ]]; then
echo "Behavior tests skipped: no relevant paths changed."
exit 0
fi
if [[ "${{ needs.test.result }}" != "success" ]]; then
echo "Behavior tests were required but did not succeed (result: ${{ needs.test.result }})."
exit 1
fi