mirror of
https://github.com/rust-lang/rust.git
synced 2026-04-30 14:52:56 +03:00
30c24f4530
ci is showing a lot of warnings (72) right now. apparently actions/checkout@v4 uses Node.js 20, and all github actions are scheduled to be force opted-in to Node.js 24 on 2026-06-02. I don't anticipate bumping the checkout action to v6 / Node.js 24 to cause any issues (Node.js 24 drops support for ARM32 and macOS versions <= 13.4, but this shouldn't matter because we use Docker to test in those environments, not github runners natively) but if it does cause issues it's probably better to find out now rather than by surprise 3 months from now... :)
355 lines
12 KiB
YAML
355 lines
12 KiB
YAML
name: CI
|
|
on:
|
|
pull_request:
|
|
merge_group:
|
|
|
|
jobs:
|
|
style:
|
|
name: Check Style
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: rustup update nightly --no-self-update && rustup default nightly
|
|
- run: ci/style.sh
|
|
|
|
docs:
|
|
name: Build Documentation
|
|
needs: [style]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: rustup update nightly --no-self-update && rustup default nightly
|
|
- run: ci/dox.sh
|
|
env:
|
|
CI: 1
|
|
|
|
verify:
|
|
name: Automatic intrinsic verification
|
|
needs: [style]
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: rustup update nightly --no-self-update && rustup default nightly
|
|
- run: cargo test --manifest-path crates/stdarch-verify/Cargo.toml
|
|
|
|
test:
|
|
needs: [style]
|
|
name: Test
|
|
runs-on: ${{ matrix.target.os }}
|
|
strategy:
|
|
matrix:
|
|
profile:
|
|
- dev
|
|
- release
|
|
target:
|
|
# Dockers that are run through docker on linux
|
|
- tuple: i686-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: x86_64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: arm-unknown-linux-gnueabihf
|
|
os: ubuntu-latest
|
|
- tuple: armv7-unknown-linux-gnueabihf
|
|
os: ubuntu-latest
|
|
- tuple: aarch64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: aarch64_be-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: riscv32gc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: riscv64gc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: powerpc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: powerpc64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: powerpc64le-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
# MIPS targets disabled since they are dropped to tier 3.
|
|
# See https://github.com/rust-lang/compiler-team/issues/648
|
|
#- tuple: mips-unknown-linux-gnu
|
|
# os: ubuntu-latest
|
|
#- tuple: mips64-unknown-linux-gnuabi64
|
|
# os: ubuntu-latest
|
|
#- tuple: mips64el-unknown-linux-gnuabi64
|
|
# os: ubuntu-latest
|
|
#- tuple: mipsel-unknown-linux-musl
|
|
# os: ubuntu-latest
|
|
- tuple: s390x-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: i586-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: nvptx64-nvidia-cuda
|
|
os: ubuntu-latest
|
|
- tuple: amdgcn-amd-amdhsa
|
|
os: ubuntu-latest
|
|
- tuple: thumbv6m-none-eabi
|
|
os: ubuntu-latest
|
|
- tuple: thumbv7m-none-eabi
|
|
os: ubuntu-latest
|
|
- tuple: thumbv7em-none-eabi
|
|
os: ubuntu-latest
|
|
- tuple: thumbv7em-none-eabihf
|
|
os: ubuntu-latest
|
|
- tuple: loongarch64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
- tuple: hexagon-unknown-linux-musl
|
|
os: ubuntu-latest
|
|
- tuple: wasm32-wasip1
|
|
os: ubuntu-latest
|
|
|
|
# macOS targets
|
|
- tuple: x86_64-apple-darwin
|
|
os: macos-15-large
|
|
- tuple: x86_64-apple-ios-macabi
|
|
os: macos-15-large
|
|
- tuple: aarch64-apple-darwin
|
|
os: macos-15
|
|
- tuple: aarch64-apple-ios-macabi
|
|
os: macos-15
|
|
# FIXME: gh-actions build environment doesn't have linker support
|
|
# - tuple: i686-apple-darwin
|
|
# os: macos-13
|
|
|
|
# Windows targets
|
|
- tuple: x86_64-pc-windows-msvc
|
|
os: windows-2025
|
|
- tuple: i686-pc-windows-msvc
|
|
os: windows-2025
|
|
- tuple: aarch64-pc-windows-msvc
|
|
os: windows-11-arm
|
|
- tuple: arm64ec-pc-windows-msvc
|
|
os: windows-11-arm
|
|
- tuple: x86_64-pc-windows-gnu
|
|
os: windows-2025
|
|
# - tuple: i686-pc-windows-gnu
|
|
# os: windows-latest
|
|
|
|
# Add additional variables to the matrix variations generated above using `include`:
|
|
include:
|
|
# `TEST_EVERYTHING` setups - there should be at least 1 for each architecture
|
|
- target:
|
|
tuple: aarch64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: aarch64_be-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
build_std: true
|
|
- target:
|
|
tuple: armv7-unknown-linux-gnueabihf
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: loongarch64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: powerpc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
disable_assert_instr: true
|
|
test_everything: true
|
|
- target:
|
|
tuple: powerpc64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
disable_assert_instr: true
|
|
test_everything: true
|
|
- target:
|
|
tuple: powerpc64le-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: riscv32gc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
build_std: true
|
|
- target:
|
|
tuple: riscv64gc-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: s390x-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
- target:
|
|
tuple: x86_64-unknown-linux-gnu
|
|
os: ubuntu-latest
|
|
test_everything: true
|
|
# MIPS targets disabled since they are dropped to tier 3.
|
|
# See https://github.com/rust-lang/compiler-team/issues/648
|
|
#- target:
|
|
# tuple: mips-unknown-linux-gnu
|
|
# os: ubuntu-latest
|
|
# norun: true
|
|
#- target:
|
|
# tuple: mips64-unknown-linux-gnuabi64
|
|
# os: ubuntu-latest
|
|
# norun: true
|
|
#- target:
|
|
# tuple: mips64el-unknown-linux-gnuabi64
|
|
# os: ubuntu-latest
|
|
# norun: true
|
|
#- target:
|
|
# tuple: mipsel-unknown-linux-musl
|
|
# os: ubuntu-latest
|
|
# norun: true
|
|
- target:
|
|
tuple: aarch64-apple-darwin
|
|
os: macos-15
|
|
norun: true # https://github.com/rust-lang/stdarch/issues/1206
|
|
- target:
|
|
tuple: aarch64-apple-ios-macabi
|
|
os: macos-15
|
|
norun: true # https://github.com/rust-lang/stdarch/issues/1206
|
|
- target:
|
|
tuple: amdgcn-amd-amdhsa
|
|
os: ubuntu-latest
|
|
norun: true
|
|
- target:
|
|
tuple: hexagon-unknown-linux-musl
|
|
os: ubuntu-latest
|
|
norun: true
|
|
build_std: true
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: |
|
|
rustup update nightly --no-self-update
|
|
rustup default nightly
|
|
shell: bash
|
|
|
|
- run: rustup target add ${{ matrix.target.tuple }}
|
|
shell: bash
|
|
if: matrix.build_std == '' && matrix.target.tuple != 'amdgcn-amd-amdhsa'
|
|
- run: |
|
|
rustup component add rust-src
|
|
echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: matrix.build_std != ''
|
|
- run: |
|
|
rustup component add rust-src
|
|
echo "CARGO_UNSTABLE_BUILD_STD=core,alloc" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: matrix.target.tuple == 'amdgcn-amd-amdhsa'
|
|
|
|
# Configure some env vars based on matrix configuration
|
|
- run: echo "PROFILE=${{matrix.profile}}" >> $GITHUB_ENV
|
|
shell: bash
|
|
- run: echo "NORUN=1" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: matrix.norun != '' || startsWith(matrix.target.tuple, 'thumb') || matrix.target.tuple == 'nvptx64-nvidia-cuda'
|
|
- run: echo "STDARCH_TEST_EVERYTHING=1" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: matrix.test_everything != ''
|
|
- run: echo "STDARCH_DISABLE_ASSERT_INSTR=1" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: matrix.disable_assert_instr != ''
|
|
- run: echo "NOSTD=1" >> $GITHUB_ENV
|
|
shell: bash
|
|
if: startsWith(matrix.target.tuple, 'thumb') || matrix.target.tuple == 'nvptx64-nvidia-cuda' || matrix.target.tuple == 'amdgcn-amd-amdhsa'
|
|
|
|
# Windows & OSX go straight to `run.sh` ...
|
|
- run: ./ci/run.sh
|
|
shell: bash
|
|
if: matrix.target.os != 'ubuntu-latest' || startsWith(matrix.target.tuple, 'thumb')
|
|
env:
|
|
TARGET: ${{ matrix.target.tuple }}
|
|
|
|
# ... while Linux goes to `run-docker.sh`
|
|
- run: ./ci/run-docker.sh ${{ matrix.target.tuple }}
|
|
shell: bash
|
|
if: matrix.target.os == 'ubuntu-latest' && !startsWith(matrix.target.tuple, 'thumb')
|
|
env:
|
|
TARGET: ${{ matrix.target.tuple }}
|
|
|
|
intrinsic-test:
|
|
needs: [style]
|
|
name: Intrinsic Test
|
|
runs-on: ubuntu-latest
|
|
strategy:
|
|
matrix:
|
|
target:
|
|
- aarch64-unknown-linux-gnu
|
|
- aarch64_be-unknown-linux-gnu
|
|
- armv7-unknown-linux-gnueabihf
|
|
- arm-unknown-linux-gnueabihf
|
|
- x86_64-unknown-linux-gnu
|
|
profile: [dev, release]
|
|
include:
|
|
- target: aarch64_be-unknown-linux-gnu
|
|
build_std: true
|
|
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: |
|
|
rustup update nightly --no-self-update
|
|
rustup default nightly
|
|
- run: rustup target add ${{ matrix.target }}
|
|
if: ${{ (matrix.build_std || false) == false }}
|
|
- run: |
|
|
rustup component add rust-src
|
|
echo "CARGO_UNSTABLE_BUILD_STD=std" >> $GITHUB_ENV
|
|
if: ${{ matrix.build_std }}
|
|
|
|
# Configure some env vars based on matrix configuration
|
|
- run: echo "PROFILE=${{ matrix.profile }}" >> $GITHUB_ENV
|
|
- run: ./ci/intrinsic-test-docker.sh ${{ matrix.target }}
|
|
if: ${{ !startsWith(matrix.target, 'thumb') }}
|
|
env:
|
|
TARGET: ${{ matrix.target }}
|
|
|
|
# Check that the generated files agree with the checked-in versions.
|
|
check-stdarch-gen:
|
|
needs: [style]
|
|
name: Check stdarch-gen-{arm, loongarch, hexagon} output
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v6
|
|
- name: Install Rust
|
|
run: rustup update nightly && rustup default nightly && rustup component add rustfmt
|
|
- name: Check arm spec
|
|
run: |
|
|
cargo run --bin=stdarch-gen-arm --release -- crates/stdarch-gen-arm/spec
|
|
git diff --exit-code
|
|
- name: Check lsx.spec
|
|
run: |
|
|
cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lsx.spec
|
|
git diff --exit-code
|
|
- name: Check lasx.spec
|
|
run: |
|
|
cargo run --bin=stdarch-gen-loongarch --release -- crates/stdarch-gen-loongarch/lasx.spec
|
|
git diff --exit-code
|
|
- name: Check hexagon
|
|
run: |
|
|
cargo run -p stdarch-gen-hexagon --release
|
|
git diff --exit-code
|
|
|
|
conclusion:
|
|
needs:
|
|
- docs
|
|
- verify
|
|
- test
|
|
- intrinsic-test
|
|
- check-stdarch-gen
|
|
runs-on: ubuntu-latest
|
|
# We need to ensure this job does *not* get skipped if its dependencies fail,
|
|
# because a skipped job is considered a success by GitHub. So we have to
|
|
# overwrite `if:`. We use `!cancelled()` to ensure the job does still not get run
|
|
# when the workflow is canceled manually.
|
|
#
|
|
# ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!
|
|
if: ${{ !cancelled() }} # make sure this is never "skipped"
|
|
steps:
|
|
- name: Conclusion
|
|
run: |
|
|
# Print the dependent jobs to see them in the CI log
|
|
jq -C <<< '${{ toJson(needs) }}'
|
|
# Check if all jobs that we depend on (in the needs array) were successful.
|
|
jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}'
|