forked from DevExpress/devextreme-demos
-
Notifications
You must be signed in to change notification settings - Fork 0
301 lines (240 loc) · 12 KB
/
visual_tests_frameworks.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
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
name: Visual Tests (Frameworks)
concurrency:
group: wf-${{github.event.pull_request.number}}-${{github.workflow}}
cancel-in-progress: true
on:
push:
pull_request:
workflow_dispatch:
schedule:
- cron: '0 */2 * * 6,0'
jobs:
build:
runs-on: ubuntu-latest
name: Build
timeout-minutes: 40
steps:
#Git
- name: Get sources
uses: actions/checkout@v2
- name: Clone devextreme repo from PR author fork
continue-on-error: true
if: github.event_name == 'pull_request'
run: git clone -b ${{github.event.pull_request.head.ref}} https://github.com/${{github.event.pull_request.user.login}}/devextreme ./devextreme-repo
- name: Clone devextreme repo
run: |
BASE_BRANCH=$(node -p -e "require('./package.json').version.slice(0, 4).replace('.', '_')")
test -d ./devextreme-repo || git clone -b $BASE_BRANCH https://github.com/devexpress/devextreme ./devextreme-repo
#Build Devextreme
- name: DevExtreme - Restore npm cache
uses: actions/cache@v2
with:
path: ./devextreme-repo/node_modules
key: ${{ runner.os }}-devextreme-node-modules-${{ hashFiles('devextreme-repo/package-lock.json') }}
restore-keys: ${{ runner.os }}-devextreme-node-modules
- name: Use Node.js 15
uses: actions/setup-node@v2
with:
node-version: '15'
- name: DevExtreme - Install packages
working-directory: ./devextreme-repo
run: npm install --no-audit --no-fund
- name: DevExtreme - Build
working-directory: ./devextreme-repo
run: npm run build-npm-devextreme
- name: DevExtreme - Pack
working-directory: ./devextreme-repo/artifacts/npm/devextreme
run: npm pack
- name: Use Node.js 14
uses: actions/setup-node@v2
with:
node-version: '14'
#Build devextreme-react
- name: DevExtreme React - Clone devextreme-react repo
run: git clone -b 21.2 https://github.com/devexpress/devextreme-react ./devextreme-react-repo
- name: DevExtreme React - Update react metadata
working-directory: ./devextreme-repo
run: npm run internal-tool -- update-integration-meta --output-path ../devextreme-react-repo/packages/devextreme-react/metadata/integration-data.json --version 21_2 --js-scripts ./js --exclude js/renovation/
- name: DevExtreme React - Copy devextreme package
run: cp ./devextreme-repo/artifacts/npm/devextreme/*.tgz ./devextreme-react-repo/packages/devextreme-react
- name: DevExtreme React - Get devextreme-react ref
working-directory: ./devextreme-react-repo
id: devextreme-react-ref
run: echo "::set-output name=head::$(git rev-parse HEAD)"
- name: DevExtreme React - Restore package cache
id: devextreme-react-cache
uses: actions/cache@v2
with:
path: ./devextreme-react-*.tgz
key: devextreme-react-package-${{ steps.devextreme-react-ref.outputs.head }}-${{ hashFiles('devextreme-react-repo/packages/devextreme-react/metadata/integration-data.json') }}
- name: DevExtreme React - Install devextreme package
if: steps.devextreme-react-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-react-repo/packages/devextreme-react
run: npm install --save-dev $(ls *.tgz)
- name: DevExtreme React - Install packages for devextreme-react
if: steps.devextreme-react-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-react-repo
run: npm install --no-audit --no-fund
- name: DevExtreme React - Build and Pack
if: steps.devextreme-react-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-react-repo
run: npm run pack
- name: DevExtreme React - Copy devextreme-react package
if: steps.devextreme-react-cache.outputs.cache-hit != 'true'
run: cp ./devextreme-react-repo/packages/devextreme-react/npm/*.tgz .
#Build devextreme-vue
- name: DevExtreme Vue - Clone devextreme-vue repo
run: git clone -b 21.2 https://github.com/devexpress/devextreme-vue ./devextreme-vue-repo
- name: DevExtreme Vue - Update vue metadata
working-directory: ./devextreme-repo
run: npm run internal-tool -- update-integration-meta --output-path ../devextreme-react-repo/packages/devextreme-vue/metadata/integration-data.json --version 21_2 --js-scripts ./js --exclude js/renovation/
- name: DevExtreme Vue - Copy devextreme package
run: cp ./devextreme-repo/artifacts/npm/devextreme/*.tgz ./devextreme-vue-repo/packages/devextreme-vue
- name: DevExtreme Vue - Get devextreme-vue ref
working-directory: ./devextreme-vue-repo
id: devextreme-vue-ref
run: echo "::set-output name=head::$(git rev-parse HEAD)"
- name: DevExtreme Vue - Restore package cache
id: devextreme-vue-cache
uses: actions/cache@v2
with:
path: ./devextreme-vue-*.tgz
key: devextreme-vue-package-${{ steps.devextreme-vue-ref.outputs.head }}-${{ hashFiles('devextreme-vue-repo/packages/devextreme-vue/metadata/integration-data.json') }}
- name: DevExtreme Vue - Install devextreme package
if: steps.devextreme-vue-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-vue-repo/packages/devextreme-vue
run: npm install --save-dev $(ls *.tgz)
- name: DevExtreme Vue - Install packages for devextreme-vue
if: steps.devextreme-vue-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-vue-repo
run: npm install --no-audit --no-fund
- name: DevExtreme Vue - Build and Pack
if: steps.devextreme-vue-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-vue-repo
run: npm run pack
- name: DevExtreme Vue - Copy devextreme-vue package
if: steps.devextreme-vue-cache.outputs.cache-hit != 'true'
run: cp ./devextreme-vue-repo/packages/devextreme-vue/npm/*.tgz .
#Build devextreme-angular
- name: DevExtreme Angular - Clone devextreme-angular repo
run: git clone -b 21.2 https://github.com/devexpress/devextreme-angular ./devextreme-angular-repo
- name: DevExtreme Angular - Update angular metadata
working-directory: ./devextreme-repo
run: npm run internal-tool -- update-meta --output-path ../devextreme-angular-repo/packages/devextreme-angular/metadata/NGMetaData.json --version 21_2 --js-scripts ./js --exclude js/renovation/
- name: DevExtreme Angular - Copy devextreme package
run: cp ./devextreme-repo/artifacts/npm/devextreme/*.tgz ./devextreme-angular-repo/packages/devextreme-angular
- name: DevExtreme Angular - Get devextreme-angular ref
working-directory: ./devextreme-angular-repo
id: devextreme-angular-ref
run: echo "::set-output name=head::$(git rev-parse HEAD)"
- name: DevExtreme Angular - Restore package cache
id: devextreme-angular-cache
uses: actions/cache@v2
with:
path: ./devextreme-angular-*.tgz
key: devextreme-angular-package-${{ steps.devextreme-angular-ref.outputs.head }}-${{ hashFiles('devextreme-angular-repo/packages/devextreme-angular/metadata/NGMetaData.json') }}
- name: DevExtreme Angular - Install devextreme package
if: steps.devextreme-angular-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-angular-repo/packages/devextreme-angular
run: npm install --save-dev $(ls *.tgz)
- name: DevExtreme Angular - Install packages for devextreme-angular
if: steps.devextreme-angular-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-angular-repo
run: npm install --no-audit --no-fund
- name: DevExtreme Angular - Build and Pack
if: steps.devextreme-angular-cache.outputs.cache-hit != 'true'
working-directory: ./devextreme-angular-repo
run: npm run pack
- name: DevExtreme Angular - Copy devextreme-angular package
if: steps.devextreme-angular-cache.outputs.cache-hit != 'true'
run: cp ./devextreme-angular-repo/packages/devextreme-angular/npm/dist/*.tgz .
#Build Demos
- name: Demos - Restore npm cache
uses: actions/cache@v2
with:
path: ./node_modules
key: ${{ runner.os }}-node-modules-${{ hashFiles('package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-modules
- name: Demos - Install packages
run: npm install --no-audit --no-fund
- name: Demos - Install devextreme package
run: npm install $(find ./devextreme-repo/artifacts/npm/devextreme/ -maxdepth 1 -name "devextreme-*.tgz")
- name: Demos - Install devextreme-react package
run: npm install $(ls devextreme-react-*.tgz)
- name: Demos - Install devextreme-vue package
run: npm install $(ls devextreme-vue-*.tgz)
- name: Demos - Install devextreme-angular package
run: npm install $(ls devextreme-angular-*.tgz)
- name: Demos - Prepare bundles
run: npm run prepare-bundles
- name: Demos - Run tsc
run: tsc --noEmit
#Publish artifacts
- name: Zip node_modules
run: 7z a -t7z -mx3 -mmt2 node_modules.7z node_modules
- name: Copy build artifacts
uses: actions/upload-artifact@v2
with:
name: devextreme-sources
path: |
node_modules.7z
bundles/
retention-days: 1
testcafe:
needs: build
strategy:
fail-fast: false
matrix:
CONSTEL: [react(1/4), react(2/4), react(3/4), react(4/4), vue(1/4), vue(2/4), vue(3/4), vue(4/4), angular(1/4), angular(2/4), angular(3/4), angular(4/4)]
runs-on: ubuntu-latest
name: ${{ matrix.CONSTEL }}
timeout-minutes: 60
steps:
- name: Get sources
uses: actions/checkout@v2
- name: Download devextreme sources
uses: actions/download-artifact@v2
with:
name: devextreme-sources
- name: Unpack artifacts
run: 7z x node_modules.7z
- name: Prepare JS
run: npm run prepare-js
- name: Prepare Bundles
run: npx gulp bundles
- name: Run Web Server
run: |
python -m http.server 8080 &
python -m http.server 8081 &
python -m http.server 8082 &
python -m http.server 8083 &
- name: Get changed files
if: github.event_name == 'pull_request' && !contains(github.event.pull_request.labels.*.name, 'force all tests')
run: |
curl --header 'authorization: Bearer ${{ secrets.GITHUB_TOKEN }}' \
--url https://api.github.com/repos/${{github.repository}}/pulls/${{github.event.pull_request.number}}/files > changed-files.json
- name: Run TestCafe tests
env:
CHANGEDFILEINFOSPATH: ${{ github.workspace }}/changed-files.json
BROWSERS: chrome:headless --disable-partial-raster --disable-skia-runtime-opts --run-all-compositor-stages-before-draw --disable-new-content-rendering-timeout --disable-threaded-animation --disable-threaded-scrolling --disable-checker-imaging --disable-image-animation-resync --use-gl="swiftshader" --disable-features=PaintHolding --js-flags=--random-seed=2147483647 --font-render-hinting=none --disable-font-subpixel-positioning
#DEBUG: hammerhead:*,testcafe:*
CONCURRENCY: 4
TCQUARANTINE: true
CONSTEL: ${{ matrix.CONSTEL }}
# DISABLE_DEMO_TEST_SETTINGS: all # Uncomment to ignore all the visualtestrc.json settings
# DISABLE_DEMO_TEST_SETTINGS: ignore # Uncomment to ignore the `ignore` field
# DISABLE_DEMO_TEST_SETTINGS: comparison-options # Uncomment to ignore the `comparison-options` field
CI_ENV: true # The `ignore` field in the visualtestrc.json should be disabled when running test locally
run: npm run test-testcafe
- name: Get screenshots artifacts name
if: ${{ failure() }}
id: screenshotname
run: echo ::set-output name=value::$(echo "${{ matrix.CONSTEL }}" | grep -oP "^\w+")
- name: Copy screenshots artifacts
if: ${{ failure() }}
uses: actions/upload-artifact@v2
with:
name: screenshots-${{ steps.screenshotname.outputs.value }}
path: ${{ github.workspace }}/testing/artifacts/compared-screenshots/*
if-no-files-found: ignore