Skip to content

fix(m2): use USE_TEXTURE_COMBINERS flag for texture_combiner_combos #217

fix(m2): use USE_TEXTURE_COMBINERS flag for texture_combiner_combos

fix(m2): use USE_TEXTURE_COMBINERS flag for texture_combiner_combos #217

Workflow file for this run

---
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/**
src/**
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
if echo "$ALL_CHANGED_FILES" | grep -E "^src/"; then
echo "Source 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 --document-private-items
env:
RUSTDOCFLAGS: -D warnings
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"