Require libclang 9.0 or newer #2376
This file contains 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: bindgen | |
on: | |
push: | |
branches: | |
- main | |
pull_request: | |
branches: | |
- main | |
merge_group: | |
branches: | |
- main | |
jobs: | |
rustfmt-clippy: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
# TODO: Should ideally be stable, but we use some nightly-only | |
# features. | |
toolchain: nightly | |
components: rustfmt, clippy | |
- name: Run rustfmt | |
run: cargo fmt -- --check | |
- name: Run clippy | |
run: cargo clippy --tests | |
msrv: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install msrv for lib | |
uses: dtolnay/rust-toolchain@master | |
with: | |
# MSRV below is documented in Cargo.toml and README.md, please update those if you | |
# change this. | |
toolchain: 1.70.0 | |
- name: Test lib with msrv | |
run: cargo +1.70.0 test --package bindgen | |
- name: Install msrv for cli | |
uses: dtolnay/rust-toolchain@master | |
with: | |
# MSRV below is documented in Cargo.toml and README.md, please update those if you | |
# change this. | |
toolchain: 1.70.0 | |
- name: Test cli with msrv | |
run: cargo +1.70.0 build --package bindgen-cli | |
minimal: | |
runs-on: ubuntu-latest | |
env: | |
RUSTFLAGS: -D warnings | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Check without default features | |
run: cargo check -p bindgen --no-default-features --features=runtime | |
docs: | |
runs-on: ubuntu-latest | |
env: | |
RUSTDOCFLAGS: -D warnings | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Generate documentation for `bindgen` | |
run: cargo doc --document-private-items --no-deps -p bindgen | |
- name: Generate documentation for `bindgen-cli` | |
run: cargo doc --document-private-items --no-deps -p bindgen-cli | |
quickchecking: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
# TODO: Actually run quickchecks once `bindgen` is reliable enough. | |
- name: Build quickcheck tests | |
run: cd bindgen-tests/tests/quickchecking && cargo test | |
test-expectations: | |
runs-on: ${{matrix.os}} | |
strategy: | |
matrix: | |
os: [ubuntu-latest, macos-12] | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
- name: Test expectations | |
run: cd bindgen-tests/tests/expectations && cargo test | |
test: | |
runs-on: ${{matrix.os}} | |
strategy: | |
matrix: | |
os: [ubuntu-latest] | |
target: | |
- debian: null | |
cross: null | |
rust: null | |
llvm_version: ["9.0", "16.0"] | |
main_tests: [1] | |
release_build: [0, 1] | |
no_default_features: [0, 1] | |
# FIXME: There are no pre-built static libclang libraries, so the | |
# `static` feature is not testable atm. | |
feature_runtime: [0, 1] | |
feature_extra_asserts: [0] | |
include: | |
# Test with extra asserts + docs just with latest llvm versions to | |
# prevent explosion | |
- os: ubuntu-latest | |
llvm_version: "16.0" | |
release_build: 0 | |
no_default_features: 0 | |
feature_extra_asserts: 1 | |
# FIXME: Seems installing multiarch packages fails: | |
# | |
# https://github.com/rust-lang/rust-bindgen/pull/2037/checks?check_run_id=2441799333 | |
# | |
# - os: ubuntu-latest | |
# target: | |
# debian: arm64 | |
# cross: aarch64-linux-gnu | |
# rust: aarch64-unknown-linux-gnu | |
# llvm_version: "16.0" | |
# main_tests: 0 | |
# release_build: 0 | |
# feature_extra_asserts: 0 | |
# Ensure stuff works on macos too | |
# FIXME: Ideally should use the latest llvm version, but llvm doesn't | |
# provide releases for x86-64 macOS anymore which is what the runner uses. | |
# | |
- os: macos-12 | |
llvm_version: "9.0" | |
release_build: 0 | |
no_default_features: 0 | |
feature_extra_asserts: 0 | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install multiarch packages | |
if: matrix.target.debian | |
run: | | |
sudo apt-get install binfmt-support qemu-user-static gcc-${{matrix.target.cross}} g++-${{matrix.target.cross}} | |
source /etc/lsb-release | |
sudo tee /etc/apt/sources.list <<EOF >/dev/null | |
deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME main | |
deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-updates main | |
deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-backports main | |
deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-security main | |
EOF | |
sudo dpkg --add-architecture ${{matrix.target.debian}} | |
sudo apt-get update | |
sudo apt-get install libc6:${{matrix.target.debian}} libstdc++6:${{matrix.target.debian}} | |
- name: Install stable | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: stable | |
target: ${{matrix.target.rust}} | |
- name: Install libtinfo | |
if: matrix.os == 'ubuntu-latest' | |
run: | | |
sudo apt-get update | |
sudo apt-get install libtinfo5 | |
- name: Run all the tests | |
env: | |
GITHUB_ACTIONS_OS: ${{matrix.os}} | |
RUST_CROSS_COMPILER: ${{matrix.target.cross}} | |
RUST_TARGET: ${{matrix.target.rust}} | |
LLVM_VERSION: ${{matrix.llvm_version}} | |
BINDGEN_MAIN_TESTS: ${{matrix.main_tests}} | |
BINDGEN_RELEASE_BUILD: ${{matrix.release_build}} | |
BINDGEN_FEATURE_RUNTIME: ${{matrix.feature_runtime}} | |
BINDGEN_FEATURE_EXTRA_ASSERTS: ${{matrix.feature_extra_asserts}} | |
BINDGEN_NO_DEFAULT_FEATURES: ${{matrix.no_default_features}} | |
run: ./ci/test.sh | |
check-cfg: | |
runs-on: ubuntu-latest | |
env: | |
RUSTFLAGS: -D warnings | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install nightly | |
uses: dtolnay/rust-toolchain@master | |
with: | |
toolchain: nightly | |
- name: Check cfg | |
run: cargo check -Z unstable-options -Z check-cfg | |
test-book: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
# NOTE(emilio): Change deploy-book as well if you change this. | |
- name: Test book | |
run: | | |
curl -L https://github.com/rust-lang/mdBook/releases/download/v0.4.5/mdbook-v0.4.5-x86_64-unknown-linux-gnu.tar.gz | tar xz | |
./mdbook build book | |
./mdbook test book | |
# 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-latest | |
needs: [rustfmt-clippy, msrv, minimal, docs, quickchecking, test-expectations, test, check-cfg, test-book] | |
# 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) }}' |