| name: CI |
| |
| on: |
| push: |
| pull_request: |
| workflow_dispatch: |
| schedule: [cron: "40 1 * * *"] |
| |
| permissions: |
| contents: read |
| |
| jobs: |
| pre_ci: |
| uses: dtolnay/.github/.github/workflows/pre_ci.yml@master |
| |
| test: |
| name: ${{matrix.name || format('Rust {0}', matrix.rust)}} |
| needs: pre_ci |
| if: needs.pre_ci.outputs.continue |
| runs-on: ${{matrix.os || 'ubuntu'}}-latest |
| strategy: |
| fail-fast: false |
| matrix: |
| include: |
| - rust: nightly |
| - rust: beta |
| - rust: stable |
| - rust: 1.60.0 |
| - rust: 1.70.0 |
| - rust: 1.74.0 |
| - name: Cargo on macOS |
| rust: nightly |
| os: macos |
| - name: Cargo on Windows (msvc) |
| rust: nightly-x86_64-pc-windows-msvc |
| os: windows |
| flags: /EHsc |
| env: |
| CXXFLAGS: ${{matrix.flags}} |
| RUSTFLAGS: --cfg deny_warnings -Dwarnings |
| timeout-minutes: 45 |
| steps: |
| - name: Enable symlinks (windows) |
| if: matrix.os == 'windows' |
| run: git config --global core.symlinks true |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/rust-toolchain@master |
| with: |
| toolchain: ${{matrix.rust}} |
| components: rust-src |
| - name: Determine test suite subset |
| # Our Windows and macOS jobs are the longest running, so exclude the |
| # relatively slow compiletest from them to speed up end-to-end CI time, |
| # except during cron builds when no human is presumably waiting on the |
| # build. The extra coverage is not particularly valuable and we can |
| # still ensure the test is kept passing on the basis of the scheduled |
| # builds. |
| run: | |
| echo RUSTFLAGS=$RUSTFLAGS >> $GITHUB_ENV |
| echo exclude=--exclude cxx-test-suite ${{matrix.rust == '1.70.0' && '--exclude cxxbridge-cmd' || ''}} >> $GITHUB_OUTPUT |
| env: |
| RUSTFLAGS: ${{env.RUSTFLAGS}} ${{matrix.os && github.event_name != 'schedule' && '--cfg skip_ui_tests' || ''}} |
| id: testsuite |
| shell: bash |
| - run: cargo run --manifest-path demo/Cargo.toml |
| - run: cargo test --workspace ${{steps.testsuite.outputs.exclude}} |
| if: matrix.rust != '1.60.0' |
| - run: cargo check --no-default-features --features alloc |
| env: |
| RUSTFLAGS: --cfg compile_error_if_std ${{env.RUSTFLAGS}} |
| - run: cargo check --no-default-features |
| env: |
| RUSTFLAGS: --cfg compile_error_if_alloc --cfg cxx_experimental_no_alloc ${{env.RUSTFLAGS}} |
| |
| reindeer: |
| name: Reindeer |
| runs-on: ubuntu-latest |
| if: github.event_name != 'pull_request' |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/rust-toolchain@stable |
| with: |
| components: rust-src |
| - uses: dtolnay/install@reindeer |
| - run: reindeer buckify |
| working-directory: third-party |
| - name: Check reindeer-generated BUCK file up to date |
| run: git diff --exit-code |
| |
| bazel: |
| name: Bazel on ${{matrix.os == 'ubuntu' && 'Linux' || matrix.os == 'macos' && 'macOS' || matrix.os == 'windows' && 'Windows' || '???'}} |
| runs-on: ${{matrix.os}}-latest |
| if: github.event_name != 'pull_request' |
| strategy: |
| fail-fast: false |
| matrix: |
| os: [ubuntu, macos, windows] |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Install lld |
| run: sudo apt-get install lld |
| if: matrix.os == 'ubuntu' |
| - run: bazel --version |
| - run: bazel run demo --verbose_failures --noshow_progress ${{matrix.os == 'macos' && '--xcode_version_config=tools/bazel:github_actions_xcodes' || ''}} |
| continue-on-error: ${{matrix.os == 'windows'}} # https://github.com/bazelbuild/bazel/issues/18592 |
| - run: bazel test ... --verbose_failures --noshow_progress ${{matrix.os == 'macos' && '--xcode_version_config=tools/bazel:github_actions_xcodes' || ''}} |
| continue-on-error: ${{matrix.os == 'windows'}} # https://github.com/bazelbuild/bazel/issues/18592 |
| |
| minimal: |
| name: Minimal versions |
| needs: pre_ci |
| if: needs.pre_ci.outputs.continue |
| runs-on: ubuntu-latest |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/rust-toolchain@nightly |
| - run: cargo generate-lockfile -Z minimal-versions |
| - run: cargo check --locked --workspace |
| |
| doc: |
| name: Documentation |
| needs: pre_ci |
| if: needs.pre_ci.outputs.continue |
| runs-on: ubuntu-latest |
| timeout-minutes: 45 |
| env: |
| RUSTDOCFLAGS: -Dwarnings |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/rust-toolchain@nightly |
| with: |
| components: rust-src |
| - uses: dtolnay/install@cargo-docs-rs |
| - run: cargo docs-rs |
| - run: cargo docs-rs -p cxx-build |
| - run: cargo docs-rs -p cxx-gen |
| - run: cargo docs-rs -p cxxbridge-flags |
| - run: cargo docs-rs -p cxxbridge-macro |
| |
| clippy: |
| name: Clippy |
| runs-on: ubuntu-latest |
| if: github.event_name != 'pull_request' |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/rust-toolchain@nightly |
| with: |
| components: clippy, rust-src |
| - run: cargo clippy --workspace --tests --exclude demo -- -Dclippy::all -Dclippy::pedantic |
| - run: cargo clippy --manifest-path demo/Cargo.toml -- -Dclippy::all |
| |
| clang-tidy: |
| name: Clang Tidy |
| runs-on: ubuntu-latest |
| if: github.event_name != 'pull_request' |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - name: Install clang-tidy |
| run: sudo apt-get install clang-tidy-11 |
| - name: Run clang-tidy |
| run: clang-tidy-11 src/cxx.cc --warnings-as-errors=* |
| |
| outdated: |
| name: Outdated |
| runs-on: ubuntu-latest |
| if: github.event_name != 'pull_request' |
| timeout-minutes: 45 |
| steps: |
| - uses: actions/checkout@v4 |
| - uses: dtolnay/install@cargo-outdated |
| - run: cargo outdated --workspace --exit-code 1 |