chore: remove FUNDING.yml, use org-level #206
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: | |
| branches: [main] | |
| merge_group: | |
| env: | |
| CARGO_TERM_COLOR: always | |
| RUST_BACKTRACE: 1 | |
| RUSTFLAGS: -D warnings | |
| CARGO_INCREMENTAL: 0 | |
| CARGO_NET_RETRY: 10 | |
| RUSTUP_MAX_RETRIES: 10 | |
| CARGO_REGISTRIES_CRATES_IO_PROTOCOL: sparse | |
| CARGO_PROFILE_DEV_DEBUG: 0 | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| changed-files: | |
| name: Detect changed crates | |
| runs-on: ubuntu-latest | |
| permissions: | |
| pull-requests: read | |
| outputs: | |
| crates_changed: ${{ steps.list-changed-crates.outputs.crates_changed }} | |
| any_crate_changed: ${{ steps.list-changed-crates.outputs.any_crate_changed }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: Get changed files | |
| id: changed-files | |
| uses: tj-actions/changed-files@v45 | |
| with: | |
| files: | | |
| Cargo.toml | |
| Cargo.lock | |
| crates/** | |
| files_ignore: | | |
| **/*.md | |
| **/*.txt | |
| **/benches/** | |
| **/examples/** | |
| - name: List changed crates | |
| id: list-changed-crates | |
| env: | |
| ALL_CHANGED_FILES: ${{ steps.changed-files.outputs.all_changed_files }} | |
| run: | | |
| echo "Changed files: $ALL_CHANGED_FILES" | |
| if [ -z "$ALL_CHANGED_FILES" ]; then | |
| echo "No files changed, will test all crates" | |
| echo "any_crate_changed=true" >> "$GITHUB_OUTPUT" | |
| echo "crates_changed=" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| if echo "$ALL_CHANGED_FILES" | grep -E "^Cargo\.(toml|lock)$"; then | |
| echo "Root Cargo files changed, will test all crates" | |
| echo "any_crate_changed=true" >> "$GITHUB_OUTPUT" | |
| echo "crates_changed=" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| crates_changed="" | |
| if [ -d "crates" ]; then | |
| for crate_dir in crates/*/; do | |
| crate=$(basename "$crate_dir") | |
| if echo "$ALL_CHANGED_FILES" | grep -E "crates/$crate/"; then | |
| crates_changed="$crates_changed $crate" | |
| fi | |
| done | |
| fi | |
| crates_changed=$(echo "$crates_changed" | xargs) | |
| if [ -n "$crates_changed" ]; then | |
| echo "Crates changed: $crates_changed" | |
| echo "any_crate_changed=true" >> "$GITHUB_OUTPUT" | |
| echo "crates_changed=$crates_changed" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "No crate changes detected" | |
| echo "any_crate_changed=false" >> "$GITHUB_OUTPUT" | |
| echo "crates_changed=" >> "$GITHUB_OUTPUT" | |
| fi | |
| quick-checks: | |
| name: Quick Checks | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain with formatting and linting components | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: 1.92 | |
| components: rustfmt, clippy | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "quick-checks-${{ hashFiles('**/Cargo.lock') }}" | |
| cache-on-failure: true | |
| cache-all-crates: true | |
| - name: Check formatting | |
| run: cargo fmt --all -- --check | |
| - name: Check compilation | |
| run: cargo check --workspace --all-targets | |
| - name: Clippy | |
| run: cargo clippy --workspace --all-targets | |
| deny: | |
| name: Cargo Deny | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Check dependencies | |
| uses: EmbarkStudios/cargo-deny-action@v2 | |
| with: | |
| command: check | |
| rust-version: "1.92" | |
| test: | |
| name: Test (${{ matrix.rust }} on ${{ matrix.os }}) | |
| needs: [quick-checks, changed-files] | |
| if: needs.changed-files.outputs.any_crate_changed == 'true' | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - os: ubuntu-latest | |
| rust: 1.92 | |
| - os: ubuntu-latest | |
| rust: stable | |
| runs-on: ${{ matrix.os }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain (${{ matrix.rust }}) | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: ${{ matrix.rust }} | |
| - name: Install cargo-nextest | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: cargo-nextest | |
| - name: Cache Rust dependencies for ${{ matrix.os }} | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "tests-${{ matrix.os }}-${{ matrix.rust }}-${{ hashFiles('**/Cargo.lock') }}" | |
| cache-on-failure: true | |
| cache-all-crates: true | |
| save-if: ${{ github.ref == 'refs/heads/main' }} | |
| - name: Determine test scope | |
| id: test-scope | |
| env: | |
| CRATES_CHANGED: ${{ needs.changed-files.outputs.crates_changed }} | |
| run: | | |
| if [ -z "$CRATES_CHANGED" ]; then | |
| echo "Testing all crates (full workspace test)" | |
| echo "test_args=--workspace" >> "$GITHUB_OUTPUT" | |
| else | |
| echo "Testing only changed crates: $CRATES_CHANGED" | |
| args="" | |
| for crate in $CRATES_CHANGED; do | |
| args="$args -p $crate" | |
| done | |
| echo "test_args=$args" >> "$GITHUB_OUTPUT" | |
| fi | |
| - name: Test default features (changed crates) | |
| run: cargo nextest run --profile ci ${{ steps.test-scope.outputs.test_args }} | |
| - name: Test no default features (changed crates) | |
| run: cargo nextest run --profile ci --no-default-features ${{ steps.test-scope.outputs.test_args }} | |
| wasm: | |
| name: WASM Compilation | |
| runs-on: ubuntu-latest | |
| if: vars.WASM_CRATES != '[]' | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain with WASM target | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: 1.92 | |
| targets: wasm32-unknown-unknown | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "wasm-${{ hashFiles('**/Cargo.lock') }}" | |
| cache-on-failure: true | |
| cache-all-crates: true | |
| - name: Check WASM compilation | |
| env: | |
| WASM_CRATES: ${{ vars.WASM_CRATES }} | |
| run: | | |
| if [ -n "$WASM_CRATES" ]; then | |
| for crate in $(echo "$WASM_CRATES" | jq -r '.[]'); do | |
| echo "Checking $crate for WASM..." | |
| cargo check --target wasm32-unknown-unknown -p "$crate" | |
| done | |
| fi | |
| docs: | |
| name: Documentation | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust toolchain for documentation | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: 1.92 | |
| - name: Cache documentation dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "docs-${{ hashFiles('**/Cargo.lock') }}" | |
| cache-on-failure: true | |
| cache-all-crates: true | |
| - name: Build documentation | |
| run: cargo doc --workspace --no-deps | |
| env: | |
| RUSTDOCFLAGS: -D warnings | |
| - name: Check for broken links | |
| run: cargo doc --workspace --no-deps --document-private-items | |
| coverage: | |
| name: Code Coverage | |
| runs-on: ubuntu-latest | |
| continue-on-error: true | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Install Rust stable toolchain with LLVM tools | |
| uses: dtolnay/rust-toolchain@v1 | |
| with: | |
| toolchain: stable | |
| components: llvm-tools | |
| - name: Cache coverage dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| shared-key: "coverage-${{ hashFiles('**/Cargo.lock') }}" | |
| cache-on-failure: true | |
| cache-all-crates: true | |
| - name: Install cargo-llvm-cov for coverage collection | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: cargo-llvm-cov | |
| - name: Install cargo-nextest for faster coverage collection | |
| uses: taiki-e/install-action@v2 | |
| with: | |
| tool: cargo-nextest | |
| - name: Collect coverage | |
| run: cargo llvm-cov nextest --workspace --lcov --output-path lcov.info | |
| - name: Upload coverage reports to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: lcov.info | |
| fail_ci_if_error: false | |
| token: ${{ secrets.CODECOV_TOKEN }} | |
| ci-success: | |
| name: CI Success | |
| if: always() | |
| needs: [quick-checks, deny, test, docs, wasm, coverage, changed-files] | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Check all jobs | |
| run: | | |
| if [[ "${{ needs.changed-files.outputs.any_crate_changed }}" == "false" ]]; then | |
| echo "No crate changes detected, skipping test job check" | |
| if [[ "${{ needs.quick-checks.result }}" == "failure" || "${{ needs.deny.result }}" == "failure" || "${{ needs.docs.result }}" == "failure" ]]; then | |
| echo "Quick checks, deny, or docs failed" | |
| exit 1 | |
| fi | |
| else | |
| # Check critical jobs (wasm and coverage are optional) | |
| if [[ "${{ needs.quick-checks.result }}" == "failure" || "${{ needs.deny.result }}" == "failure" || "${{ needs.test.result }}" == "failure" || "${{ needs.docs.result }}" == "failure" ]]; then | |
| echo "Critical job failed" | |
| exit 1 | |
| fi | |
| fi | |
| echo "All required jobs succeeded" |