OneLauncher-Cracked/.github/actions/install-cargo-tool/action.yml
2026-08-03 20:00:38 +07:00

43 lines
1.7 KiB
YAML

name: Install cargo tool
description: >
Install a cargo binary from a prebuilt release instead of compiling it from
source, and skip the work entirely when the Rust cache already restored it.
inputs:
tool:
description: Crate name providing the binary (e.g. cargo-packager)
required: true
version:
description: Exact version to install
required: true
runs:
using: composite
steps:
# Swatinem/rust-cache restores $CARGO_HOME/bin, so on a cache hit the tool is
# already here and `cargo install` would otherwise re-resolve it every run.
- name: Check for an already-installed ${{ inputs.tool }}
id: check
shell: bash
run: |
if cargo install --list | grep -qF "${{ inputs.tool }} v${{ inputs.version }}:"; then
echo "Found ${{ inputs.tool }} v${{ inputs.version }} in \$CARGO_HOME/bin"
echo "installed=true" >> "$GITHUB_OUTPUT"
else
echo "installed=false" >> "$GITHUB_OUTPUT"
fi
- name: Setup cargo-binstall
if: steps.check.outputs.installed == 'false'
uses: cargo-bins/cargo-binstall@e00d2c94cc0067b77737821097a62d91c0301baa # v1.21.1
- name: Install ${{ inputs.tool }}
if: steps.check.outputs.installed == 'false'
shell: bash
env:
TOOL: ${{ inputs.tool }}
VERSION: ${{ inputs.version }}
run: |
# Prebuilt download takes seconds; building cargo-packager from source
# takes minutes on every leg of the matrix. Fall back to a source build
# so a missing prebuilt artifact can never break a release.
cargo binstall --no-confirm "${TOOL}@${VERSION}" \
|| cargo install "${TOOL}" --version "${VERSION}" --locked