| name: Clippy Test (merge queue) | |
| on: | |
| merge_group: | |
| env: | |
| RUST_BACKTRACE: 1 | |
| CARGO_TARGET_DIR: '${{ github.workspace }}/target' | |
| NO_FMT_TEST: 1 | |
| CARGO_INCREMENTAL: 0 | |
| RUSTFLAGS: -D warnings | |
| defaults: | |
| run: | |
| shell: bash | |
| jobs: | |
| base: | |
| strategy: | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| host: x86_64-unknown-linux-gnu | |
| - os: ubuntu-latest | |
| host: i686-unknown-linux-gnu | |
| - os: windows-latest | |
| host: x86_64-pc-windows-msvc | |
| - os: macos-latest | |
| host: aarch64-apple-darwin | |
| runs-on: ${{ matrix.os }} | |
| # NOTE: If you modify this job, make sure you copy the changes to clippy.yml | |
| steps: | |
| # Setup | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| persist-credentials: false | |
| - name: Install i686 dependencies | |
| if: matrix.host == 'i686-unknown-linux-gnu' | |
| run: | | |
| sudo dpkg --add-architecture i386 | |
| sudo apt-get update | |
| sudo apt-get install gcc-multilib zlib1g-dev:i386 | |
| - name: Install toolchain | |
| run: | | |
| rustup set default-host ${{ matrix.host }} | |
| # Use a way compatible with Rustup pre-1.28.0 and Rustup 1.28.0 | |
| rustup show active-toolchain || rustup toolchain install | |
| # Run | |
| - name: Build | |
| run: cargo build --tests --features internal | |
| - name: Test | |
| if: matrix.host == 'x86_64-unknown-linux-gnu' | |
| run: cargo test --features internal | |
| - name: Test | |
| if: matrix.host != 'x86_64-unknown-linux-gnu' | |
| run: cargo test --features internal -- --skip dogfood | |
| - name: Test clippy_lints | |
| run: cargo test | |
| working-directory: clippy_lints | |
| - name: Test clippy_utils | |
| run: cargo test | |
| working-directory: clippy_utils | |
| - name: Test clippy_config | |
| run: cargo test | |
| working-directory: clippy_config | |
| - name: Test rustc_tools_util | |
| run: cargo test | |
| working-directory: rustc_tools_util | |
| - name: Test clippy_dev | |
| run: cargo test | |
| working-directory: clippy_dev | |
| - name: Test clippy-driver | |
| run: .github/driver.sh | |
| env: | |
| OS: ${{ runner.os }} | |
| metadata_collection: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # Setup | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| persist-credentials: false | |
| - name: Install toolchain | |
| run: | | |
| # Use a way compatible with Rustup pre-1.28.0 and Rustup 1.28.0 | |
| rustup show active-toolchain || rustup toolchain install | |
| - name: Test metadata collection | |
| run: cargo collect-metadata | |
| integration_build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| # Setup | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| persist-credentials: false | |
| - name: Install toolchain | |
| run: | | |
| # Use a way compatible with Rustup pre-1.28.0 and Rustup 1.28.0 | |
| rustup show active-toolchain || rustup toolchain install | |
| # Run | |
| - name: Build Integration Test | |
| env: | |
| CARGO_PROFILE_DEV_SPLIT_DEBUGINFO: off | |
| run: cargo test --test integration --features integration --no-run | |
| # Upload | |
| - name: Extract Binaries | |
| run: | | |
| DIR=$CARGO_TARGET_DIR/debug | |
| find $DIR/deps/integration-* -executable ! -type d | xargs -I {} mv {} $DIR/integration | |
| find $DIR ! -executable -o -type d ! -path $DIR | xargs rm -rf | |
| - name: Upload Binaries | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: binaries | |
| path: target/debug | |
| integration: | |
| needs: integration_build | |
| strategy: | |
| fail-fast: false | |
| max-parallel: 6 | |
| matrix: | |
| integration: | |
| - 'matthiaskrgr/clippy_ci_panic_test' | |
| - 'rust-lang/cargo' | |
| - 'rust-lang/chalk' | |
| - 'rust-lang/rustfmt' | |
| - 'Marwes/combine' | |
| - 'Geal/nom' | |
| - 'rust-lang/stdarch' | |
| - 'serde-rs/serde' | |
| - 'chronotope/chrono' | |
| - 'hyperium/hyper' | |
| - 'rust-random/rand' | |
| - 'rust-lang/futures-rs' | |
| - 'rust-itertools/itertools' | |
| - 'rust-lang-nursery/failure' | |
| - 'rust-lang/log' | |
| runs-on: ubuntu-latest | |
| steps: | |
| # Setup | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| persist-credentials: false | |
| - name: Install toolchain | |
| run: | | |
| # Use a way compatible with Rustup pre-1.28.0 and Rustup 1.28.0 | |
| rustup show active-toolchain || rustup toolchain install | |
| # Download | |
| - name: Download target dir | |
| uses: actions/download-artifact@v8 | |
| with: | |
| name: binaries | |
| path: target/debug | |
| - name: Make Binaries Executable | |
| run: chmod +x $CARGO_TARGET_DIR/debug/* | |
| # Run | |
| - name: Test ${{ matrix.integration }} | |
| run: | | |
| TOOLCHAIN=$(rustup show active-toolchain | head -n 1 | cut -f1 -d' ') | |
| rustup run $TOOLCHAIN $CARGO_TARGET_DIR/debug/integration --show-output | |
| env: | |
| INTEGRATION: ${{ matrix.integration }} | |
| conclusion: | |
| needs: [ base, metadata_collection, integration_build, integration ] | |
| # 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() }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| # Manually check the status of all dependencies. `if: failure()` does not work. | |
| - 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) }}' |