name: Prepare Rust description: Prepare an environment to build or test rust packages inputs: targets: description: "JSON Array of targets to add to rustup" required: false default: '[]' rust-version: description: "Version of rust to install" required: true default: '1.75.0' runs: using: "composite" steps: - name: Install zig uses: https://github.com/goto-bus-stop/setup-zig@v2 with: version: 0.11.0 - name: Fetch rust cache id: cache uses: https://github.com/actions/cache/restore@v4 with: path: | ~/.cargo/bin ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git/db ~/.rustup target/ key: rust-${{ inputs.rust-version }}-${{ join(fromJSON(inputs.targets), '-') }}-${{ hashFiles('Cargo.toml') }}-${{ hashFiles('Cargo.lock')}} - name: Install rustup and rust if: steps.cache.outputs.cache-hit != 'true' uses: https://github.com/dtolnay/rust-toolchain@${{ inputs.rust-version }} with: components: clippy targets: ${{ join(fromJSON(inputs.targets), ',') }} - name: Install cargo-zigbuild if: steps.cache.outputs.cache-hit != 'true' run: cargo install cargo-zigbuild - name: Fetch dependencies if: steps.cache.outputs.cache-hit != 'true' run: cargo fetch - name: Export path if: steps.cache.outputs.cache-hit == 'true' run: | echo "${HOME}/.cargo/bin" >> "${GITHUB_PATH}" echo "${HOME}/.rustup/bin" >> "${GITHUB_PATH}" - name: Populate rust cache if: steps.cache.outputs.cache-hit != 'true' uses: https://github.com/actions/cache/save@v4 with: path: | ~/.cargo/bin ~/.cargo/registry/index ~/.cargo/registry/cache ~/.cargo/git/db ~/.rustup target/ key: ${{ steps.cache.outputs.cache-primary-key }}