Note that selecting VS lang packs is optional #1607
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# GitHub Actions workflow generated by ci/actions-templates/gen-workflows.sh | |
# Do not edit this file in .github/workflows | |
name: CI | |
on: | |
merge_group: | |
pull_request: | |
branches: | |
- "*" | |
push: | |
branches: | |
- master | |
- stable | |
schedule: | |
- cron: "30 0 * * 1" # Every Monday at half past midnight UTC | |
jobs: | |
# This is ci/actions-templates/windows-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-windows-pr: # job-name skip-master skip-stable | |
runs-on: windows-latest | |
if: ${{ contains('["pull_request", "merge_group"]', github.event_name) }} # skip-master skip-stable | |
env: | |
RUSTFLAGS: -Ctarget-feature=+crt-static | |
RUST_MIN_STACK: 16777216 | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-pc-windows-msvc | |
- aarch64-pc-windows-msvc | |
- x86_64-pc-windows-gnu | |
include: | |
- target: x86_64-pc-windows-msvc | |
run_tests: YES | |
- target: x86_64-pc-windows-gnu | |
arch: x86_64 | |
mingwdir: mingw64 | |
gcc: x86_64-w64-mingw32-gcc | |
steps: | |
- uses: actions/checkout@v4 | |
# v2 defaults to a shallow checkout, but we need at least to the previous tag | |
with: | |
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: | | |
New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force | |
New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force | |
shell: powershell | |
- name: Install NASM | |
# Building `aws-lc-rs` for Windows MSVC depends on `NASM`. | |
# See: https://aws.github.io/aws-lc-rs/requirements/windows.html | |
uses: ilammy/setup-nasm@v1 | |
if: matrix.mingwdir == '' | |
- name: Install mingw | |
uses: bwoodsend/setup-winlibs-action@v1 | |
if: matrix.mingwdir != '' | |
with: | |
architecture: ${{ matrix.arch }} | |
- name: Verify mingw gcc installation | |
shell: powershell | |
if: matrix.mingwdir != '' | |
run: | | |
Get-Command ${{ matrix.gcc }} | |
${{ matrix.gcc }} --version | |
- name: Set PATH | |
run: | | |
echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 | |
echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 | |
- name: Skip tests | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
shell: bash | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install Rustup using win.rustup.rs | |
run: | | |
# Disable the download progress bar which can cause perf issues | |
$ProgressPreference = "SilentlyContinue" | |
Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe | |
.\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal | |
del rustup-init.exe | |
shell: powershell | |
- name: Ensure stable toolchain is up to date | |
run: rustup update stable | |
shell: bash | |
- name: Install the target | |
run: | | |
rustup target install ${{ matrix.target }} | |
- name: Run a full build | |
env: | |
TARGET: ${{ matrix.target }} | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: bash ci/run.bash | |
- name: Run cargo check | |
if: matrix.mode != 'release' | |
env: | |
TARGET: ${{ matrix.target }} | |
# os-specific code leads to lints escaping if we only run this in one target | |
run: | | |
cargo check --all --all-targets --features test | |
git ls-files -- '*.rs' | xargs touch | |
- name: Run cargo clippy | |
if: matrix.mode != 'release' && matrix.mingwdir == '' | |
env: | |
TARGET: ${{ matrix.target }} | |
run: | | |
cargo clippy --all-targets --all-features -- -D warnings | |
- name: Upload the built artifact | |
if: matrix.mode == 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init.exe | |
retention-days: 7 | |
- name: Acquire the AWS tooling | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
choco upgrade awscli | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
.\ci\prepare-deploy.ps1 | |
shell: powershell | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://rustup-builds/${{ github.sha }}/dist | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/windows-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-windows-master: # job-name skip-pr skip-stable | |
runs-on: windows-latest | |
if: ${{ (github.event_name == 'push' && github.ref_name == 'master') || github.event_name == 'schedule' }} # skip-pr skip-stable | |
env: | |
RUSTFLAGS: -Ctarget-feature=+crt-static | |
RUST_MIN_STACK: 16777216 | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-pc-windows-msvc | |
- aarch64-pc-windows-msvc | |
- x86_64-pc-windows-gnu | |
include: | |
- target: x86_64-pc-windows-msvc | |
run_tests: YES | |
- target: x86_64-pc-windows-gnu | |
arch: x86_64 | |
mingwdir: mingw64 | |
gcc: x86_64-w64-mingw32-gcc | |
steps: | |
- uses: actions/checkout@v4 | |
# v2 defaults to a shallow checkout, but we need at least to the previous tag | |
with: | |
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: | | |
New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force | |
New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force | |
shell: powershell | |
- name: Install NASM | |
# Building `aws-lc-rs` for Windows MSVC depends on `NASM`. | |
# See: https://aws.github.io/aws-lc-rs/requirements/windows.html | |
uses: ilammy/setup-nasm@v1 | |
if: matrix.mingwdir == '' | |
- name: Install mingw | |
uses: bwoodsend/setup-winlibs-action@v1 | |
if: matrix.mingwdir != '' | |
with: | |
architecture: ${{ matrix.arch }} | |
- name: Verify mingw gcc installation | |
shell: powershell | |
if: matrix.mingwdir != '' | |
run: | | |
Get-Command ${{ matrix.gcc }} | |
${{ matrix.gcc }} --version | |
- name: Set PATH | |
run: | | |
echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 | |
echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 | |
- name: Skip tests | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
shell: bash | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install Rustup using win.rustup.rs | |
run: | | |
# Disable the download progress bar which can cause perf issues | |
$ProgressPreference = "SilentlyContinue" | |
Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe | |
.\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal | |
del rustup-init.exe | |
shell: powershell | |
- name: Ensure stable toolchain is up to date | |
run: rustup update stable | |
shell: bash | |
- name: Install the target | |
run: | | |
rustup target install ${{ matrix.target }} | |
- name: Run a full build | |
env: | |
TARGET: ${{ matrix.target }} | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: bash ci/run.bash | |
- name: Run cargo check | |
if: matrix.mode != 'release' | |
env: | |
TARGET: ${{ matrix.target }} | |
# os-specific code leads to lints escaping if we only run this in one target | |
run: | | |
cargo check --all --all-targets --features test | |
git ls-files -- '*.rs' | xargs touch | |
- name: Run cargo clippy | |
if: matrix.mode != 'release' && matrix.mingwdir == '' | |
env: | |
TARGET: ${{ matrix.target }} | |
run: | | |
cargo clippy --all-targets --all-features -- -D warnings | |
- name: Upload the built artifact | |
if: matrix.mode == 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init.exe | |
retention-days: 7 | |
- name: Acquire the AWS tooling | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
choco upgrade awscli | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
.\ci\prepare-deploy.ps1 | |
shell: powershell | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://rustup-builds/${{ github.sha }}/dist | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/windows-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-windows-stable: # job-name skip-master skip-pr | |
runs-on: windows-latest | |
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' }} # skip-pr skip-master | |
env: | |
RUSTFLAGS: -Ctarget-feature=+crt-static | |
RUST_MIN_STACK: 16777216 | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-pc-windows-msvc | |
- i686-pc-windows-msvc # skip-pr skip-master | |
- aarch64-pc-windows-msvc | |
- x86_64-pc-windows-gnu | |
- i686-pc-windows-gnu # skip-pr skip-master | |
include: | |
- target: x86_64-pc-windows-msvc | |
run_tests: YES | |
- target: x86_64-pc-windows-gnu | |
arch: x86_64 | |
mingwdir: mingw64 | |
gcc: x86_64-w64-mingw32-gcc | |
- target: i686-pc-windows-gnu # skip-pr skip-master | |
arch: i686 # skip-pr skip-master | |
mingwdir: mingw32 # skip-pr skip-master | |
gcc: i686-w64-mingw32-gcc # skip-pr skip-master | |
steps: | |
- uses: actions/checkout@v4 | |
# v2 defaults to a shallow checkout, but we need at least to the previous tag | |
with: | |
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: | | |
New-Item "${env:USERPROFILE}\.cargo\registry" -ItemType Directory -Force | |
New-Item "${env:USERPROFILE}\.cargo\git" -ItemType Directory -Force | |
shell: powershell | |
- name: Install NASM | |
# Building `aws-lc-rs` for Windows MSVC depends on `NASM`. | |
# See: https://aws.github.io/aws-lc-rs/requirements/windows.html | |
uses: ilammy/setup-nasm@v1 | |
if: matrix.mingwdir == '' | |
- name: Install mingw | |
uses: bwoodsend/setup-winlibs-action@v1 | |
if: matrix.mingwdir != '' | |
with: | |
architecture: ${{ matrix.arch }} | |
- name: Verify mingw gcc installation | |
shell: powershell | |
if: matrix.mingwdir != '' | |
run: | | |
Get-Command ${{ matrix.gcc }} | |
${{ matrix.gcc }} --version | |
- name: Set PATH | |
run: | | |
echo "%USERPROFILE%\.cargo\bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8 | |
echo "TARGET=${{ matrix.target }}" | Out-File -Append -FilePath $env:GITHUB_ENV -Encoding utf8 | |
- name: Skip tests | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
shell: bash | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
- name: Install Rustup using win.rustup.rs | |
run: | | |
# Disable the download progress bar which can cause perf issues | |
$ProgressPreference = "SilentlyContinue" | |
Invoke-WebRequest https://win.rustup.rs/ -OutFile rustup-init.exe | |
.\rustup-init.exe -y --default-host=x86_64-pc-windows-msvc --profile=minimal | |
del rustup-init.exe | |
shell: powershell | |
- name: Ensure stable toolchain is up to date | |
run: rustup update stable | |
shell: bash | |
- name: Install the target | |
run: | | |
rustup target install ${{ matrix.target }} | |
- name: Run a full build | |
env: | |
TARGET: ${{ matrix.target }} | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: bash ci/run.bash | |
- name: Run cargo check | |
if: matrix.mode != 'release' | |
env: | |
TARGET: ${{ matrix.target }} | |
# os-specific code leads to lints escaping if we only run this in one target | |
run: | | |
cargo check --all --all-targets --features test | |
git ls-files -- '*.rs' | xargs touch | |
- name: Run cargo clippy | |
if: matrix.mode != 'release' && matrix.mingwdir == '' | |
env: | |
TARGET: ${{ matrix.target }} | |
run: | | |
cargo clippy --all-targets --all-features -- -D warnings | |
- name: Upload the built artifact | |
if: matrix.mode == 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init.exe | |
retention-days: 7 | |
- name: Acquire the AWS tooling | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
choco upgrade awscli | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
.\ci\prepare-deploy.ps1 | |
shell: powershell | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://dev-static-rust-lang-org/rustup/dist | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive dist s3://rustup-builds/${{ github.sha }}/dist | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/linux-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-linux-pr: # job-name skip-master skip-stable | |
runs-on: ubuntu-latest | |
if: ${{ contains('["pull_request", "merge_group"]', github.event_name) }} # skip-master skip-stable | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-unknown-linux-gnu | |
- armv7-unknown-linux-gnueabihf | |
- aarch64-linux-android | |
include: | |
- target: x86_64-unknown-linux-gnu | |
run_tests: YES | |
#snap_arch: amd64 | |
- target: armv7-unknown-linux-gnueabihf | |
#snap_arch: armhf | |
steps: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
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 | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-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 base docker images from rust-lang/rust | |
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 | |
env: | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: | | |
mkdir -p "${PWD}/target" | |
chown -R "$(id -u)":"$(id -g)" "${PWD}/target" | |
docker run \ | |
--entrypoint sh \ | |
--env BUILD_PROFILE="${BUILD_PROFILE}" \ | |
--env CARGO_HOME=/cargo \ | |
--env CARGO_TARGET_DIR=/checkout/target \ | |
--env LIBZ_SYS_STATIC=1 \ | |
--env SKIP_TESTS="${SKIP_TESTS}" \ | |
--env TARGET="${TARGET}" \ | |
--init \ | |
--rm \ | |
--tty \ | |
--user "$(id -u)":"$(id -g)" \ | |
--volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ | |
--volume "${HOME}/.cargo:/cargo" \ | |
--volume "${PWD}":/checkout:ro \ | |
--volume "${PWD}"/target:/checkout/target \ | |
--workdir /checkout \ | |
"${DOCKER}" \ | |
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' | |
- name: Upload the built artifact | |
uses: actions/upload-artifact@v4 | |
if: matrix.mode == 'release' | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init | |
retention-days: 7 | |
- name: Ensure that awscli is installed | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
which aws | |
aws --version | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
bash ci/prepare-deploy.bash | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive deploy/ s3://rustup-builds/${{ github.sha }} | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/linux-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-linux-master: # job-name skip-pr skip-stable | |
runs-on: ubuntu-latest | |
if: ${{ (github.event_name == 'push' && github.ref_name == 'master') || github.event_name == 'schedule' }} # skip-pr skip-stable | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
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: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
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 | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-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 base docker images from rust-lang/rust | |
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 | |
env: | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: | | |
mkdir -p "${PWD}/target" | |
chown -R "$(id -u)":"$(id -g)" "${PWD}/target" | |
docker run \ | |
--entrypoint sh \ | |
--env BUILD_PROFILE="${BUILD_PROFILE}" \ | |
--env CARGO_HOME=/cargo \ | |
--env CARGO_TARGET_DIR=/checkout/target \ | |
--env LIBZ_SYS_STATIC=1 \ | |
--env SKIP_TESTS="${SKIP_TESTS}" \ | |
--env TARGET="${TARGET}" \ | |
--init \ | |
--rm \ | |
--tty \ | |
--user "$(id -u)":"$(id -g)" \ | |
--volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ | |
--volume "${HOME}/.cargo:/cargo" \ | |
--volume "${PWD}":/checkout:ro \ | |
--volume "${PWD}"/target:/checkout/target \ | |
--workdir /checkout \ | |
"${DOCKER}" \ | |
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' | |
- name: Upload the built artifact | |
uses: actions/upload-artifact@v4 | |
if: matrix.mode == 'release' | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init | |
retention-days: 7 | |
- name: Ensure that awscli is installed | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
which aws | |
aws --version | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
bash ci/prepare-deploy.bash | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive deploy/ s3://rustup-builds/${{ github.sha }} | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/linux-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-linux-stable: # job-name skip-master skip-pr | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' }} # skip-pr skip-master | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
fail-fast: false | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-unknown-linux-gnu | |
- armv7-unknown-linux-gnueabihf | |
- aarch64-linux-android | |
- aarch64-unknown-linux-gnu # skip-pr | |
- aarch64-unknown-linux-musl # skip-pr skip-master | |
- powerpc64-unknown-linux-gnu # skip-pr | |
- x86_64-unknown-linux-musl # skip-pr | |
- i686-unknown-linux-gnu # skip-pr skip-master | |
- arm-unknown-linux-gnueabi # skip-pr skip-master | |
- arm-unknown-linux-gnueabihf # skip-pr skip-master | |
- x86_64-unknown-freebsd # skip-pr skip-master | |
- x86_64-unknown-netbsd # skip-pr skip-master | |
- x86_64-unknown-illumos # skip-pr skip-master | |
- powerpc-unknown-linux-gnu # skip-pr skip-master | |
- powerpc64le-unknown-linux-gnu # skip-pr skip-master | |
- s390x-unknown-linux-gnu # skip-pr skip-master | |
- arm-linux-androideabi # skip-pr skip-master | |
- armv7-linux-androideabi # skip-pr skip-master | |
- x86_64-linux-android # skip-pr skip-master | |
- riscv64gc-unknown-linux-gnu # skip-pr skip-master | |
- loongarch64-unknown-linux-gnu # skip-pr skip-master | |
include: | |
- target: x86_64-unknown-linux-gnu | |
run_tests: YES | |
#snap_arch: amd64 | |
- target: i686-unknown-linux-gnu # skip-pr skip-master | |
#snap_arch: i386 # skip-pr skip-master | |
- target: aarch64-unknown-linux-gnu # skip-pr | |
#snap_arch: arm64 # skip-pr | |
- target: armv7-unknown-linux-gnueabihf | |
#snap_arch: armhf | |
- target: powerpc64le-unknown-linux-gnu # skip-pr skip-master | |
#snap_arch: ppc64el # skip-pr skip-master | |
- target: s390x-unknown-linux-gnu # skip-pr skip-master | |
#snap_arch: s390x # skip-pr skip-master | |
steps: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
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 | |
if: matrix.run_tests == '' || matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-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 base docker images from rust-lang/rust | |
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 | |
env: | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: | | |
mkdir -p "${PWD}/target" | |
chown -R "$(id -u)":"$(id -g)" "${PWD}/target" | |
docker run \ | |
--entrypoint sh \ | |
--env BUILD_PROFILE="${BUILD_PROFILE}" \ | |
--env CARGO_HOME=/cargo \ | |
--env CARGO_TARGET_DIR=/checkout/target \ | |
--env LIBZ_SYS_STATIC=1 \ | |
--env SKIP_TESTS="${SKIP_TESTS}" \ | |
--env TARGET="${TARGET}" \ | |
--init \ | |
--rm \ | |
--tty \ | |
--user "$(id -u)":"$(id -g)" \ | |
--volume "$(rustc --print sysroot)":/rustc-sysroot:ro \ | |
--volume "${HOME}/.cargo:/cargo" \ | |
--volume "${PWD}":/checkout:ro \ | |
--volume "${PWD}"/target:/checkout/target \ | |
--workdir /checkout \ | |
"${DOCKER}" \ | |
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash' | |
- name: Upload the built artifact | |
uses: actions/upload-artifact@v4 | |
if: matrix.mode == 'release' | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init | |
retention-days: 7 | |
- name: Ensure that awscli is installed | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
which aws | |
aws --version | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
bash ci/prepare-deploy.bash | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive deploy/ s3://rustup-builds/${{ github.sha }} | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
# This is ci/actions-templates/macos-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-macos-x86_64: # job-name skip-aarch64 | |
runs-on: macos-13 # skip-aarch64 | |
env: # skip-aarch64 | |
MACOSX_DEPLOYMENT_TARGET: 10.12 # skip-aarch64 | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- x86_64-apple-darwin # skip-aarch64 | |
steps: | |
- uses: actions/checkout@v4 | |
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 | |
echo "SKIP_TESTS=" >> $GITHUB_ENV | |
echo "LZMA_API_STATIC=1" >> $GITHUB_ENV | |
- name: Skip tests | |
if: matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-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: Run a full build and test | |
env: | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: bash ci/run.bash | |
- name: Dump dynamic link targets | |
if: matrix.mode == 'release' | |
run: | | |
otool -L target/${TARGET}/release/rustup-init | |
if otool -L target/${TARGET}/release/rustup-init | grep -q -F /usr/local/; then | |
echo >&2 "Unfortunately there are /usr/local things in the link. Fail." | |
exit 1 | |
fi | |
- name: Upload the built artifact | |
if: matrix.mode == 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init | |
retention-days: 7 | |
- name: Ensure that awscli is installed | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
brew install --overwrite awscli | |
which aws | |
aws --version | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
bash ci/prepare-deploy.bash | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive deploy/ s3://rustup-builds/${{ github.sha }} | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
- name: Flush cache | |
# This is a workaround for a bug with GitHub Actions Cache that causes | |
# corrupt cache entries (particularly in the target directory). See | |
# https://github.com/actions/cache/issues/403 and | |
# https://github.com/rust-lang/cargo/issues/8603. | |
run: sudo /usr/sbin/purge | |
# This is ci/actions-templates/macos-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-macos-aarch64: # job-name skip-x86_64 | |
runs-on: macos-latest # skip-x86_64 | |
env: # skip-x86_64 | |
MACOSX_DEPLOYMENT_TARGET: 11.0 # skip-x86_64 | |
permissions: | |
id-token: write | |
contents: read | |
strategy: | |
matrix: | |
mode: | |
- dev | |
- release | |
target: | |
- aarch64-apple-darwin # skip-x86_64 | |
steps: | |
- uses: actions/checkout@v4 | |
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 | |
echo "SKIP_TESTS=" >> $GITHUB_ENV | |
echo "LZMA_API_STATIC=1" >> $GITHUB_ENV | |
- name: Skip tests | |
if: matrix.mode == 'release' | |
run: | | |
echo "SKIP_TESTS=yes" >> $GITHUB_ENV | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ matrix.target }}-${{ matrix.mode }}-cargo-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ matrix.target }}-${{ matrix.mode }}-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: Run a full build and test | |
env: | |
BUILD_PROFILE: ${{ matrix.mode }} | |
run: bash ci/run.bash | |
- name: Dump dynamic link targets | |
if: matrix.mode == 'release' | |
run: | | |
otool -L target/${TARGET}/release/rustup-init | |
if otool -L target/${TARGET}/release/rustup-init | grep -q -F /usr/local/; then | |
echo >&2 "Unfortunately there are /usr/local things in the link. Fail." | |
exit 1 | |
fi | |
- name: Upload the built artifact | |
if: matrix.mode == 'release' | |
uses: actions/upload-artifact@v4 | |
with: | |
name: rustup-init-${{ matrix.target }} | |
path: | | |
target/${{ matrix.target }}/release/rustup-init | |
retention-days: 7 | |
- name: Ensure that awscli is installed | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
brew install --overwrite awscli | |
which aws | |
aws --version | |
- name: Prepare the dist | |
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/master') | |
run: | | |
bash ci/prepare-deploy.bash | |
- name: Deploy build to dev-static dist tree for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/stable' && matrix.mode == 'release' | |
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 | |
- name: Configure AWS credentials | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
role-to-assume: arn:aws:iam::890664054962:role/ci--rust-lang--rustup | |
aws-region: us-east-1 | |
- name: Deploy build to rustup-builds bucket for release team | |
if: github.event_name == 'push' && github.ref == 'refs/heads/master' && matrix.mode == 'release' | |
run: | | |
aws --debug s3 cp --recursive deploy/ s3://rustup-builds/${{ github.sha }} | |
env: | |
AWS_DEFAULT_REGION: us-east-1 | |
- name: Clear the cargo caches | |
run: | | |
cargo install cargo-cache --no-default-features --features ci-autoclean | |
cargo-cache | |
- name: Flush cache | |
# This is a workaround for a bug with GitHub Actions Cache that causes | |
# corrupt cache entries (particularly in the target directory). See | |
# https://github.com/actions/cache/issues/403 and | |
# https://github.com/rust-lang/cargo/issues/8603. | |
run: sudo /usr/sbin/purge | |
# This is ci/actions-templates/freebsd-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-freebsd-master: # job-name skip-stable | |
runs-on: ubuntu-latest | |
if: ${{ (github.event_name == 'push' && github.ref_name == 'master') || github.event_name == 'schedule' }} # skip-stable | |
steps: | |
- uses: actions/checkout@v4 | |
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: Run a full build | |
uses: vmactions/freebsd-vm@v1 | |
with: | |
release: 13.2 | |
usesh: true | |
copyback: false | |
prepare: | | |
pkg install -y git gmake bash sudo \ | |
`# The following packages are required by 'aws-lc-rs':` \ | |
cmake-core llvm-devel-lite rust-bindgen-cli | |
run: | | |
echo "=========" | |
echo "create non-root user and log into it" | |
pw group add -n tester | |
pw user add -n tester -g tester -s `which bash` | |
pw user mod tester -d `pwd` | |
chown -R tester . | |
sudo -u tester bash ci/freebsd/script.bash | |
# This is ci/actions-templates/freebsd-builds-template.yaml | |
# Do not edit this file in .github/workflows | |
build-freebsd-stable: # job-name skip-master | |
runs-on: ubuntu-latest | |
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' }} # skip-master | |
steps: | |
- uses: actions/checkout@v4 | |
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: Run a full build | |
uses: vmactions/freebsd-vm@v1 | |
with: | |
release: 13.2 | |
usesh: true | |
copyback: false | |
prepare: | | |
pkg install -y git gmake bash sudo \ | |
`# The following packages are required by 'aws-lc-rs':` \ | |
cmake-core llvm-devel-lite rust-bindgen-cli | |
run: | | |
echo "=========" | |
echo "create non-root user and log into it" | |
pw group add -n tester | |
pw user add -n tester -g tester -s `which bash` | |
pw user mod tester -d `pwd` | |
chown -R tester . | |
sudo -u tester bash ci/freebsd/script.bash | |
# This is ci/actions-templates/centos-fmt-clippy.yaml | |
# Do not edit this file in .github/workflows | |
check: # job-name | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
steps: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
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: Run CI workflow generation checks | |
run: | | |
./ci/actions-templates/gen-workflows.sh | |
git diff --exit-code | |
- 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 | |
- name: Cache cargo registry and git trees | |
uses: actions/cache@v4 | |
with: | |
path: | | |
~/.cargo/registry | |
~/.cargo/git | |
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} | |
- name: Get rustc commit hash | |
id: cargo-target-cache | |
run: | | |
echo "{rust_hash}={$(rustc -Vv | grep commit-hash | awk '{print $2}')}" >> $GITHUB_OUTPUT | |
shell: bash | |
- name: Cache cargo build | |
uses: actions/cache@v4 | |
with: | |
path: target | |
key: ${{ github.base_ref }}-${{ github.head_ref }}-${{ runner.os }}-cargo-clippy-target-dir-${{ steps.cargo-target-cache.outputs.rust_hash }}-${{ hashFiles('**/Cargo.lock') }} | |
restore-keys: ${{ github.base_ref }}-${{ runner.os }}-cargo-clippy-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=stable --profile=minimal -c=rustfmt -c=clippy -y | |
- name: Run the centos check within the docker image | |
run: | | |
docker run \ | |
--volume "$PWD":/checkout:ro \ | |
--workdir /checkout \ | |
--tty \ | |
--init \ | |
--rm \ | |
centos:7 \ | |
sh ./ci/raw_init.sh | |
- name: Run shell checks | |
run: | | |
shellcheck -x -s dash -- rustup-init.sh | |
git ls-files -- '*.sh' | xargs shellcheck -x -s dash | |
git ls-files -- '*.bash' | xargs shellcheck -x -s bash | |
- name: Install taplo | |
uses: taiki-e/install-action@v2 | |
with: | |
tool: taplo-cli | |
- name: Run TOML formatting checks | |
run: | | |
taplo fmt | |
git diff --exit-code | |
- name: Run Rust formatting checks | |
run: | | |
cargo fmt --all --check | |
- name: Run cargo check and clippy | |
run: | | |
cargo check --all --all-targets --features test | |
git ls-files -- '*.rs' | xargs touch | |
cargo clippy --all-targets --all-features -- -D warnings | |
# This is ci/actions-templates/all-features-template.yaml | |
# Do not edit this file in .github/workflows | |
# | |
# This is an additional workflow to test building with all feature combinations. | |
# Unlike our main workflows, this doesn't self-test the rustup install scripts, | |
# nor run on the rust docker images. This permits a smaller workflow without the | |
# templating and so on. | |
build-all-features: # job-name | |
runs-on: ${{ matrix.os }} | |
if: ${{ contains('["pull_request", "merge_group"]', github.event_name) }} | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
# Might add more targets in future. | |
- os: ubuntu-latest | |
target: x86_64-unknown-linux-gnu | |
- os: windows-latest | |
target: x86_64-pc-windows-msvc | |
steps: | |
- name: Clone repo | |
uses: actions/checkout@v4 | |
- name: Install rustup stable | |
run: rustup toolchain install stable --profile minimal | |
- name: Install Protoc | |
uses: arduino/setup-protoc@v1 | |
with: | |
version: "3.x" | |
repo-token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Install OpenSSL | |
if: ${{ contains(matrix.os, 'windows') }} | |
run: | | |
Get-Command openssl | |
openssl version | |
echo "OPENSSL_LIB_DIR=C:/Program Files/OpenSSL/lib" >> $env:GITHUB_ENV | |
echo "OPENSSL_DIR=C:/Program Files/OpenSSL/" >> $env:GITHUB_ENV | |
echo "OPENSSL_INCLUDE_DIR=C:/Program Files/OpenSSL/include" >> $env:GITHUB_ENV | |
- name: Install NASM | |
# Building `aws-lc-rs` for Windows MSVC depends on `NASM`. | |
# See: https://aws.github.io/aws-lc-rs/requirements/windows.html | |
uses: ilammy/setup-nasm@v1 | |
if: ${{ contains(matrix.os, 'windows') }} | |
- name: Set environment variables appropriately for the build | |
shell: bash | |
run: | | |
echo "$HOME/.cargo/bin" >> $GITHUB_PATH | |
echo "TARGET=${{ matrix.target }}" >> $GITHUB_ENV | |
- name: Cache Cargo | |
uses: Swatinem/rust-cache@v2 | |
- name: Install cargo-all-features | |
run: cargo install cargo-all-features --git https://github.com/rbtcollins/cargo-all-features.git | |
- name: Ensure we have our goal target installed | |
run: | | |
rustup target install ${{ matrix.target }} | |
- name: Build every combination | |
env: | |
RUSTFLAGS: -D warnings | |
run: | | |
cargo check-all-features --root-only | |
# This is ci/actions-templates/test-docs-templates.yaml | |
# Do not edit this file in .github/workflows | |
# | |
# Builds docs for both stable and master branches. | |
# stable is placed in the root of the gh-pages branch, while master is placed at /devel | |
doc: # job-name | |
runs-on: ubuntu-latest | |
if: ${{ contains('["pull_request", "merge_group"]', github.event_name) }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 | |
- name: Install mdbook | |
run: | | |
mkdir mdbook | |
curl -Lf https://github.com/rust-lang/mdBook/releases/download/v0.4.37/mdbook-v0.4.37-x86_64-unknown-linux-gnu.tar.gz | tar -xz --directory=./mdbook | |
echo "`pwd`/mdbook" >> $GITHUB_PATH | |
- name: Build user-guide | |
run: | | |
cd doc/user-guide | |
mdbook build | |
- name: Build dev-guide | |
run: | | |
cd doc/dev-guide | |
mdbook build | |
# This is ci/actions-templates/conclusion-template.yaml | |
# Do not edit this file in .github/workflows | |
conclusion: | |
# https://github.com/PyO3/pyo3/blob/42601f3af94242b017402b763a495798a92da8f8/.github/workflows/ci.yml#L452-L472 | |
if: always() | |
runs-on: ubuntu-latest | |
steps: | |
- name: Result | |
run: | | |
jq -C <<< "${needs}" | |
# Check if all needs were successful or skipped. | |
"$(jq -r 'all(.result as $result | (["success", "skipped"] | contains([$result])))' <<< "${needs}")" | |
env: | |
needs: ${{ toJson(needs) }} | |
needs: | |
- build-all-features | |
- check | |
- build-freebsd-master | |
- build-freebsd-stable | |
- build-linux-pr | |
- build-linux-master | |
- build-linux-stable | |
- build-macos-aarch64 | |
- build-macos-x86_64 | |
- doc | |
- build-windows-pr | |
- build-windows-master | |
- build-windows-stable |