1
1
# This file defines our primary CI workflow that runs on pull requests
2
2
# and also on pushes to special branches (auto, try).
3
3
#
4
- # The actual definition of the executed jobs is calculated by a Python
5
- # script located at src/ci/github-actions/ci.py , which
4
+ # The actual definition of the executed jobs is calculated by the
5
+ # ` src/ci/citool` crate , which
6
6
# uses job definition data from src/ci/github-actions/jobs.yml.
7
7
# You should primarily modify the `jobs.yml` file if you want to modify
8
8
# what jobs are executed in CI.
@@ -53,10 +53,20 @@ jobs:
53
53
steps :
54
54
- name : Checkout the source code
55
55
uses : actions/checkout@v4
56
+ # Cache citool to make its build faster, as it's in the critical path.
57
+ # The rust-cache doesn't bleed into the main `job`, so it should not affect any other
58
+ # Rust compilation.
59
+ - name : Cache citool
60
+ uses : Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8
61
+ with :
62
+ workspaces : src/ci/citool
56
63
- name : Calculate the CI job matrix
57
64
env :
58
65
COMMIT_MESSAGE : ${{ github.event.head_commit.message }}
59
- run : python3 src/ci/github-actions/ci.py calculate-job-matrix >> $GITHUB_OUTPUT
66
+ run : |
67
+ cd src/ci/citool
68
+ CARGO_INCREMENTAL=0 cargo test
69
+ CARGO_INCREMENTAL=0 cargo run calculate-job-matrix >> $GITHUB_OUTPUT
60
70
id : jobs
61
71
job :
62
72
name : ${{ matrix.full_name }}
65
75
timeout-minutes : 360
66
76
env :
67
77
CI_JOB_NAME : ${{ matrix.name }}
78
+ CI_JOB_DOC_URL : ${{ matrix.doc_url }}
79
+ GITHUB_WORKFLOW_RUN_ID : ${{ github.run_id }}
80
+ GITHUB_REPOSITORY : ${{ github.repository }}
68
81
CARGO_REGISTRIES_CRATES_IO_PROTOCOL : sparse
69
82
# commit of PR sha or commit sha. `GITHUB_SHA` is not accurate for PRs.
70
83
HEAD_SHA : ${{ github.event.pull_request.head.sha || github.sha }}
78
91
# Check the `calculate_matrix` job to see how is the matrix defined.
79
92
include : ${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}
80
93
steps :
94
+ - name : Install cargo in AWS CodeBuild
95
+ if : matrix.codebuild
96
+ run : |
97
+ # Check if cargo is installed
98
+ if ! command -v cargo &> /dev/null; then
99
+ echo "Cargo not found, installing Rust..."
100
+ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile=minimal
101
+ # Make cargo available in PATH
102
+ echo "$HOME/.cargo/bin" >> $GITHUB_PATH
103
+ fi
104
+
81
105
- name : disable git crlf conversion
82
106
run : git config --global core.autocrlf false
83
107
@@ -112,9 +136,6 @@ jobs:
112
136
# which then uses log commands to actually set them.
113
137
EXTRA_VARIABLES : ${{ toJson(matrix.env) }}
114
138
115
- - name : setup upstream remote
116
- run : src/ci/scripts/setup-upstream-remote.sh
117
-
118
139
- name : ensure the channel matches the target branch
119
140
run : src/ci/scripts/verify-channel.sh
120
141
@@ -155,6 +176,8 @@ jobs:
155
176
run : src/ci/scripts/install-ninja.sh
156
177
157
178
- name : enable ipv6 on Docker
179
+ # Don't run on codebuild because systemctl is not available
180
+ if : ${{ !matrix.codebuild }}
158
181
run : src/ci/scripts/enable-docker-ipv6.sh
159
182
160
183
# Disable automatic line ending conversion (again). On Windows, when we're
@@ -179,9 +202,28 @@ jobs:
179
202
- name : show the current environment
180
203
run : src/ci/scripts/dump-environment.sh
181
204
205
+ # Pre-build citool before the following step uninstalls rustup
206
+ # Build it into the build directory, to avoid modifying sources
207
+ - name : build citool
208
+ run : |
209
+ cd src/ci/citool
210
+ CARGO_INCREMENTAL=0 CARGO_TARGET_DIR=../../../build/citool cargo build
211
+
182
212
- name : run the build
183
- # Redirect stderr to stdout to avoid reordering the two streams in the GHA logs.
184
- run : src/ci/scripts/run-build-from-ci.sh 2>&1
213
+ run : |
214
+ set +e
215
+ # Redirect stderr to stdout to avoid reordering the two streams in the GHA logs.
216
+ src/ci/scripts/run-build-from-ci.sh 2>&1
217
+ STATUS=$?
218
+ set -e
219
+
220
+ if [[ "$STATUS" -ne 0 && -n "$CI_JOB_DOC_URL" ]]; then
221
+ echo "****************************************************************************"
222
+ echo "To find more information about this job, visit the following URL:"
223
+ echo "$CI_JOB_DOC_URL"
224
+ echo "****************************************************************************"
225
+ fi
226
+ exit ${STATUS}
185
227
env :
186
228
AWS_ACCESS_KEY_ID : ${{ env.CACHES_AWS_ACCESS_KEY_ID }}
187
229
AWS_SECRET_ACCESS_KEY : ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}
@@ -215,16 +257,37 @@ jobs:
215
257
# erroring about invalid credentials instead.
216
258
if : github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1'
217
259
260
+ - name : postprocess metrics into the summary
261
+ # This step is not critical, and if some I/O problem happens, we don't want
262
+ # to cancel the build.
263
+ continue-on-error : true
264
+ run : |
265
+ if [ -f build/metrics.json ]; then
266
+ METRICS=build/metrics.json
267
+ elif [ -f obj/build/metrics.json ]; then
268
+ METRICS=obj/build/metrics.json
269
+ else
270
+ echo "No metrics.json found"
271
+ exit 0
272
+ fi
273
+
274
+ # Get closest bors merge commit
275
+ PARENT_COMMIT=`git rev-list --author='bors <[email protected] >' -n1 --first-parent HEAD^1`
276
+
277
+ ./build/citool/debug/citool postprocess-metrics \
278
+ --job-name ${CI_JOB_NAME} \
279
+ --parent ${PARENT_COMMIT} \
280
+ ${METRICS} >> ${GITHUB_STEP_SUMMARY}
281
+
218
282
- name : upload job metrics to DataDog
283
+ # This step is not critical, and if some I/O problem happens, we don't want
284
+ # to cancel the build.
285
+ continue-on-error : true
219
286
if : needs.calculate_matrix.outputs.run_type != 'pr'
220
287
env :
221
- DATADOG_SITE : datadoghq.com
222
288
DATADOG_API_KEY : ${{ secrets.DATADOG_API_KEY }}
223
289
DD_GITHUB_JOB_NAME : ${{ matrix.full_name }}
224
- run : |
225
- cd src/ci
226
- npm ci
227
- python3 scripts/upload-build-metrics.py ../../build/cpu-usage.csv
290
+ run : ./build/citool/debug/citool upload-build-metrics build/cpu-usage.csv
228
291
229
292
# This job isused to tell bors the final status of the build, as there is no practical way to detect
230
293
# when a workflow is successful listening to webhooks only in our current bors implementation (homu).
0 commit comments