CI #454
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: 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}}-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
rust: [nightly, beta, stable, 1.67.0, 1.70.0, 1.74.0] | |
os: [ubuntu] | |
include: | |
- 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 != 'ubuntu' && 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.67.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}} | |
- uses: actions/upload-artifact@v4 | |
if: matrix.os == 'ubuntu' && matrix.rust == 'nightly' && always() | |
with: | |
name: Cargo.lock | |
path: Cargo.lock | |
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/rust-toolchain@stable | |
- uses: dtolnay/install@cargo-outdated | |
- run: cargo outdated --workspace --exit-code 1 |