ci: Add a meta job to block the merge queue on it. #943
This file contains hidden or 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
| name: cbindgen | |
| on: | |
| push: | |
| branches: | |
| - main | |
| pull_request: | |
| branches: | |
| - main | |
| merge_group: | |
| branches: | |
| - main | |
| jobs: | |
| rustfmt-clippy: | |
| runs-on: ubuntu-24.04 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Install stable | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: "clippy, rustfmt" | |
| - name: Run rustfmt | |
| run: | | |
| cargo +stable fmt --check | |
| - name: Run clippy | |
| run: | | |
| cargo +stable clippy --workspace -- -D warnings | |
| - name: Install minimum supported Rust version | |
| id: msrv | |
| uses: dtolnay/rust-toolchain@1.74 | |
| - name: Build with minimum supported Rust version | |
| env: | |
| NAME: ${{steps.msrv.outputs.name}} | |
| run: | | |
| cargo +$NAME test nonexistent-test --verbose | |
| build: | |
| runs-on: ubuntu-24.04 | |
| strategy: | |
| matrix: | |
| arch: [amd64, arm64] | |
| include: | |
| - arch: arm64 | |
| env: | |
| CARGO_BUILD_TARGET: aarch64-unknown-linux-gnu | |
| CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER: aarch64-linux-gnu-gcc-11 | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Setup environment variables for cross compiling | |
| if: matrix.arch != 'amd64' | |
| run: | | |
| echo CARGO_BUILD_TARGET=${{matrix.env.CARGO_BUILD_TARGET}} >> ${GITHUB_ENV} | |
| echo CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=${{matrix.env.CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER}} >> ${GITHUB_ENV} | |
| - name: Install cross linker and emulator | |
| if: matrix.arch == 'arm64' | |
| run: | | |
| # Only works on noble (and later?) | |
| sudo sed -i '/^Components/a Architectures: amd64' /etc/apt/sources.list.d/ubuntu.sources | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -sc) main multiverse universe" | sudo tee -a /etc/apt/sources.list.d/ports.list | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -sc)-security main multiverse universe" | sudo tee -a /etc/apt/sources.list.d/ports.list | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -sc)-backports main multiverse universe" | sudo tee -a /etc/apt/sources.list.d/ports.list | |
| echo "deb [arch=arm64] http://ports.ubuntu.com/ $(lsb_release -sc)-updates main multiverse universe" | sudo tee -a /etc/apt/sources.list.d/ports.list | |
| sudo dpkg --add-architecture arm64 | |
| sudo apt-get update | |
| sudo apt-get install -y qemu-user gcc-11-aarch64-linux-gnu libc6:arm64 | |
| - name: Install stable Rust | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| targets: ${{matrix.env.CARGO_BUILD_TARGET}} | |
| - name: Install Python | |
| uses: actions/setup-python@v4 | |
| with: | |
| python-version: '3.8' | |
| - name: Install Cython | |
| run: | | |
| python -m pip install --upgrade pip wheel | |
| pip install Cython==3.0.2 | |
| - name: Build | |
| run: | | |
| cargo +stable build --verbose | |
| - name: Build no-default-features | |
| run: | | |
| cargo +stable build --verbose --no-default-features | |
| - name: Test package | |
| env: | |
| CBINDGEN_TEST_VERIFY: 1 | |
| run: | | |
| cargo +stable package --verbose | |
| (cd target/package/cbindgen-$(cargo +stable run -- --version | cut -d ' ' -f 2) && cargo +stable test --verbose) | |
| - name: Install nightly Rust | |
| uses: dtolnay/rust-toolchain@nightly | |
| with: | |
| targets: ${{matrix.env.CARGO_BUILD_TARGET}} | |
| - name: Test | |
| env: | |
| CBINDGEN_TEST_VERIFY: 1 | |
| run: | | |
| cargo +nightly test --verbose | |
| - name: Test minimal-versions | |
| run: | | |
| cargo +nightly update -Zminimal-versions | |
| # One job that "summarizes" the success state of this pipeline. This can then | |
| # be added to branch protection, rather than having to add each job | |
| # separately. | |
| success: | |
| runs-on: ubuntu-24.04 | |
| needs: [rustfmt-clippy, build] | |
| # GitHub branch protection is exceedingly silly and treats "jobs skipped | |
| # because a dependency failed" as success. So we have to do some | |
| # contortions to ensure the job fails if any of its dependencies fails. | |
| if: always() # make sure this is never "skipped" | |
| steps: | |
| # Manually check the status of all dependencies. `if: failure()` does not work. | |
| - name: check if any dependency failed | |
| run: jq --exit-status 'all(.result == "success")' <<< '${{ toJson(needs) }}' |