name: Rust Setup + Cache description: Install Rust toolchain and cache cargo/rustup dependencies for Gitea Actions author: eric inputs: toolchain: description: Rust toolchain to install (e.g., stable, 1.75.0, nightly) default: stable required: false outputs: cache-hit: description: "Whether a cache entry was found" value: ${{ steps.cache.outputs.cache-hit }} runs: using: composite steps: # Gitea Actions does not have Cargo.lock by default (cargo generates it on first build), # and hashFiles() globs don't work reliably here. Use shell hashing instead. - name: Compute cache key id: cache-key shell: bash run: | # Hash both files; if Cargo.lock doesn't exist yet, only Cargo.toml is hashed HASH=$( (cat Cargo.toml 2>/dev/null || true; cat Cargo.lock 2>/dev/null || true) | sha256sum | cut -d' ' -f1) echo "hash=$HASH" >> $GITHUB_OUTPUT echo "fingerprint=$HASH" >> $GITHUB_ENV - name: Lookup cache (debug) id: cache-lookup uses: https://gitea.com/actions/cache@v3 with: path: ~/.cargo/registry key: rust-linux-${{ steps.cache-key.outputs.hash }} lookup-only: true - name: Show lookup result shell: bash run: | echo "cache-hit (lookup): ${{ steps.cache-lookup.outputs.cache-hit }}" echo "key used: rust-linux-${{ steps.cache-key.outputs.hash }}" - name: Cache cargo + rustup id: cache uses: https://gitea.com/actions/cache@v3 with: path: | ~/.cargo/registry ~/.cargo/git ~/.rustup/toolchains ~/.rustup/settings.toml target key: rust-linux-${{ steps.cache-key.outputs.hash }} restore-keys: rust-linux- - name: Setup Rust shell: bash run: | # If toolchain was cached, rustup will skip download — install still runs for metadata curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | sh -s -- -y --default-toolchain ${{ inputs.toolchain }} # Add cargo bin to PATH for subsequent steps echo "$HOME/.cargo/bin" >> $GITHUB_PATH - name: Show cached sizes shell: bash run: | echo "=== ~/.cargo ===" && du -sh ~/.cargo 2>/dev/null || echo "(empty)" echo "=== ~/.rustup ===" && du -sh ~/.rustup 2>/dev/null || echo "(empty)" echo "=== target ===" && du -sh target 2>/dev/null || echo "(empty)"