name: Lint & Format (Rust) on: pull_request: jobs: lint-format: runs-on: alpine container: node:26-alpine steps: - name: Checkout uses: actions/checkout@v4 - name: Install tools run: | apk add --no-cache \ git \ cargo \ rust \ rustfmt \ rust-clippy - name: Format check continue-on-error: true run: | if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then for manifest in $(find . -name "Cargo.toml"); do cargo fmt --manifest-path "$manifest" --check && \ echo "$manifest: formatting OK" || \ echo "$manifest: needs formatting" done elif [ -n "$(find . -name "*.rs" -print -quit)" ]; then echo "Rust files found but no Cargo.toml" exit 1 else echo "No Rust project found" fi - name: Clippy run: | if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then status=0 for manifest in $(find . -name "Cargo.toml"); do cargo clippy --manifest-path "$manifest" --all-targets --all-features -- -D warnings && \ echo "$manifest: Clippy passed" || \ { echo "$manifest: Clippy failed"; status=1; } done exit $status elif [ -n "$(find . -name "*.rs" -print -quit)" ]; then echo "Rust files found but no Cargo.toml" exit 1 else echo "No Rust project found" fi