Skip to content

Commit 72f6162

Browse files
committedApr 30, 2024
Auto merge of #124366 - Kobzol:remove-yaml-expansion, r=pietroalbini
CI: remove `expand-yaml-anchors` This PR unifies all CI outcome jobs in a single job, and then removes the `expand-yaml-anchors` tool, since it is no longer needed after this change. I have tested try builds for both situations with the new `outcome` job (note that these two workflow runs use a different step structure in the outcome job, I have simplified it since): - [Success](https://github.com/rust-lang-ci/rust/actions/runs/8831529677/job/24251135366) - [Failure](https://github.com/rust-lang-ci/rust/actions/runs/8833052319/job/24251628792) r? `@ghost`
2 parents f973a15 + b194d5c commit 72f6162

File tree

14 files changed

+157
-705
lines changed

14 files changed

+157
-705
lines changed
 

‎.github/workflows/ci.yml

+125-76
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,14 @@
1-
#############################################################
2-
# WARNING: automatically generated file, DO NOT CHANGE! #
3-
#############################################################
4-
5-
# This file was automatically generated by the expand-yaml-anchors tool. The
6-
# source file that generated this one is:
7-
#
8-
# src/ci/github-actions/ci.yml
9-
#
10-
# Once you make changes to that file you need to run:
1+
# This file defines our primary CI workflow that runs on pull requests
2+
# and also on pushes to special branches (auto, try).
113
#
12-
# ./x.py run src/tools/expand-yaml-anchors/
13-
#
14-
# The CI build will fail if the tool is not run after changes to this file.
4+
# The actual definition of the executed jobs is calculated by a Python
5+
# script located at src/ci/github-actions/calculate-job-matrix.py, which
6+
# uses job definition data from src/ci/github-actions/jobs.yml.
7+
# You should primarily modify the `jobs.yml` file if you want to modify
8+
# what jobs are executed in CI.
159

16-
---
1710
name: CI
18-
"on":
11+
on:
1912
push:
2013
branches:
2114
- auto
@@ -25,176 +18,232 @@ name: CI
2518
pull_request:
2619
branches:
2720
- "**"
21+
2822
permissions:
2923
contents: read
3024
packages: write
25+
3126
defaults:
3227
run:
28+
# On Linux, macOS, and Windows, use the system-provided bash as the default
29+
# shell. (This should only make a difference on Windows, where the default
30+
# shell is PowerShell.)
3331
shell: bash
32+
3433
concurrency:
35-
group: "${{ github.workflow }}-${{ ((github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.sha) || github.ref }}"
34+
# For a given workflow, if we push to the same branch, cancel all previous builds on that branch.
35+
# We add an exception for try builds (try branch) and unrolled rollup builds (try-perf), which
36+
# are all triggered on the same branch, but which should be able to run concurrently.
37+
group: ${{ github.workflow }}-${{ ((github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.sha) || github.ref }}
3638
cancel-in-progress: true
3739
env:
3840
TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
3941
jobs:
42+
# The job matrix for `calculate_matrix` is defined in src/ci/github-actions/jobs.yml.
43+
# It calculates which jobs should be executed, based on the data of the ${{ github }} context.
44+
# If you want to modify CI jobs, take a look at src/ci/github-actions/jobs.yml.
4045
calculate_matrix:
4146
name: Calculate job matrix
4247
runs-on: ubuntu-latest
4348
outputs:
44-
jobs: "${{ steps.jobs.outputs.jobs }}"
49+
jobs: ${{ steps.jobs.outputs.jobs }}
50+
run_type: ${{ steps.jobs.outputs.run_type }}
4551
steps:
4652
- name: Checkout the source code
4753
uses: actions/checkout@v4
4854
- name: Calculate the CI job matrix
4955
run: python3 src/ci/github-actions/calculate-job-matrix.py >> $GITHUB_OUTPUT
5056
id: jobs
5157
job:
52-
name: "${{ matrix.name }}"
53-
needs:
54-
- calculate_matrix
58+
name: ${{ matrix.name }}
59+
needs: [ calculate_matrix ]
5560
runs-on: "${{ matrix.os }}"
5661
defaults:
5762
run:
58-
shell: "${{ contains(matrix.os, 'windows') && 'msys2 {0}' || 'bash' }}"
63+
shell: ${{ contains(matrix.os, 'windows') && 'msys2 {0}' || 'bash' }}
5964
timeout-minutes: 600
6065
env:
61-
CI_JOB_NAME: "${{ matrix.image }}"
66+
CI_JOB_NAME: ${{ matrix.image }}
6267
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
63-
HEAD_SHA: "${{ github.event.pull_request.head.sha || github.sha }}"
64-
DOCKER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
68+
# commit of PR sha or commit sha. `GITHUB_SHA` is not accurate for PRs.
69+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
70+
DOCKER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6571
SCCACHE_BUCKET: rust-lang-ci-sccache2
6672
CACHE_DOMAIN: ci-caches.rust-lang.org
67-
continue-on-error: "${{ matrix.continue_on_error || false }}"
73+
continue-on-error: ${{ matrix.continue_on_error || false }}
6874
strategy:
6975
matrix:
70-
include: "${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}"
71-
if: "fromJSON(needs.calculate_matrix.outputs.jobs)[0] != null"
76+
# Check the `calculate_matrix` job to see how is the matrix defined.
77+
include: ${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}
78+
# GitHub Actions fails the workflow if an empty list of jobs is provided to
79+
# the workflow, so we need to skip this job if nothing was produced by
80+
# the Python script.
81+
#
82+
# Unfortunately checking whether a list is empty is not possible in a nice
83+
# way due to GitHub Actions expressions limits.
84+
# This hack is taken from https://github.com/ferrocene/ferrocene/blob/d43edc6b7697cf1719ec1c17c54904ab94825763/.github/workflows/release.yml#L75-L82
85+
if: fromJSON(needs.calculate_matrix.outputs.jobs)[0] != null
7286
steps:
73-
- if: "contains(matrix.os, 'windows')"
87+
- if: contains(matrix.os, 'windows')
7488
uses: msys2/setup-msys2@v2.22.0
7589
with:
76-
msystem: "${{ contains(matrix.name, 'i686') && 'mingw32' || 'mingw64' }}"
90+
# i686 jobs use mingw32. x86_64 and cross-compile jobs use mingw64.
91+
msystem: ${{ contains(matrix.name, 'i686') && 'mingw32' || 'mingw64' }}
92+
# don't try to download updates for already installed packages
7793
update: false
94+
# don't try to use the msys that comes built-in to the github runner,
95+
# so we can control what is installed (i.e. not python)
7896
release: true
97+
# Inherit the full path from the Windows environment, with MSYS2's */bin/
98+
# dirs placed in front. This lets us run Windows-native Python etc.
7999
path-type: inherit
80-
install: "make dos2unix diffutils\n"
100+
install: >
101+
make
102+
dos2unix
103+
diffutils
104+
81105
- name: disable git crlf conversion
82106
run: git config --global core.autocrlf false
107+
83108
- name: checkout the source code
84109
uses: actions/checkout@v4
85110
with:
86111
fetch-depth: 2
112+
113+
# Rust Log Analyzer can't currently detect the PR number of a GitHub
114+
# Actions build on its own, so a hint in the log message is needed to
115+
# point it in the right direction.
87116
- name: configure the PR in which the error message will be posted
88-
run: "echo \"[CI_PR_NUMBER=$num]\""
117+
run: echo "[CI_PR_NUMBER=$num]"
89118
env:
90-
num: "${{ github.event.number }}"
91-
if: "success() && github.event_name == 'pull_request'"
119+
num: ${{ github.event.number }}
120+
if: needs.calculate_matrix.outputs.run_type == 'pr'
121+
92122
- name: add extra environment variables
93123
run: src/ci/scripts/setup-environment.sh
94124
env:
95-
EXTRA_VARIABLES: "${{ toJson(matrix.env) }}"
125+
# Since it's not possible to merge `${{ matrix.env }}` with the other
126+
# variables in `job.<name>.env`, the variables defined in the matrix
127+
# are passed to the `setup-environment.sh` script encoded in JSON,
128+
# which then uses log commands to actually set them.
129+
EXTRA_VARIABLES: ${{ toJson(matrix.env) }}
130+
96131
- name: ensure the channel matches the target branch
97132
run: src/ci/scripts/verify-channel.sh
133+
98134
- name: collect CPU statistics
99135
run: src/ci/scripts/collect-cpu-stats.sh
136+
100137
- name: show the current environment
101138
run: src/ci/scripts/dump-environment.sh
139+
102140
- name: install awscli
103141
run: src/ci/scripts/install-awscli.sh
142+
104143
- name: install sccache
105144
run: src/ci/scripts/install-sccache.sh
145+
106146
- name: select Xcode
107147
run: src/ci/scripts/select-xcode.sh
148+
108149
- name: install clang
109150
run: src/ci/scripts/install-clang.sh
151+
110152
- name: install tidy
111153
run: src/ci/scripts/install-tidy.sh
154+
112155
- name: install WIX
113156
run: src/ci/scripts/install-wix.sh
157+
114158
- name: disable git crlf conversion
115159
run: src/ci/scripts/disable-git-crlf-conversion.sh
160+
116161
- name: checkout submodules
117162
run: src/ci/scripts/checkout-submodules.sh
163+
118164
- name: install MSYS2
119165
run: src/ci/scripts/install-msys2.sh
166+
120167
- name: install MinGW
121168
run: src/ci/scripts/install-mingw.sh
169+
122170
- name: install ninja
123171
run: src/ci/scripts/install-ninja.sh
172+
124173
- name: enable ipv6 on Docker
125174
run: src/ci/scripts/enable-docker-ipv6.sh
175+
176+
# Disable automatic line ending conversion (again). On Windows, when we're
177+
# installing dependencies, something switches the git configuration directory or
178+
# re-enables autocrlf. We've not tracked down the exact cause -- and there may
179+
# be multiple -- but this should ensure submodules are checked out with the
180+
# appropriate line endings.
126181
- name: disable git crlf conversion
127182
run: src/ci/scripts/disable-git-crlf-conversion.sh
183+
128184
- name: ensure line endings are correct
129185
run: src/ci/scripts/verify-line-endings.sh
186+
130187
- name: ensure backported commits are in upstream branches
131188
run: src/ci/scripts/verify-backported-commits.sh
189+
132190
- name: ensure the stable version number is correct
133191
run: src/ci/scripts/verify-stable-version-number.sh
192+
134193
- name: run the build
194+
# Redirect stderr to stdout to avoid reordering the two streams in the GHA logs.
135195
run: src/ci/scripts/run-build-from-ci.sh 2>&1
136196
env:
137-
AWS_ACCESS_KEY_ID: "${{ env.CACHES_AWS_ACCESS_KEY_ID }}"
138-
AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}"
139-
TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
197+
AWS_ACCESS_KEY_ID: ${{ env.CACHES_AWS_ACCESS_KEY_ID }}
198+
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}
199+
TOOLSTATE_REPO_ACCESS_TOKEN: ${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}
200+
140201
- name: create github artifacts
141202
run: src/ci/scripts/create-doc-artifacts.sh
203+
142204
- name: upload artifacts to github
143205
uses: actions/upload-artifact@v4
144206
with:
145-
name: "${{ env.DOC_ARTIFACT_NAME }}"
207+
# name is set in previous step
208+
name: ${{ env.DOC_ARTIFACT_NAME }}
146209
path: obj/artifacts/doc
147210
if-no-files-found: ignore
148211
retention-days: 5
212+
149213
- name: upload artifacts to S3
150214
run: src/ci/scripts/upload-artifacts.sh
151215
env:
152-
AWS_ACCESS_KEY_ID: "${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}"
153-
AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}"
154-
if: "success() && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')"
155-
try-success:
156-
needs:
157-
- job
158-
if: "success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
159-
steps:
160-
- name: mark the job as a success
161-
run: exit 0
162-
shell: bash
163-
name: bors build finished
164-
runs-on: ubuntu-latest
165-
try-failure:
166-
needs:
167-
- job
168-
if: "!success() && github.event_name == 'push' && (github.ref == 'refs/heads/try' || github.ref == 'refs/heads/try-perf') && github.repository == 'rust-lang-ci/rust'"
169-
steps:
170-
- name: mark the job as a failure
171-
run: exit 1
172-
shell: bash
216+
AWS_ACCESS_KEY_ID: ${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}
217+
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}
218+
# Adding a condition on DEPLOY=1 or DEPLOY_ALT=1 is not needed as all deploy
219+
# builders *should* have the AWS credentials available. Still, explicitly
220+
# adding the condition is helpful as this way CI will not silently skip
221+
# deploying artifacts from a dist builder if the variables are misconfigured,
222+
# erroring about invalid credentials instead.
223+
if: github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1'
224+
225+
# This job isused to tell bors the final status of the build, as there is no practical way to detect
226+
# when a workflow is successful listening to webhooks only in our current bors implementation (homu).
227+
outcome:
173228
name: bors build finished
174229
runs-on: ubuntu-latest
175-
auto-success:
176-
needs:
177-
- job
178-
if: "success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
230+
needs: [ calculate_matrix, job ]
231+
# !cancelled() executes the job regardless of whether the previous jobs passed or failed
232+
if: ${{ !cancelled() && contains(fromJSON('["auto", "try"]'), needs.calculate_matrix.outputs.run_type) }}
179233
steps:
180234
- name: checkout the source code
181235
uses: actions/checkout@v4
182236
with:
183237
fetch-depth: 2
238+
# Calculate the exit status of the whole CI workflow.
239+
# If all dependent jobs were successful, this exits with 0 (and the outcome job continues successfully).
240+
# If a some dependent job has failed, this exits with 1.
241+
- name: calculate the correct exit status
242+
run: jq --exit-status 'all(.result == "success" or .result == "skipped")' <<< '${{ toJson(needs) }}'
243+
# Publish the toolstate if an auto build succeeds (just before push to master)
184244
- name: publish toolstate
185245
run: src/ci/publish_toolstate.sh
186246
shell: bash
247+
if: needs.calculate_matrix.outputs.run_type == 'auto'
187248
env:
188-
TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
189-
name: bors build finished
190-
runs-on: ubuntu-latest
191-
auto-failure:
192-
needs:
193-
- job
194-
if: "!success() && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
195-
steps:
196-
- name: mark the job as a failure
197-
run: exit 1
198-
shell: bash
199-
name: bors build finished
200-
runs-on: ubuntu-latest
249+
TOOLSTATE_REPO_ACCESS_TOKEN: ${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}

‎Cargo.lock

-34
Original file line numberDiff line numberDiff line change
@@ -1254,14 +1254,6 @@ dependencies = [
12541254
"mdbook",
12551255
]
12561256

1257-
[[package]]
1258-
name = "expand-yaml-anchors"
1259-
version = "0.1.0"
1260-
dependencies = [
1261-
"yaml-merge-keys",
1262-
"yaml-rust",
1263-
]
1264-
12651257
[[package]]
12661258
name = "expect-test"
12671259
version = "1.5.0"
@@ -2234,12 +2226,6 @@ dependencies = [
22342226
"regex",
22352227
]
22362228

2237-
[[package]]
2238-
name = "linked-hash-map"
2239-
version = "0.5.6"
2240-
source = "registry+https://github.com/rust-lang/crates.io-index"
2241-
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
2242-
22432229
[[package]]
22442230
name = "lint-docs"
22452231
version = "0.1.0"
@@ -6540,26 +6526,6 @@ dependencies = [
65406526
"lzma-sys",
65416527
]
65426528

6543-
[[package]]
6544-
name = "yaml-merge-keys"
6545-
version = "0.4.1"
6546-
source = "registry+https://github.com/rust-lang/crates.io-index"
6547-
checksum = "fd236a7dc9bb598f349fe4a8754f49181fee50284daa15cd1ba652d722280004"
6548-
dependencies = [
6549-
"lazy_static",
6550-
"thiserror",
6551-
"yaml-rust",
6552-
]
6553-
6554-
[[package]]
6555-
name = "yaml-rust"
6556-
version = "0.4.5"
6557-
source = "registry+https://github.com/rust-lang/crates.io-index"
6558-
checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
6559-
dependencies = [
6560-
"linked-hash-map",
6561-
]
6562-
65636529
[[package]]
65646530
name = "yansi-term"
65656531
version = "0.1.2"

‎Cargo.toml

-1
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ members = [
3131
"src/tools/miri/cargo-miri",
3232
"src/tools/rustdoc-themes",
3333
"src/tools/unicode-table-generator",
34-
"src/tools/expand-yaml-anchors",
3534
"src/tools/jsondocck",
3635
"src/tools/jsondoclint",
3736
"src/tools/llvm-bitcode-linker",

0 commit comments

Comments
 (0)
Please sign in to comment.