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-13 host: x86_64-apple-darwin - 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@v5 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@v5 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@v5 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@v4 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@v5 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@v4 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) }}'