diff --git a/.gitea/workflows/rust.yml b/.gitea/workflows/rust.yml index 4c84f7e..9e840b4 100644 --- a/.gitea/workflows/rust.yml +++ b/.gitea/workflows/rust.yml @@ -11,6 +11,16 @@ jobs: CARGO_HOME: ${{ github.workspace }}/.cargo steps: + - name: Install node for actions + run: | + apk add --no-cache nodejs git + + - name: Install rust components + run: | + rustup component add clippy rustfmt + cargo clippy --version + rustfmt --version + - name: Checkout uses: actions/checkout@v4 @@ -25,41 +35,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