From 4ae0c20b48f9c9aaf57b176accd17564c7a4dddc Mon Sep 17 00:00:00 2001 From: AramJonghu Date: Fri, 30 Oct 2026 23:15:49 +0100 Subject: [PATCH] fix(ci): format properly checks written code only + minor optimisations --- .gitea/workflows/rust.yml | 57 ++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 27 deletions(-) diff --git a/.gitea/workflows/rust.yml b/.gitea/workflows/rust.yml index 4c84f7e..268d5fa 100644 --- a/.gitea/workflows/rust.yml +++ b/.gitea/workflows/rust.yml @@ -6,7 +6,7 @@ on: jobs: clippy & fmt: runs-on: alpine - container: rust:alpine + container: node:26-alpine # keep node image for checkout to work env: CARGO_HOME: ${{ github.workspace }}/.cargo @@ -27,39 +27,42 @@ jobs: - name: Install tools run: | - apk add --no-cache git - rustup component add clippy rustfmt + apk add --no-cache git cargo rust rust-clippy rustup rustfmt - name: Clippy (with compile check) 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" -- -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 + manifests=$(find . \( -name .cargo -o -name .git -o -name target \) -prune -o -name Cargo.toml -print) + if [ -z "$manifests" ]; then + if [ -n "$(find . \( -name .cargo -o -name target \) -prune -o -name '*.rs' -print -quit)" ]; then + echo "Rust files found but no Cargo.toml" + exit 1 + fi echo "No Rust project found" + exit 0 fi + status=0 + for manifest in $manifests; do + cargo clippy --manifest-path "$manifest" --all-targets --locked -- -D warnings && \ + echo "$manifest: Clippy passed" || \ + { echo "$manifest: Clippy failed"; status=1; } + done + exit $status - name: Format check run: | - if [ -n "$(find . -name "Cargo.toml" -print -quit)" ]; then - status=0 - for manifest in $(find . -name "Cargo.toml"); do - cargo fmt --manifest-path "$manifest" --check && \ - echo "$manifest: formatting OK" || \ - { echo "$manifest: needs formatting"; status=1; } - done - exit $status - elif [ -n "$(find . -name "*.rs" -print -quit)" ]; then - echo "Rust files found but no Cargo.toml" - exit 1 - else + manifests=$(find . \( -name .cargo -o -name .git -o -name target \) -prune -o -name Cargo.toml -print) + if [ -z "$manifests" ]; then + if [ -n "$(find . \( -name .cargo -o -name target \) -prune -o -name '*.rs' -print -quit)" ]; then + echo "Rust files found but no Cargo.toml" + exit 1 + fi echo "No Rust project found" + exit 0 fi + status=0 + for manifest in $manifests; do + rustfmt --manifest-path "$manifest" --check && \ + echo "$manifest: formatting OK" || \ + { echo "$manifest: needs formatting"; status=1; } + done + exit $status