chore(main): release 2.127.28 #2832
Workflow file for this run
This file contains hidden or 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: | |
| branches: [main] | |
| pull_request: | |
| concurrency: | |
| group: ci-${{ github.ref }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUSTFLAGS: -Dwarnings | |
| # rust-toolchain.toml pins the exact Rust version (1.96.0) and includes | |
| # rustfmt, clippy, and the wasm32 target. Rustup auto-detects it, so most | |
| # jobs don't need dtolnay/rust-toolchain. | |
| jobs: | |
| fmt: | |
| name: Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - run: cargo fmt --all -- --check | |
| clippy: | |
| name: Clippy | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - run: cargo clippy --all-targets --all-features -- -D warnings | |
| test: | |
| name: Test | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 20 | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - uses: taiki-e/install-action@43aecc8d72668fbcfe75c31400bc4f890f1c5853 # v2.62.30 | |
| with: | |
| tool: nextest | |
| - run: cargo nextest run --workspace | |
| # nextest doesn't run doc tests, so run them separately | |
| - run: cargo test --workspace --doc | |
| # Complexity-regression guards: deterministic work-counter tests that fail | |
| # if a boolean hot path regresses to O(N²) (issue #987). Gated behind the | |
| # `perf-counters` feature, so they need an explicit run. | |
| - name: Complexity guards | |
| run: cargo nextest run -p brepkit-operations --features perf-counters -E 'test(scaling_)' | |
| coverage: | |
| name: Coverage | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - uses: taiki-e/install-action@43aecc8d72668fbcfe75c31400bc4f890f1c5853 # v2.62.30 | |
| with: | |
| tool: cargo-llvm-cov | |
| - name: Generate coverage | |
| run: | | |
| cargo llvm-cov --workspace --no-report | |
| cargo llvm-cov report --lcov --output-path lcov.info | |
| COVERAGE=$(cargo llvm-cov report --json | jq -r '.data[0].totals.lines.percent // empty') | |
| if [ -z "$COVERAGE" ]; then | |
| echo "::error::Failed to extract coverage percentage from report" | |
| exit 1 | |
| fi | |
| echo "Line coverage: ${COVERAGE}%" | |
| if (( $(echo "$COVERAGE < 60" | bc -l) )); then | |
| echo "::error::Coverage ${COVERAGE}% is below the 60% threshold" | |
| exit 1 | |
| fi | |
| - uses: codecov/codecov-action@fb8b3582c8e4def4969c97caa2f19720cb33a72f # v7.0.0 | |
| if: always() | |
| with: | |
| files: lcov.info | |
| msrv: | |
| name: MSRV (1.88) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| # Override rust-toolchain.toml to test the declared minimum version. | |
| # Action SHA stays pinned; the Rust version is set explicitly below. | |
| - uses: dtolnay/rust-toolchain@c93f4f9c67595668add93d3d6895795ce52d8c2d # 1.85.0 | |
| with: | |
| toolchain: "1.88.0" | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| key: msrv | |
| - run: cargo check --workspace --all-features | |
| wasm: | |
| name: WASM Build & Validate | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - uses: taiki-e/install-action@43aecc8d72668fbcfe75c31400bc4f890f1c5853 # v2.62.30 | |
| with: | |
| tool: wasm-pack | |
| - name: Build and validate WASM | |
| run: cargo xtask wasm-build --skip-opt | |
| wasm-size: | |
| name: WASM Size Report | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: write | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - name: Build WASM (PR) | |
| run: | | |
| cargo build -p brepkit-wasm --target wasm32-unknown-unknown --release | |
| PR_SIZE=$(stat --printf="%s" target/wasm32-unknown-unknown/release/brepkit_wasm.wasm) | |
| echo "PR_SIZE=$PR_SIZE" >> "$GITHUB_ENV" | |
| echo "PR_SIZE_MB=$(echo "scale=2; $PR_SIZE / 1048576" | bc)" >> "$GITHUB_ENV" | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| with: | |
| ref: ${{ github.base_ref }} | |
| clean: false | |
| path: base | |
| - name: Build WASM (base) | |
| run: | | |
| cd base | |
| cargo build -p brepkit-wasm --target wasm32-unknown-unknown --release | |
| BASE_SIZE=$(stat --printf="%s" target/wasm32-unknown-unknown/release/brepkit_wasm.wasm) | |
| echo "BASE_SIZE=$BASE_SIZE" >> "$GITHUB_ENV" | |
| echo "BASE_SIZE_MB=$(echo "scale=2; $BASE_SIZE / 1048576" | bc)" >> "$GITHUB_ENV" | |
| - name: Compute delta | |
| run: | | |
| DELTA=$(( PR_SIZE - BASE_SIZE )) | |
| if [ $BASE_SIZE -gt 0 ]; then | |
| PCT=$(echo "scale=1; $DELTA * 100 / $BASE_SIZE" | bc) | |
| else | |
| PCT="N/A" | |
| fi | |
| DELTA_KB=$(echo "scale=1; $DELTA / 1024" | bc) | |
| if [ $DELTA -gt 0 ]; then | |
| EMOJI="⚠️" | |
| SIGN="+" | |
| elif [ $DELTA -lt 0 ]; then | |
| EMOJI="✅" | |
| SIGN="" | |
| else | |
| EMOJI="✅" | |
| SIGN="" | |
| fi | |
| { | |
| echo "COMMENT_BODY<<WASM_EOF" | |
| echo "## WASM Binary Size" | |
| echo "" | |
| echo "| File | main | PR | Delta |" | |
| echo "|------|------|----|-------|" | |
| echo "| \`brepkit_wasm.wasm\` | ${BASE_SIZE_MB} MB | ${PR_SIZE_MB} MB | ${SIGN}${DELTA_KB} KB (${SIGN}${PCT}%) |" | |
| echo "" | |
| if [ $DELTA -gt 51200 ]; then | |
| echo "${EMOJI} Size increased by >50 KB. Please verify this is expected." | |
| elif [ $DELTA -gt 0 ]; then | |
| echo "${EMOJI} Size increased slightly." | |
| elif [ $DELTA -eq 0 ]; then | |
| echo "${EMOJI} No size change." | |
| else | |
| echo "${EMOJI} Size decreased — nice!" | |
| fi | |
| echo "WASM_EOF" | |
| } >> "$GITHUB_ENV" | |
| - name: Find existing comment | |
| uses: peter-evans/find-comment@b30e6a3c0ed37e7c023ccd3f1db5c6c0b0c23aad # v4.0.0 | |
| id: fc | |
| with: | |
| issue-number: ${{ github.event.pull_request.number }} | |
| comment-author: github-actions[bot] | |
| body-includes: "## WASM Binary Size" | |
| - name: Post or update comment | |
| uses: peter-evans/create-or-update-comment@e8674b075228eee787fea43ef493e45ece1004c9 # v5.0.0 | |
| with: | |
| comment-id: ${{ steps.fc.outputs.comment-id }} | |
| issue-number: ${{ github.event.pull_request.number }} | |
| body: ${{ env.COMMENT_BODY }} | |
| edit-mode: replace | |
| boundaries: | |
| name: Layer Boundaries | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - run: ./scripts/check-boundaries.sh | |
| deny: | |
| name: Cargo Deny | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: EmbarkStudios/cargo-deny-action@3c6349835b2b7b196a839186cb8b78e02f7b5f25 # v2.1.1 | |
| audit: | |
| name: Security Audit | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| # Cargo.lock is gitignored (library crate), generate it for audit | |
| - run: cargo generate-lockfile | |
| - uses: rustsec/audit-check@69366f33c96575abad1ee0dba8212993eecbe998 # v2.0.0 | |
| with: | |
| token: ${{ github.token }} | |
| docs: | |
| name: Rustdoc | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - uses: Swatinem/rust-cache@e18b497796c12c097a38f9edb9d0641fb99eee32 # v2 | |
| with: | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - run: cargo doc --no-deps --all-features | |
| env: | |
| RUSTDOCFLAGS: -D warnings | |
| machete: | |
| name: Unused Dependencies | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - name: Install cargo-machete | |
| run: cargo install cargo-machete --version 0.9.1 --locked | |
| - run: cargo machete | |
| taplo: | |
| name: TOML Format | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 | |
| - name: Install taplo | |
| run: | | |
| mkdir -p "$HOME/.local/bin" | |
| curl -fsSL https://github.com/tamasfe/taplo/releases/download/0.9.3/taplo-full-linux-x86_64.gz \ | |
| | gunzip > "$HOME/.local/bin/taplo" | |
| chmod +x "$HOME/.local/bin/taplo" | |
| echo "$HOME/.local/bin" >> "$GITHUB_PATH" | |
| - run: taplo fmt --check | |
| ci-pass: | |
| name: CI Pass | |
| if: always() | |
| needs: [fmt, clippy, test, coverage, msrv, wasm, boundaries, deny, audit, docs, machete, taplo] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check all jobs | |
| env: | |
| NEEDS: ${{ toJSON(needs) }} | |
| run: | | |
| echo "$NEEDS" | jq -e 'to_entries | all(.value.result == "success" or .value.result == "skipped")' > /dev/null |