From a88d572e85247a1b62ec4429b1f463979cb26ee3 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 | 71 ++++++++++++++++++++++----------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/.gitea/workflows/rust.yml b/.gitea/workflows/rust.yml index 4c84f7e..98165d5 100644 --- a/.gitea/workflows/rust.yml +++ b/.gitea/workflows/rust.yml @@ -6,11 +6,17 @@ on: jobs: clippy & fmt: runs-on: alpine - container: rust:alpine + container: rust:alpine # rustup toolchain, clippy and rustfmt included env: CARGO_HOME: ${{ github.workspace }}/.cargo steps: + # actions/checkout and actions/cache are node actions, and the runner + # needs node inside the container before the first JS step runs. + - name: Install node for actions + run: | + apk add --no-cache nodejs git + - name: Checkout uses: actions/checkout@v4 @@ -25,41 +31,46 @@ jobs: restore-keys: | rust-${{ runner.os }}-cargo- - - name: Install tools - run: | - apk add --no-cache git - rustup component add clippy 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 + if (cd "$(dirname "$manifest")" && cargo clippy --all-targets --locked -- -D warnings); then + echo "$manifest: Clippy passed" + else + echo "$manifest: Clippy failed" + status=1 + fi + 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 + if (cd "$(dirname "$manifest")" && cargo fmt --check); then + echo "$manifest: formatting OK" + else + echo "$manifest: needs formatting" + status=1 + fi + done + exit $status