Skip to content

Commit b3f6553

Browse files
committed
Replace dynamically generated ci.yml file with the original template
1 parent 6edacd3 commit b3f6553

File tree

2 files changed

+125
-343
lines changed

2 files changed

+125
-343
lines changed

.github/workflows/ci.yml

+125-48
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,147 +18,231 @@ 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
39+
3740
jobs:
41+
# The job matrix for `calculate_matrix` is defined in src/ci/github-actions/jobs.yml.
42+
# It calculates which jobs should be executed, based on the data of the ${{ github }} context.
43+
# If you want to modify CI jobs, take a look at src/ci/github-actions/jobs.yml.
3844
calculate_matrix:
3945
name: Calculate job matrix
4046
runs-on: ubuntu-latest
4147
outputs:
42-
jobs: "${{ steps.jobs.outputs.jobs }}"
48+
jobs: ${{ steps.jobs.outputs.jobs }}
4349
steps:
4450
- name: Checkout the source code
4551
uses: actions/checkout@v4
4652
- name: Calculate the CI job matrix
4753
run: python3 src/ci/github-actions/calculate-job-matrix.py >> $GITHUB_OUTPUT
4854
id: jobs
4955
job:
50-
name: "${{ matrix.name }}"
51-
needs:
52-
- calculate_matrix
56+
name: ${{ matrix.name }}
57+
needs: [ calculate_matrix ]
5358
runs-on: "${{ matrix.os }}"
5459
defaults:
5560
run:
56-
shell: "${{ contains(matrix.os, 'windows') && 'msys2 {0}' || 'bash' }}"
61+
shell: ${{ contains(matrix.os, 'windows') && 'msys2 {0}' || 'bash' }}
5762
timeout-minutes: 600
5863
env:
59-
CI_JOB_NAME: "${{ matrix.image }}"
64+
CI_JOB_NAME: ${{ matrix.image }}
6065
CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse
61-
HEAD_SHA: "${{ github.event.pull_request.head.sha || github.sha }}"
62-
DOCKER_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
66+
# commit of PR sha or commit sha. `GITHUB_SHA` is not accurate for PRs.
67+
HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }}
68+
DOCKER_TOKEN: ${{ secrets.GITHUB_TOKEN }}
6369
SCCACHE_BUCKET: rust-lang-ci-sccache2
64-
TOOLSTATE_REPO: "https://github.com/rust-lang-nursery/rust-toolstate"
70+
TOOLSTATE_REPO: https://github.com/rust-lang-nursery/rust-toolstate
6571
CACHE_DOMAIN: ci-caches.rust-lang.org
66-
continue-on-error: "${{ matrix.continue_on_error || false }}"
72+
continue-on-error: ${{ matrix.continue_on_error || false }}
6773
strategy:
6874
matrix:
69-
include: "${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}"
70-
if: "fromJSON(needs.calculate_matrix.outputs.jobs)[0] != null"
75+
# Check the `calculate_matrix` job to see how is the matrix defined.
76+
include: ${{ fromJSON(needs.calculate_matrix.outputs.jobs) }}
77+
# GitHub Actions fails the workflow if an empty list of jobs is provided to
78+
# the workflow, so we need to skip this job if nothing was produced by
79+
# the Python script.
80+
#
81+
# Unfortunately checking whether a list is empty is not possible in a nice
82+
# way due to GitHub Actions expressions limits.
83+
# This hack is taken from https://github.com/ferrocene/ferrocene/blob/d43edc6b7697cf1719ec1c17c54904ab94825763/.github/workflows/release.yml#L75-L82
84+
if: fromJSON(needs.calculate_matrix.outputs.jobs)[0] != null
7185
steps:
72-
- if: "contains(matrix.os, 'windows')"
86+
- if: contains(matrix.os, 'windows')
7387
uses: msys2/[email protected]
7488
with:
75-
msystem: "${{ contains(matrix.name, 'i686') && 'mingw32' || 'mingw64' }}"
89+
# i686 jobs use mingw32. x86_64 and cross-compile jobs use mingw64.
90+
msystem: ${{ contains(matrix.name, 'i686') && 'mingw32' || 'mingw64' }}
91+
# don't try to download updates for already installed packages
7692
update: false
93+
# don't try to use the msys that comes built-in to the github runner,
94+
# so we can control what is installed (i.e. not python)
7795
release: true
96+
# Inherit the full path from the Windows environment, with MSYS2's */bin/
97+
# dirs placed in front. This lets us run Windows-native Python etc.
7898
path-type: inherit
79-
install: "make dos2unix diffutils\n"
99+
install: >
100+
make
101+
dos2unix
102+
diffutils
103+
80104
- name: disable git crlf conversion
81105
run: git config --global core.autocrlf false
106+
82107
- name: checkout the source code
83108
uses: actions/checkout@v4
84109
with:
85110
fetch-depth: 2
111+
112+
# Rust Log Analyzer can't currently detect the PR number of a GitHub
113+
# Actions build on its own, so a hint in the log message is needed to
114+
# point it in the right direction.
86115
- name: configure the PR in which the error message will be posted
87-
run: "echo \"[CI_PR_NUMBER=$num]\""
116+
run: echo "[CI_PR_NUMBER=$num]"
88117
env:
89-
num: "${{ github.event.number }}"
90-
if: "success() && github.event_name == 'pull_request'"
118+
num: ${{ github.event.number }}
119+
if: success() && github.event_name == 'pull_request'
120+
91121
- name: add extra environment variables
92122
run: src/ci/scripts/setup-environment.sh
93123
env:
94-
EXTRA_VARIABLES: "${{ toJson(matrix.env) }}"
124+
# Since it's not possible to merge `${{ matrix.env }}` with the other
125+
# variables in `job.<name>.env`, the variables defined in the matrix
126+
# are passed to the `setup-environment.sh` script encoded in JSON,
127+
# which then uses log commands to actually set them.
128+
EXTRA_VARIABLES: ${{ toJson(matrix.env) }}
129+
95130
- name: ensure the channel matches the target branch
96131
run: src/ci/scripts/verify-channel.sh
132+
97133
- name: collect CPU statistics
98134
run: src/ci/scripts/collect-cpu-stats.sh
135+
99136
- name: show the current environment
100137
run: src/ci/scripts/dump-environment.sh
138+
101139
- name: install awscli
102140
run: src/ci/scripts/install-awscli.sh
141+
103142
- name: install sccache
104143
run: src/ci/scripts/install-sccache.sh
144+
105145
- name: select Xcode
106146
run: src/ci/scripts/select-xcode.sh
147+
107148
- name: install clang
108149
run: src/ci/scripts/install-clang.sh
150+
109151
- name: install tidy
110152
run: src/ci/scripts/install-tidy.sh
153+
111154
- name: install WIX
112155
run: src/ci/scripts/install-wix.sh
156+
113157
- name: disable git crlf conversion
114158
run: src/ci/scripts/disable-git-crlf-conversion.sh
159+
115160
- name: checkout submodules
116161
run: src/ci/scripts/checkout-submodules.sh
162+
117163
- name: install MSYS2
118164
run: src/ci/scripts/install-msys2.sh
165+
119166
- name: install MinGW
120167
run: src/ci/scripts/install-mingw.sh
168+
121169
- name: install ninja
122170
run: src/ci/scripts/install-ninja.sh
171+
123172
- name: enable ipv6 on Docker
124173
run: src/ci/scripts/enable-docker-ipv6.sh
174+
175+
# Disable automatic line ending conversion (again). On Windows, when we're
176+
# installing dependencies, something switches the git configuration directory or
177+
# re-enables autocrlf. We've not tracked down the exact cause -- and there may
178+
# be multiple -- but this should ensure submodules are checked out with the
179+
# appropriate line endings.
125180
- name: disable git crlf conversion
126181
run: src/ci/scripts/disable-git-crlf-conversion.sh
182+
127183
- name: ensure line endings are correct
128184
run: src/ci/scripts/verify-line-endings.sh
185+
129186
- name: ensure backported commits are in upstream branches
130187
run: src/ci/scripts/verify-backported-commits.sh
188+
131189
- name: ensure the stable version number is correct
132190
run: src/ci/scripts/verify-stable-version-number.sh
191+
133192
- name: run the build
193+
# Redirect stderr to stdout to avoid reordering the two streams in the GHA logs.
134194
run: src/ci/scripts/run-build-from-ci.sh 2>&1
135195
env:
136-
AWS_ACCESS_KEY_ID: "${{ env.CACHES_AWS_ACCESS_KEY_ID }}"
137-
AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}"
138-
TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
196+
AWS_ACCESS_KEY_ID: ${{ env.CACHES_AWS_ACCESS_KEY_ID }}
197+
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.CACHES_AWS_ACCESS_KEY_ID)] }}
198+
TOOLSTATE_REPO_ACCESS_TOKEN: ${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}
199+
139200
- name: create github artifacts
140201
run: src/ci/scripts/create-doc-artifacts.sh
202+
141203
- name: upload artifacts to github
142204
uses: actions/upload-artifact@v4
143205
with:
144-
name: "${{ env.DOC_ARTIFACT_NAME }}"
206+
# name is set in previous step
207+
name: ${{ env.DOC_ARTIFACT_NAME }}
145208
path: obj/artifacts/doc
146209
if-no-files-found: ignore
147210
retention-days: 5
211+
148212
- name: upload artifacts to S3
149213
run: src/ci/scripts/upload-artifacts.sh
150214
env:
151-
AWS_ACCESS_KEY_ID: "${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}"
152-
AWS_SECRET_ACCESS_KEY: "${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}"
153-
if: "success() && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')"
215+
AWS_ACCESS_KEY_ID: ${{ env.ARTIFACTS_AWS_ACCESS_KEY_ID }}
216+
AWS_SECRET_ACCESS_KEY: ${{ secrets[format('AWS_SECRET_ACCESS_KEY_{0}', env.ARTIFACTS_AWS_ACCESS_KEY_ID)] }}
217+
# Adding a condition on DEPLOY=1 or DEPLOY_ALT=1 is not needed as all deploy
218+
# builders *should* have the AWS credentials available. Still, explicitly
219+
# adding the condition is helpful as this way CI will not silently skip
220+
# deploying artifacts from a dist builder if the variables are misconfigured,
221+
# erroring about invalid credentials instead.
222+
if: success() && (github.event_name == 'push' || env.DEPLOY == '1' || env.DEPLOY_ALT == '1')
223+
224+
# This job isused to tell bors the final status of the build, as there is no practical way to detect
225+
# when a workflow is successful listening to webhooks only in our current bors implementation (homu).
154226
outcome:
155227
name: bors build finished
156228
runs-on: ubuntu-latest
157-
needs:
158-
- job
229+
needs: [ job ]
230+
# !cancelled() executes the job regardless of whether the previous jobs passed or failed
159231
if: "!cancelled() && github.event_name == 'push'"
160232
steps:
233+
# Calculate the exit status of the whole CI workflow (0 if all dependent jobs were either successful
234+
# or skipped, otherwise 1).
161235
- name: calculate the correct exit status
162236
id: status
163-
run: "jq --exit-status 'all(.result == \"success\" or .result == \"skipped\")' <<< '${{ toJson(needs) }}'\necho \"status=$?\" >> $GITHUB_OUTPUT\n"
237+
run: |
238+
jq --exit-status 'all(.result == "success" or .result == "skipped")' <<< '${{ toJson(needs) }}'
239+
echo "status=$?" >> $GITHUB_OUTPUT
240+
# Publish the toolstate if an auto build succeeds (just before push to master)
164241
- name: publish toolstate
165242
run: src/ci/publish_toolstate.sh
166243
shell: bash
167-
if: "steps.outputs.status == 0 && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'"
244+
if: steps.outputs.status == 0 && github.event_name == 'push' && github.ref == 'refs/heads/auto' && github.repository == 'rust-lang-ci/rust'
168245
env:
169-
TOOLSTATE_REPO_ACCESS_TOKEN: "${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}"
246+
TOOLSTATE_REPO_ACCESS_TOKEN: ${{ secrets.TOOLSTATE_REPO_ACCESS_TOKEN }}
170247
- name: set the correct exit status
171-
run: "exit ${{ steps.outputs.status == 0 }}"
248+
run: exit ${{ steps.outputs.status == 0 }}

0 commit comments

Comments
 (0)