-
Notifications
You must be signed in to change notification settings - Fork 18
190 lines (185 loc) · 7.31 KB
/
ci.yml
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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
name: Lint, Build, and Test Bitauth IDE
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- name: Checkout without submodules
uses: actions/checkout@v4
- name: Restore .yarn if cached
id: restore-yarn
uses: actions/cache@v4
with:
path: .yarn
key: yarn-${{ hashFiles('yarn.lock') }}
- name: Get Libauth version hash
id: libauth-version
run: echo "$(git submodule status libauth)" && echo "HASH=$(git submodule status libauth | awk '{ print $1 }')" >> $GITHUB_OUTPUT
- name: Restore libauth if cached
id: restore-libauth
uses: actions/cache@v4
with:
path: libauth
key: libauth-${{ steps.libauth-version.outputs.HASH }}
- name: Checkout submodules if uncached
if: steps.restore-yarn.outputs.cache-hit != 'true' || steps.restore-libauth.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install dependencies if uncached
if: steps.restore-yarn.outputs.cache-hit != 'true' || steps.restore-libauth.outputs.cache-hit != 'true'
run: yarn install --immutable --immutable-cache --check-cache
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- run: yarn test:lint
e2e-tests:
# Only run e2e-tests if lint passes; this also saves running time by reusing cached submodules/dependencies
needs: [lint]
runs-on: ubuntu-latest
container:
image: mcr.microsoft.com/playwright:v1.41.0-jammy
strategy:
fail-fast: false
matrix:
environment: ['dev', 'prod']
shardIndex: [1, 2, 3, 4, 5, 6, 7, 8]
shardTotal: [8]
name: e2e-tests (${{ matrix.environment }}, ${{ matrix.shardIndex }}/${{ matrix.shardTotal }})
steps:
- name: Checkout without submodules
uses: actions/checkout@v4
# TODO: use caches from "lint" in "e2e-tests": https://github.com/actions/cache/issues/1300#issuecomment-1899893716
# - name: Restore Yarn cache
# id: restore-yarn
# uses: actions/cache/restore@v4
# with:
# path: .yarn
# key: yarn-${{ hashFiles('yarn.lock') }}
# fail-on-cache-miss: true
# - name: Get Libauth version hash
# id: libauth-version
# # Prevents: `fatal: detected dubious ownership in repository at '/__w/bitauth-ide/bitauth-ide'`. We can safely disable this check for CI.
# run: git config --global --add safe.directory '*' && echo "HASH=$(git submodule status libauth | awk '{ print $1 }')" >> $GITHUB_OUTPUT
# - name: Restore Libauth build
# id: restore-libauth
# uses: actions/cache/restore@v4
# with:
# path: libauth
# key: libauth-${{ steps.libauth-version.outputs.HASH }}
# fail-on-cache-miss: true
# - uses: actions/setup-node@v4
# with:
# node-version: 20
# begin: duplicated cache creation
- name: Restore .yarn if cached
id: restore-yarn
uses: actions/cache@v4
with:
path: .yarn
key: yarn-${{ hashFiles('yarn.lock') }}
- name: Get Libauth version hash
id: libauth-version
# Prevents: `fatal: detected dubious ownership in repository at '/__w/bitauth-ide/bitauth-ide'`. We can safely disable this check for CI.
run: git config --global --add safe.directory '*' && echo "HASH=$(git submodule status libauth | awk '{ print $1 }')" >> $GITHUB_OUTPUT
- name: Restore libauth if cached
id: restore-libauth
uses: actions/cache@v4
with:
path: libauth
key: libauth-${{ steps.libauth-version.outputs.HASH }}
- name: Checkout submodules if uncached
if: steps.restore-yarn.outputs.cache-hit != 'true' || steps.restore-libauth.outputs.cache-hit != 'true'
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install dependencies if uncached
if: steps.restore-yarn.outputs.cache-hit != 'true' || steps.restore-libauth.outputs.cache-hit != 'true'
run: yarn install --immutable --immutable-cache
# end: duplicated cache creation
- name: Test development build
run: yarn test:e2e --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --reporter blob,github
if: ${{ matrix.environment == 'dev' }}
env:
HOME: /root # https://github.com/microsoft/playwright/issues/6500
- name: Test production build
run: yarn build && yarn test:e2e:prod --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} --reporter blob,github
if: ${{ matrix.environment == 'prod' }}
env:
HOME: /root # https://github.com/microsoft/playwright/issues/6500
- name: Upload dist to artifacts
uses: actions/upload-artifact@v4
if: ${{ matrix.environment == 'prod' && matrix.shardIndex == 1 }}
with:
name: dist
path: dist/
retention-days: 90
- name: Upload blob-report to artifacts
uses: actions/upload-artifact@v4
if: always()
with:
name: blob-report-${{ matrix.environment }}-${{ matrix.shardIndex }}
path: blob-report
retention-days: 1
- name: Report code coverage
if: always()
run: yarn cov:lcov
- name: Send coverage to Codecov
if: always()
uses: codecov/codecov-action@v3
merge-reports:
# Merge reports after playwright-tests, even if some shards have failed
if: always()
needs: [e2e-tests]
runs-on: ubuntu-latest
steps:
- name: Checkout without submodules
uses: actions/checkout@v4
- name: Restore .yarn
id: restore-yarn
uses: actions/cache/restore@v4
with:
path: .yarn
key: yarn-${{ hashFiles('yarn.lock') }}
fail-on-cache-miss: true
- name: Setup node
uses: actions/setup-node@v4
with:
node-version: 20
- name: Download production blob reports from artifacts
uses: actions/download-artifact@v4
with:
path: prod-blob-reports
pattern: blob-report-prod-*
merge-multiple: true
- name: Merge production HTML report
run: yarn playwright merge-reports --reporter html ./prod-blob-reports
env:
PLAYWRIGHT_HTML_REPORT: prod-report
- name: Upload production HTML report to artifacts
uses: actions/upload-artifact@v4
with:
name: html-report-prod--run-${{ github.run_attempt }}
path: prod-report
retention-days: 90
- name: Download development blob reports from artifacts
uses: actions/download-artifact@v4
with:
path: dev-blob-reports
pattern: blob-report-dev-*
merge-multiple: true
- name: Merge development HTML report
run: yarn playwright merge-reports --reporter html ./dev-blob-reports
env:
PLAYWRIGHT_HTML_REPORT: dev-report
- name: Upload development HTML report to artifacts
uses: actions/upload-artifact@v4
with:
name: html-report-dev--run-${{ github.run_attempt }}
path: dev-report
retention-days: 90