forked from rust-lang/rustup
-
Notifications
You must be signed in to change notification settings - Fork 0
170 lines (167 loc) · 6.39 KB
/
linux-builds-on-master.yaml
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
# This is ci/actions-templates/linux-builds-template.yaml
# Do not edit this file in .github/workflows
name: Linux (master) # skip-pr skip-stable
on:
push: # skip-pr
branches: # skip-pr
- master # skip-pr skip-stable
schedule: # skip-pr skip-stable
- cron: "30 0 * * 1" # Every Monday at half past midnight UTC skip-pr skip-stable
jobs:
build:
name: Build
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
target:
- x86_64-unknown-linux-gnu
- armv7-unknown-linux-gnueabihf
- aarch64-linux-android
- aarch64-unknown-linux-gnu # skip-pr
- powerpc64-unknown-linux-gnu # skip-pr
- x86_64-unknown-linux-musl # skip-pr
include:
- target: x86_64-unknown-linux-gnu
run_tests: YES
snap_arch: amd64
- target: aarch64-unknown-linux-gnu # skip-pr
snap_arch: arm64 # skip-pr
- target: armv7-unknown-linux-gnueabihf
snap_arch: armhf
steps:
- uses: actions/checkout@v2
with:
# v2 defaults to a shallow checkout, but we need at least to the previous tag
fetch-depth: 0
- name: Acquire tags for the repo
run: |
git fetch --no-tags --prune --depth=1 origin +refs/tags/*:refs/tags/*
- name: Display the current git status
run: |
git status
git describe
- name: Prep cargo dirs
run: |
mkdir -p ~/.cargo/{registry,git}
- name: Set environment variables appropriately for the build
run: |
echo "$HOME/.cargo/bin" >> $GITHUB_PATH
echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV
- name: Skip tests
run: |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV
if: matrix.run_tests == ''
- name: Cache cargo registry and git trees
uses: actions/cache@v2
with:
path: |
~/.cargo/registry
~/.cargo/git
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- name: Get rustc commit hash
id: cargo-target-cache
run: |
echo "::set-output name=rust_hash::$(rustc -Vv | grep commit-hash | awk '{print $2}')"
shell: bash
- name: Cache cargo build
uses: actions/cache@v2
with:
path: target
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }}
- name: Install Rustup using ./rustup-init.sh
run: |
sh ./rustup-init.sh --default-toolchain=none --profile=minimal -y
- name: Ensure Stable is up to date
run: |
if rustc +stable -vV >/dev/null 2>/dev/null; then
rustup toolchain uninstall stable
fi
rustup toolchain install --profile=minimal stable
- name: Ensure we have our goal target installed
run: |
rustup target install "$TARGET"
- name: Determine which docker we need to run in
run: |
case "$TARGET" in
*-linux-android*) DOCKER=android ;; # Android uses a local docker image
*) DOCKER="$TARGET" ;;
esac
echo "DOCKER=$DOCKER" >> $GITHUB_ENV
- name: Fetch the docker
run: bash ci/fetch-rust-docker.bash "${TARGET}"
- name: Maybe build a docker from there
run: |
if [ -f "ci/docker/$DOCKER/Dockerfile" ]; then
docker build -t "$DOCKER" -f "ci/docker/${DOCKER}/Dockerfile" .
fi
- name: Run the build within the docker image
run: |
mkdir -p "${PWD}/target"
chown -R "$(id -u)":"$(id -g)" "${PWD}/target"
docker run \
--entrypoint sh \
--user "$(id -u)":"$(id -g)" \
--volume "$(rustc --print sysroot)":/rustc-sysroot:ro \
--volume "${PWD}":/checkout:ro \
--volume "${PWD}"/target:/checkout/target \
--workdir /checkout \
--env TARGET="${TARGET}" \
--env SKIP_TESTS="${SKIP_TESTS}" \
--volume "${HOME}/.cargo:/cargo" \
--env CARGO_HOME=/cargo \
--env CARGO_TARGET_DIR=/checkout/target \
--env LIBZ_SYS_STATIC=1 \
--tty \
--init \
--rm \
"${DOCKER}" \
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash'
- name: Upload the built artifact
uses: actions/upload-artifact@v2
with:
name: rustup-init-${{ matrix.target }}
path: |
target/${{ matrix.target }}/release/rustup-init
retention-days: 7
- name: Acquire the AWS tooling
run: |
pip3 install -U setuptools
pip3 install awscli
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
- name: Prepare the dist
run: |
bash ci/prepare-deploy.bash
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
- name: Deploy build to dev-static dist tree for release team
run: |
aws s3 cp --recursive deploy/ s3://dev-static-rust-lang-org/rustup/
env:
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_DEFAULT_REGION: us-west-1
if: github.event_name == 'push' && github.ref == 'refs/heads/stable'
- name: Build a snapcraft configuration file
run: |
bash ci/snapcraft.bash
if: matrix.snap_arch != ''
env:
DO_SNAP: 1
SNAP_ARCH: ${{ matrix.snap_arch }}
SNAP_EDGE: 1 # skip-stable
- uses: snapcore/action-build@v1
id: snapcraftbuild
with:
path: snapcraft
if: matrix.snap_arch != ''
- uses: snapcore/action-publish@v1
with:
store_login: ${{ secrets.SNAPCRAFT_TOKEN }}
snap: ${{ steps.snapcraftbuild.outputs.snap }}
release: edge # skip-pr skip-stable
if: matrix.snap_arch != '' # skip-pr
- name: Clear the cargo caches
run: |
cargo install cargo-cache --no-default-features --features ci-autoclean
cargo-cache