112a9d9c8Sopenharmony_ciname: bindgen
212a9d9c8Sopenharmony_ci
312a9d9c8Sopenharmony_cion:
412a9d9c8Sopenharmony_ci  push:
512a9d9c8Sopenharmony_ci    branches:
612a9d9c8Sopenharmony_ci      - main
712a9d9c8Sopenharmony_ci  pull_request:
812a9d9c8Sopenharmony_ci    branches:
912a9d9c8Sopenharmony_ci      - main
1012a9d9c8Sopenharmony_ci
1112a9d9c8Sopenharmony_cijobs:
1212a9d9c8Sopenharmony_ci  rustfmt-clippy:
1312a9d9c8Sopenharmony_ci    runs-on: ubuntu-latest
1412a9d9c8Sopenharmony_ci
1512a9d9c8Sopenharmony_ci    steps:
1612a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
1712a9d9c8Sopenharmony_ci
1812a9d9c8Sopenharmony_ci      - name: Install stable
1912a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
2012a9d9c8Sopenharmony_ci        with:
2112a9d9c8Sopenharmony_ci          profile: minimal
2212a9d9c8Sopenharmony_ci          # TODO: Should ideally be stable, but we use some nightly-only
2312a9d9c8Sopenharmony_ci          # features.
2412a9d9c8Sopenharmony_ci          toolchain: nightly
2512a9d9c8Sopenharmony_ci          override: true
2612a9d9c8Sopenharmony_ci          components: rustfmt, clippy
2712a9d9c8Sopenharmony_ci
2812a9d9c8Sopenharmony_ci      - name: Run rustfmt
2912a9d9c8Sopenharmony_ci        uses: actions-rs/cargo@v1
3012a9d9c8Sopenharmony_ci        with:
3112a9d9c8Sopenharmony_ci          command: fmt
3212a9d9c8Sopenharmony_ci          args: -- --check
3312a9d9c8Sopenharmony_ci
3412a9d9c8Sopenharmony_ci      - name: Run clippy
3512a9d9c8Sopenharmony_ci        uses: actions-rs/cargo@v1
3612a9d9c8Sopenharmony_ci        with:
3712a9d9c8Sopenharmony_ci          command: clippy
3812a9d9c8Sopenharmony_ci          args: --tests
3912a9d9c8Sopenharmony_ci
4012a9d9c8Sopenharmony_ci  msrv:
4112a9d9c8Sopenharmony_ci    runs-on: ubuntu-latest
4212a9d9c8Sopenharmony_ci    steps:
4312a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
4412a9d9c8Sopenharmony_ci
4512a9d9c8Sopenharmony_ci      - name: Install msrv
4612a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
4712a9d9c8Sopenharmony_ci        with:
4812a9d9c8Sopenharmony_ci          profile: minimal
4912a9d9c8Sopenharmony_ci          # MSRV below is documented in Cargo.toml and README.md, please update those if you
5012a9d9c8Sopenharmony_ci          # change this.
5112a9d9c8Sopenharmony_ci          toolchain: 1.60.0
5212a9d9c8Sopenharmony_ci          override: true
5312a9d9c8Sopenharmony_ci
5412a9d9c8Sopenharmony_ci      - name: Build with msrv
5512a9d9c8Sopenharmony_ci        run: rm Cargo.lock && cargo +1.60.0 build --lib
5612a9d9c8Sopenharmony_ci
5712a9d9c8Sopenharmony_ci  quickchecking:
5812a9d9c8Sopenharmony_ci    runs-on: ubuntu-latest
5912a9d9c8Sopenharmony_ci    steps:
6012a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
6112a9d9c8Sopenharmony_ci
6212a9d9c8Sopenharmony_ci      - name: Install stable
6312a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
6412a9d9c8Sopenharmony_ci        with:
6512a9d9c8Sopenharmony_ci          profile: minimal
6612a9d9c8Sopenharmony_ci          toolchain: stable
6712a9d9c8Sopenharmony_ci          override: true
6812a9d9c8Sopenharmony_ci
6912a9d9c8Sopenharmony_ci      # TODO: Actually run quickchecks once `bindgen` is reliable enough.
7012a9d9c8Sopenharmony_ci      - name: Build quickcheck tests
7112a9d9c8Sopenharmony_ci        run: cd bindgen-tests/tests/quickchecking && cargo test
7212a9d9c8Sopenharmony_ci
7312a9d9c8Sopenharmony_ci  test-expectations:
7412a9d9c8Sopenharmony_ci    runs-on: ${{matrix.os}}
7512a9d9c8Sopenharmony_ci    strategy:
7612a9d9c8Sopenharmony_ci      matrix:
7712a9d9c8Sopenharmony_ci        # TODO(#1954): These should be run on mac too, but turns out they're
7812a9d9c8Sopenharmony_ci        # broken.
7912a9d9c8Sopenharmony_ci        os: [ubuntu-latest, macos-latest]
8012a9d9c8Sopenharmony_ci    steps:
8112a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
8212a9d9c8Sopenharmony_ci
8312a9d9c8Sopenharmony_ci      - name: Install stable
8412a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
8512a9d9c8Sopenharmony_ci        with:
8612a9d9c8Sopenharmony_ci          profile: minimal
8712a9d9c8Sopenharmony_ci          toolchain: stable
8812a9d9c8Sopenharmony_ci          override: true
8912a9d9c8Sopenharmony_ci
9012a9d9c8Sopenharmony_ci      - name: Test expectations
9112a9d9c8Sopenharmony_ci        run: cd bindgen-tests/tests/expectations && cargo test
9212a9d9c8Sopenharmony_ci
9312a9d9c8Sopenharmony_ci  test:
9412a9d9c8Sopenharmony_ci    runs-on: ${{matrix.os}}
9512a9d9c8Sopenharmony_ci    strategy:
9612a9d9c8Sopenharmony_ci      matrix:
9712a9d9c8Sopenharmony_ci        os: [ubuntu-latest]
9812a9d9c8Sopenharmony_ci        target:
9912a9d9c8Sopenharmony_ci          - debian: null
10012a9d9c8Sopenharmony_ci            cross: null
10112a9d9c8Sopenharmony_ci            rust: null
10212a9d9c8Sopenharmony_ci        llvm_version: ["5.0", "9.0"]
10312a9d9c8Sopenharmony_ci        main_tests: [1]
10412a9d9c8Sopenharmony_ci        release_build: [0, 1]
10512a9d9c8Sopenharmony_ci        no_default_features: [0, 1]
10612a9d9c8Sopenharmony_ci        # FIXME: There are no pre-built static libclang libraries, so the
10712a9d9c8Sopenharmony_ci        # `static` feature is not testable atm.
10812a9d9c8Sopenharmony_ci        feature_runtime: [0, 1]
10912a9d9c8Sopenharmony_ci        feature_extra_asserts: [0]
11012a9d9c8Sopenharmony_ci        feature_testing_only_docs: [0]
11112a9d9c8Sopenharmony_ci
11212a9d9c8Sopenharmony_ci        include:
11312a9d9c8Sopenharmony_ci          # Test with extra asserts + docs just with latest llvm versions to
11412a9d9c8Sopenharmony_ci          # prevent explosion
11512a9d9c8Sopenharmony_ci          - os: ubuntu-latest
11612a9d9c8Sopenharmony_ci            llvm_version: "9.0"
11712a9d9c8Sopenharmony_ci            release_build: 0
11812a9d9c8Sopenharmony_ci            no_default_features: 0
11912a9d9c8Sopenharmony_ci            feature_extra_asserts: 1
12012a9d9c8Sopenharmony_ci            feature_testing_only_docs: 1
12112a9d9c8Sopenharmony_ci
12212a9d9c8Sopenharmony_ci          # FIXME: Seems installing multiarch packages fails:
12312a9d9c8Sopenharmony_ci          #
12412a9d9c8Sopenharmony_ci          #   https://github.com/rust-lang/rust-bindgen/pull/2037/checks?check_run_id=2441799333
12512a9d9c8Sopenharmony_ci          #
12612a9d9c8Sopenharmony_ci          # - os: ubuntu-latest
12712a9d9c8Sopenharmony_ci          #   target:
12812a9d9c8Sopenharmony_ci          #     debian: arm64
12912a9d9c8Sopenharmony_ci          #     cross: aarch64-linux-gnu
13012a9d9c8Sopenharmony_ci          #     rust: aarch64-unknown-linux-gnu
13112a9d9c8Sopenharmony_ci          #   llvm_version: "9.0"
13212a9d9c8Sopenharmony_ci          #   main_tests: 0
13312a9d9c8Sopenharmony_ci          #   release_build: 0
13412a9d9c8Sopenharmony_ci          #   feature_extra_asserts: 0
13512a9d9c8Sopenharmony_ci          #   feature_testing_only_docs: 0
13612a9d9c8Sopenharmony_ci
13712a9d9c8Sopenharmony_ci          # Ensure stuff works on macos too
13812a9d9c8Sopenharmony_ci          - os: macos-latest
13912a9d9c8Sopenharmony_ci            llvm_version: "9.0"
14012a9d9c8Sopenharmony_ci            release_build: 0
14112a9d9c8Sopenharmony_ci            no_default_features: 0
14212a9d9c8Sopenharmony_ci            feature_extra_asserts: 0
14312a9d9c8Sopenharmony_ci            feature_testing_only_docs: 0
14412a9d9c8Sopenharmony_ci    steps:
14512a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
14612a9d9c8Sopenharmony_ci
14712a9d9c8Sopenharmony_ci      - name: Install multiarch packages
14812a9d9c8Sopenharmony_ci        if: matrix.target.debian
14912a9d9c8Sopenharmony_ci        run: |
15012a9d9c8Sopenharmony_ci          sudo apt-get install binfmt-support qemu-user-static gcc-${{matrix.target.cross}} g++-${{matrix.target.cross}}
15112a9d9c8Sopenharmony_ci          source /etc/lsb-release
15212a9d9c8Sopenharmony_ci          sudo tee /etc/apt/sources.list <<EOF >/dev/null
15312a9d9c8Sopenharmony_ci          deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME main
15412a9d9c8Sopenharmony_ci          deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-updates main
15512a9d9c8Sopenharmony_ci          deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-backports main
15612a9d9c8Sopenharmony_ci          deb [arch=${{matrix.target.debian}}] http://ports.ubuntu.com/ubuntu-ports/ $DISTRIB_CODENAME-security main
15712a9d9c8Sopenharmony_ci          EOF
15812a9d9c8Sopenharmony_ci          sudo dpkg --add-architecture ${{matrix.target.debian}}
15912a9d9c8Sopenharmony_ci          sudo apt-get update
16012a9d9c8Sopenharmony_ci          sudo apt-get install libc6:${{matrix.target.debian}} libstdc++6:${{matrix.target.debian}}
16112a9d9c8Sopenharmony_ci
16212a9d9c8Sopenharmony_ci      - name: Install stable
16312a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
16412a9d9c8Sopenharmony_ci        with:
16512a9d9c8Sopenharmony_ci          profile: minimal
16612a9d9c8Sopenharmony_ci          toolchain: stable
16712a9d9c8Sopenharmony_ci          target: ${{matrix.target.rust}}
16812a9d9c8Sopenharmony_ci          override: true
16912a9d9c8Sopenharmony_ci      - name: Install libtinfo
17012a9d9c8Sopenharmony_ci        if: matrix.os == 'ubuntu-latest'
17112a9d9c8Sopenharmony_ci        run: |
17212a9d9c8Sopenharmony_ci          sudo apt-get update
17312a9d9c8Sopenharmony_ci          sudo apt-get install libtinfo5
17412a9d9c8Sopenharmony_ci      - name: Run all the tests
17512a9d9c8Sopenharmony_ci        env:
17612a9d9c8Sopenharmony_ci          GITHUB_ACTIONS_OS: ${{matrix.os}}
17712a9d9c8Sopenharmony_ci          RUST_CROSS_COMPILER: ${{matrix.target.cross}}
17812a9d9c8Sopenharmony_ci          RUST_TARGET: ${{matrix.target.rust}}
17912a9d9c8Sopenharmony_ci          LLVM_VERSION: ${{matrix.llvm_version}}
18012a9d9c8Sopenharmony_ci          BINDGEN_MAIN_TESTS: ${{matrix.main_tests}}
18112a9d9c8Sopenharmony_ci          BINDGEN_RELEASE_BUILD: ${{matrix.release_build}}
18212a9d9c8Sopenharmony_ci          BINDGEN_FEATURE_RUNTIME: ${{matrix.feature_runtime}}
18312a9d9c8Sopenharmony_ci          BINDGEN_FEATURE_EXTRA_ASSERTS: ${{matrix.feature_extra_asserts}}
18412a9d9c8Sopenharmony_ci          BINDGEN_FEATURE_TESTING_ONLY_DOCS: ${{matrix.feature_testing_only_docs}}
18512a9d9c8Sopenharmony_ci          BINDGEN_NO_DEFAULT_FEATURES: ${{matrix.no_default_features}}
18612a9d9c8Sopenharmony_ci        run: ./ci/test.sh
18712a9d9c8Sopenharmony_ci
18812a9d9c8Sopenharmony_ci  test-book:
18912a9d9c8Sopenharmony_ci    runs-on: ubuntu-latest
19012a9d9c8Sopenharmony_ci    steps:
19112a9d9c8Sopenharmony_ci      - uses: actions/checkout@v3
19212a9d9c8Sopenharmony_ci
19312a9d9c8Sopenharmony_ci      - name: Install stable
19412a9d9c8Sopenharmony_ci        uses: actions-rs/toolchain@v1
19512a9d9c8Sopenharmony_ci        with:
19612a9d9c8Sopenharmony_ci          profile: minimal
19712a9d9c8Sopenharmony_ci          toolchain: stable
19812a9d9c8Sopenharmony_ci          override: true
19912a9d9c8Sopenharmony_ci
20012a9d9c8Sopenharmony_ci      # NOTE(emilio): Change deploy-book as well if you change this.
20112a9d9c8Sopenharmony_ci      - name: Test book
20212a9d9c8Sopenharmony_ci        run: |
20312a9d9c8Sopenharmony_ci          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
20412a9d9c8Sopenharmony_ci          ./mdbook build book
20512a9d9c8Sopenharmony_ci          ./mdbook test book
206