1631 lines
67 KiB
YAML
1631 lines
67 KiB
YAML
# 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:
|
|
- main
|
|
- release/*
|
|
- stable
|
|
workflow_dispatch:
|
|
schedule:
|
|
- cron: "30 0 * * 1,3,5" # At 00:30 UTC on Monday, Wednesday, and Friday
|
|
|
|
jobs:
|
|
|
|
# This is ci/actions-templates/windows-builds-template.yaml
|
|
# Do not edit this file in .github/workflows
|
|
build-windows-pr: # job-name skip-main skip-stable
|
|
runs-on: ${{ matrix.os || 'windows-latest' }}
|
|
if: ${{ contains(fromJSON('["pull_request", "merge_group"]'), github.event_name) }} # skip-main 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
|
|
- target: aarch64-pc-windows-msvc
|
|
# Architecture of the rustup build that installs Rust in this workflow.
|
|
rustup_arch: aarch64
|
|
os: windows-11-arm
|
|
run_tests: YES
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
# 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.16
|
|
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 "${env: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@v5
|
|
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@v5
|
|
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
|
|
env:
|
|
RUSTUP_ARCH: ${{ matrix.rustup_arch || 'x86_64' }}
|
|
run: |
|
|
# Disable the download progress bar which can cause perf issues
|
|
$ProgressPreference = "SilentlyContinue"
|
|
Invoke-WebRequest "https://win.rustup.rs/${env:RUSTUP_ARCH}" -OutFile rustup-init.exe
|
|
.\rustup-init.exe -y --default-host=${env:RUSTUP_ARCH}-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: |
|
|
rustup component add clippy
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
- name: Upload the built artifact
|
|
if: matrix.mode == 'release'
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: rustup-init-${{ matrix.target }}
|
|
path: |
|
|
target/${{ matrix.target }}/release/rustup-init.exe
|
|
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/main')
|
|
run: |
|
|
Get-Command aws
|
|
aws --version
|
|
- name: Prepare the dist
|
|
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main: # job-name skip-pr skip-stable
|
|
runs-on: ${{ matrix.os || 'windows-latest' }}
|
|
if: ${{ github.event_name == 'push' && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/')) }} # 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
|
|
- target: aarch64-pc-windows-msvc
|
|
# Architecture of the rustup build that installs Rust in this workflow.
|
|
rustup_arch: aarch64
|
|
os: windows-11-arm
|
|
run_tests: YES
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
# 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.16
|
|
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 "${env: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@v5
|
|
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@v5
|
|
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
|
|
env:
|
|
RUSTUP_ARCH: ${{ matrix.rustup_arch || 'x86_64' }}
|
|
run: |
|
|
# Disable the download progress bar which can cause perf issues
|
|
$ProgressPreference = "SilentlyContinue"
|
|
Invoke-WebRequest "https://win.rustup.rs/${env:RUSTUP_ARCH}" -OutFile rustup-init.exe
|
|
.\rustup-init.exe -y --default-host=${env:RUSTUP_ARCH}-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: |
|
|
rustup component add clippy
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
- name: Upload the built artifact
|
|
if: matrix.mode == 'release'
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: rustup-init-${{ matrix.target }}
|
|
path: |
|
|
target/${{ matrix.target }}/release/rustup-init.exe
|
|
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/main')
|
|
run: |
|
|
Get-Command aws
|
|
aws --version
|
|
- name: Prepare the dist
|
|
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main skip-pr
|
|
runs-on: ${{ matrix.os || 'windows-latest' }}
|
|
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' || contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} # skip-pr skip-main
|
|
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-main
|
|
- aarch64-pc-windows-msvc
|
|
- x86_64-pc-windows-gnu
|
|
- i686-pc-windows-gnu # skip-pr skip-main
|
|
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: aarch64-pc-windows-msvc
|
|
# Architecture of the rustup build that installs Rust in this workflow.
|
|
rustup_arch: aarch64
|
|
os: windows-11-arm
|
|
run_tests: YES
|
|
- target: i686-pc-windows-gnu # skip-pr skip-main
|
|
arch: i686 # skip-pr skip-main
|
|
mingwdir: mingw32 # skip-pr skip-main
|
|
gcc: i686-w64-mingw32-gcc # skip-pr skip-main
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
# 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.16
|
|
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 "${env: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@v5
|
|
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@v5
|
|
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
|
|
env:
|
|
RUSTUP_ARCH: ${{ matrix.rustup_arch || 'x86_64' }}
|
|
run: |
|
|
# Disable the download progress bar which can cause perf issues
|
|
$ProgressPreference = "SilentlyContinue"
|
|
Invoke-WebRequest "https://win.rustup.rs/${env:RUSTUP_ARCH}" -OutFile rustup-init.exe
|
|
.\rustup-init.exe -y --default-host=${env:RUSTUP_ARCH}-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: |
|
|
rustup component add clippy
|
|
cargo clippy --all-targets --all-features -- -D warnings
|
|
- name: Upload the built artifact
|
|
if: matrix.mode == 'release'
|
|
uses: actions/upload-artifact@v7
|
|
with:
|
|
name: rustup-init-${{ matrix.target }}
|
|
path: |
|
|
target/${{ matrix.target }}/release/rustup-init.exe
|
|
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/main')
|
|
run: |
|
|
Get-Command aws
|
|
aws --version
|
|
- name: Prepare the dist
|
|
if: github.event_name == 'push' && matrix.mode == 'release' && (github.ref == 'refs/heads/stable' || github.ref == 'refs/heads/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main skip-stable
|
|
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
|
if: ${{ contains(fromJSON('["pull_request", "merge_group"]'), github.event_name) }} # skip-main 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
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
run_tests: YES
|
|
#snap_arch: amd64
|
|
# We add an ARM-based host to the following target.
|
|
# We need to do that because rust's CI uses ARM-based runners
|
|
# to generate their Dockerfiles.
|
|
- target: aarch64-unknown-linux-gnu
|
|
os: ubuntu-24.04-arm
|
|
run_tests: YES
|
|
- target: armv7-unknown-linux-gnueabihf
|
|
#snap_arch: armhf
|
|
steps:
|
|
- name: Clone repo
|
|
uses: actions/checkout@v6
|
|
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@v5
|
|
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@v5
|
|
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
|
|
# HACK: A possible regression in Docker will make this step fail
|
|
# when BuildKit is enabled, so disabling it for now. See
|
|
# <https://github.com/rust-lang/rustup/issues/4720> for more info.
|
|
DOCKER_BUILDKIT=0 docker build -t "rustup/$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}" \
|
|
--env INSTALL_BINDGEN=1 \
|
|
--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 \
|
|
"rustup/$DOCKER" \
|
|
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash'
|
|
- name: Upload the built artifact
|
|
uses: actions/upload-artifact@v7
|
|
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/main')
|
|
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/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main: # job-name skip-pr skip-stable
|
|
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
|
if: ${{ github.event_name == 'push' && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/')) }} # 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
|
|
- 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
|
|
# We add an ARM-based host to the following target.
|
|
# We need to do that because rust's CI uses ARM-based runners
|
|
# to generate their Dockerfiles.
|
|
- target: aarch64-unknown-linux-gnu
|
|
os: ubuntu-24.04-arm
|
|
run_tests: YES
|
|
- target: armv7-unknown-linux-gnueabihf
|
|
#snap_arch: armhf
|
|
steps:
|
|
- name: Clone repo
|
|
uses: actions/checkout@v6
|
|
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@v5
|
|
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@v5
|
|
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
|
|
# HACK: A possible regression in Docker will make this step fail
|
|
# when BuildKit is enabled, so disabling it for now. See
|
|
# <https://github.com/rust-lang/rustup/issues/4720> for more info.
|
|
DOCKER_BUILDKIT=0 docker build -t "rustup/$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}" \
|
|
--env INSTALL_BINDGEN=1 \
|
|
--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 \
|
|
"rustup/$DOCKER" \
|
|
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash'
|
|
- name: Upload the built artifact
|
|
uses: actions/upload-artifact@v7
|
|
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/main')
|
|
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/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main skip-pr
|
|
runs-on: ${{ matrix.os || 'ubuntu-latest' }}
|
|
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' || contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} # skip-pr skip-main
|
|
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
|
|
- aarch64-unknown-linux-musl # skip-pr skip-main
|
|
- powerpc64-unknown-linux-gnu # skip-pr
|
|
- x86_64-unknown-linux-musl # skip-pr
|
|
- i686-unknown-linux-gnu # skip-pr skip-main
|
|
- arm-unknown-linux-gnueabi # skip-pr skip-main
|
|
- arm-unknown-linux-gnueabihf # skip-pr skip-main
|
|
- x86_64-pc-solaris # skip-pr skip-main
|
|
- x86_64-unknown-freebsd # skip-pr skip-main
|
|
- x86_64-unknown-netbsd # skip-pr skip-main
|
|
- x86_64-unknown-illumos # skip-pr skip-main
|
|
- powerpc-unknown-linux-gnu # skip-pr skip-main
|
|
- powerpc64-unknown-linux-musl # skip-pr skip-main
|
|
- powerpc64le-unknown-linux-gnu # skip-pr skip-main
|
|
- powerpc64le-unknown-linux-musl # skip-pr skip-main
|
|
- s390x-unknown-linux-gnu # skip-pr skip-main
|
|
- sparcv9-sun-solaris # skip-pr skip-main
|
|
- arm-linux-androideabi # skip-pr skip-main
|
|
- armv7-linux-androideabi # skip-pr skip-main
|
|
- x86_64-linux-android # skip-pr skip-main
|
|
- riscv64gc-unknown-linux-gnu # skip-pr skip-main
|
|
- loongarch64-unknown-linux-gnu # skip-pr skip-main
|
|
- loongarch64-unknown-linux-musl # skip-pr skip-main
|
|
include:
|
|
- target: x86_64-unknown-linux-gnu
|
|
run_tests: YES
|
|
#snap_arch: amd64
|
|
- target: i686-unknown-linux-gnu # skip-pr skip-main
|
|
#snap_arch: i386 # skip-pr skip-main
|
|
# We add an ARM-based host to the following target.
|
|
# We need to do that because rust's CI uses ARM-based runners
|
|
# to generate their Dockerfiles.
|
|
- target: aarch64-unknown-linux-gnu
|
|
os: ubuntu-24.04-arm
|
|
run_tests: YES
|
|
- target: armv7-unknown-linux-gnueabihf
|
|
#snap_arch: armhf
|
|
- target: powerpc64le-unknown-linux-gnu # skip-pr skip-main
|
|
#snap_arch: ppc64el # skip-pr skip-main
|
|
- target: s390x-unknown-linux-gnu # skip-pr skip-main
|
|
#snap_arch: s390x # skip-pr skip-main
|
|
steps:
|
|
- name: Clone repo
|
|
uses: actions/checkout@v6
|
|
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@v5
|
|
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@v5
|
|
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
|
|
# HACK: A possible regression in Docker will make this step fail
|
|
# when BuildKit is enabled, so disabling it for now. See
|
|
# <https://github.com/rust-lang/rustup/issues/4720> for more info.
|
|
DOCKER_BUILDKIT=0 docker build -t "rustup/$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}" \
|
|
--env INSTALL_BINDGEN=1 \
|
|
--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 \
|
|
"rustup/$DOCKER" \
|
|
-c 'PATH="${PATH}":/rustc-sysroot/bin bash ci/run.bash'
|
|
- name: Upload the built artifact
|
|
uses: actions/upload-artifact@v7
|
|
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/main')
|
|
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/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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
|
|
env: # skip-aarch64
|
|
MACOSX_DEPLOYMENT_TARGET: 10.12 # skip-aarch64
|
|
runs-on: macos-15-intel # skip-aarch64
|
|
permissions:
|
|
id-token: write
|
|
contents: read
|
|
strategy:
|
|
matrix:
|
|
mode:
|
|
- dev
|
|
- release
|
|
target:
|
|
- x86_64-apple-darwin # skip-aarch64
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
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@v5
|
|
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@v5
|
|
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 }}
|
|
shell: arch -x86_64 bash -e {0} # skip-aarch64
|
|
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@v7
|
|
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/main')
|
|
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/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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
|
|
env: # skip-x86_64
|
|
MACOSX_DEPLOYMENT_TARGET: 11.0 # skip-x86_64
|
|
runs-on: macos-latest # 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@v6
|
|
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@v5
|
|
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@v5
|
|
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@v7
|
|
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/main')
|
|
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/main')
|
|
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/main' && matrix.mode == 'release'
|
|
uses: aws-actions/configure-aws-credentials@v6
|
|
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/main' && 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-main: # job-name skip-stable
|
|
runs-on: ubuntu-latest
|
|
if: ${{ (github.event_name == 'push' && (github.ref_name == 'main' || startsWith(github.ref_name, 'release/'))) || contains(fromJSON('["schedule", "workflow_dispatch"]'), github.event_name) }} # skip-stable
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
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-main
|
|
runs-on: ubuntu-latest
|
|
if: ${{ github.event_name == 'push' && github.ref_name == 'stable' }} # skip-main
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
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@v6
|
|
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@v5
|
|
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@v5
|
|
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
|
|
fallback: none
|
|
- 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(fromJSON('["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@v6
|
|
- name: Install rustup stable
|
|
run: rustup toolchain install stable --profile minimal
|
|
- name: Install OpenSSL
|
|
if: ${{ contains(matrix.os, 'windows') }}
|
|
run: |
|
|
Get-Command openssl
|
|
openssl version
|
|
echo "OPENSSL_LIB_DIR=C:/Program Files/OpenSSL/lib/VC/x64/MD" >> $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
|
|
shell: bash
|
|
run: which cargo-check-all-features || 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 main branches.
|
|
# stable is placed in the root of the gh-pages branch, while main is placed at /devel
|
|
doc: # job-name
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
with:
|
|
fetch-depth: 0
|
|
- name: Install mdbook
|
|
uses: taiki-e/install-action@v2
|
|
env:
|
|
# renovate: datasource=crate depName=mdbook
|
|
MDBOOK_VERSION: "0.5.2"
|
|
with:
|
|
tool: mdbook@${{ env.MDBOOK_VERSION }}
|
|
- name: Build user-guide (stable)
|
|
if: ${{ !contains(fromJSON('["pull_request", "merge_group"]'), github.event_name) }}
|
|
run: |
|
|
git checkout stable
|
|
# Support both old and new directory structure during the transition
|
|
cd doc/user-guide || cd doc
|
|
mdbook build
|
|
mv book ${{ runner.temp }}
|
|
- name: Build user-guide (main)
|
|
run: |
|
|
git checkout main
|
|
cd doc/user-guide
|
|
mdbook build
|
|
mkdir -p ${{ runner.temp }}/book
|
|
mv book ${{ runner.temp }}/book/devel
|
|
- name: Build dev-guide (main)
|
|
run: |
|
|
git checkout main
|
|
cd doc/dev-guide
|
|
mdbook build
|
|
mkdir -p ${{ runner.temp }}/book
|
|
mv book ${{ runner.temp }}/book/dev-guide
|
|
- name: Deploy to GitHub
|
|
if: ${{ !contains(fromJSON('["pull_request", "merge_group"]'), github.event_name) && !startsWith(github.ref_name, 'release/') }}
|
|
run: |
|
|
cd ${{ runner.temp }}/book
|
|
git config --global init.defaultBranch main
|
|
git init
|
|
git config user.name "Deploy from CI"
|
|
git config user.email ""
|
|
git add . .nojekyll
|
|
git commit -m "Deploy $GITHUB_REF $GITHUB_SHA to gh-pages"
|
|
git remote add origin https://x-access-token:${{ secrets.GITHUB_TOKEN }}@github.com/$GITHUB_REPOSITORY
|
|
git push --force --set-upstream origin main:gh-pages
|
|
|
|
# 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-main
|
|
- build-freebsd-stable
|
|
- build-linux-pr
|
|
- build-linux-main
|
|
- build-linux-stable
|
|
- build-macos-aarch64
|
|
- build-macos-x86_64
|
|
- doc
|
|
- build-windows-pr
|
|
- build-windows-main
|
|
- build-windows-stable
|