-
Notifications
You must be signed in to change notification settings - Fork 112
195 lines (158 loc) · 6.46 KB
/
ci.yml
File metadata and controls
195 lines (158 loc) · 6.46 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
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
name: CI
on:
pull_request_target:
types: [opened, synchronize, reopened]
permissions:
pull-requests: write
jobs:
detect-changes:
runs-on: ubuntu-latest
outputs:
backendChanged: ${{ steps.detect.outputs.backendChanged }}
mobileChanged: ${{ steps.detect.outputs.mobileChanged }}
webChanged: ${{ steps.detect.outputs.webChanged }}
backendFiles: ${{ steps.detect.outputs.backendFiles }}
mobileFiles: ${{ steps.detect.outputs.mobileFiles }}
webFiles: ${{ steps.detect.outputs.webFiles }}
backendTestFiles: ${{ steps.detect.outputs.backendTestFiles }}
mobileTestFiles: ${{ steps.detect.outputs.mobileTestFiles }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha }}
- name: Detect changed files
id: detect
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const script = require('./.github/scripts/ciScript.js');
return await script({ github, context, core });
backend-ci:
needs: detect-changes
if: needs.detect-changes.outputs.backendChanged == 'true'
runs-on: ubuntu-latest
outputs:
lint_result: ${{ steps.backend_lint.outcome }}
test_result: ${{ steps.backend_test.outcome }}
typecheck_result: ${{ steps.backend_typecheck.outcome }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: 22
- name: Install shared dependencies
run: npm --prefix packages/shared install
- name: Install backend dependencies
run: npm --prefix apps/backend install
- name: Backend lint
id: backend_lint
continue-on-error: true
run: cd apps/backend && npx eslint ${{ needs.detect-changes.outputs.backendFiles }}
- name: Backend test
id: backend_test
if: needs.detect-changes.outputs.backendTestFiles != ''
continue-on-error: true
run: npm --prefix apps/backend run test -- --passWithNoTests ${{ needs.detect-changes.outputs.backendTestFiles }}
- name: Backend typecheck
id: backend_typecheck
continue-on-error: true
run: npm --prefix apps/backend run typecheck
- name: Fail job if any check failed
if: >
steps.backend_lint.outcome == 'failure' ||
steps.backend_test.outcome == 'failure' ||
steps.backend_typecheck.outcome == 'failure'
run: exit 1
web-ci:
needs: detect-changes
if: needs.detect-changes.outputs.webChanged == 'true'
runs-on: ubuntu-latest
outputs:
check_result: ${{ steps.web_check.outcome }}
build_result: ${{ steps.web_build.outcome }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: 22
- name: Install web dependencies
run: npm --prefix apps/web install
- name: Web check
id: web_check
continue-on-error: true
run: npm --prefix apps/web run lint
- name: Web build
id: web_build
continue-on-error: true
run: npm --prefix apps/web run build
- name: Fail job if any check failed
if: >
steps.web_check.outcome == 'failure' ||
steps.web_build.outcome == 'failure'
run: exit 1
mobile-ci:
needs: detect-changes
if: needs.detect-changes.outputs.mobileChanged == 'true'
runs-on: ubuntu-latest
outputs:
lint_result: ${{ steps.mobile_lint.outcome }}
test_result: ${{ steps.mobile_test.outcome }}
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
with:
ref: ${{ github.event.pull_request.head.sha }}
- uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e
with:
node-version: 22
- name: Install shared dependencies
run: npm --prefix packages/shared install
- name: Install mobile dependencies
run: npm --prefix apps/mobile install
- name: Mobile lint
id: mobile_lint
continue-on-error: true
run: cd apps/mobile && npx eslint ${{ needs.detect-changes.outputs.mobileFiles }}
- name: Mobile test
id: mobile_test
if: needs.detect-changes.outputs.mobileTestFiles != ''
continue-on-error: true
run: npm --prefix apps/mobile run test -- --passWithNoTests ${{ needs.detect-changes.outputs.mobileTestFiles }}
- name: Fail job if any check failed
if: >
steps.mobile_lint.outcome == 'failure' ||
steps.mobile_test.outcome == 'failure'
run: exit 1
comment-results:
needs:
- backend-ci
- web-ci
- mobile-ci
if: always()
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd
- name: Comment results
uses: actions/github-script@3a2844b7e9c422d3c10d287c895573f7108da1b3
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
const script = require('./.github/scripts/commentResults.js');
await script({
github,
context,
backend: '${{ needs.backend-ci.result }}',
web: '${{ needs.web-ci.result }}',
mobile: '${{ needs.mobile-ci.result }}',
backendLint: '${{ needs.backend-ci.outputs.lint_result }}',
backendTest: '${{ needs.backend-ci.outputs.test_result }}',
backendTypecheck: '${{ needs.backend-ci.outputs.typecheck_result }}',
webCheck: '${{ needs.web-ci.outputs.check_result }}',
webBuild: '${{ needs.web-ci.outputs.build_result }}',
mobileLint: '${{ needs.mobile-ci.outputs.lint_result }}',
mobileTest: '${{ needs.mobile-ci.outputs.test_result }}',
});