name: Continuous integration on: [push, pull_request, merge_group] env: RUSTFLAGS: "-Dwarnings" RUSTDOCFLAGS: "-Dwarnings" TYPST_TESTS_EXTENDED: true jobs: # This allows us to have one branch protection rule for the full test matrix. # See: https://github.com/orgs/community/discussions/4324 tests: name: Tests runs-on: ubuntu-latest needs: [test-matrix] if: always() steps: - name: Tests successful if: ${{ !(contains(needs.*.result, 'failure')) }} run: exit 0 - name: Tests failing if: ${{ contains(needs.*.result, 'failure') }} run: exit 1 test-matrix: name: Tests strategy: matrix: os: [ubuntu-latest, windows-latest] runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.82.0 - uses: Swatinem/rust-cache@v2 - run: cargo test --workspace --no-run - run: cargo test --workspace --no-fail-fast - name: Upload rendered test output if: failure() uses: actions/upload-artifact@v4 with: name: tests-rendered-${{ matrix.os }} path: tests/store/render/** retention-days: 3 - name: Update test artifacts if: failure() run: | cargo test --workspace --test tests -- --update echo 'updated_artifacts=1' >> "$GITHUB_ENV" - name: Upload updated reference output (for use if the test changes are desired) if: failure() && env.updated_artifacts uses: actions/upload-artifact@v4 with: name: tests-updated-${{ matrix.os }} path: tests/ref/** retention-days: 3 checks: name: Check clippy, formatting, and documentation runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.82.0 with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 - run: cargo clippy --workspace --all-targets --all-features - run: cargo fmt --check --all - run: cargo doc --workspace --no-deps min-version: name: Check minimum Rust version runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@1.80.0 - uses: Swatinem/rust-cache@v2 - run: cargo check --workspace fuzz: name: Check fuzzers runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@master with: toolchain: nightly-2024-10-29 - uses: Swatinem/rust-cache@v2 - run: cargo install --locked cargo-fuzz@0.12.0 - run: cd tests/fuzz && cargo fuzz build --dev