name: Install development tools description: GitHub Action for installing development tools inputs: tool: description: Tools to install (whitespace or comma separated list) required: true # default: #publish:tool checksum: description: Whether to enable checksums (strongly discouraged to disable) required: false default: 'true' fallback: description: Whether to use fallback (none, cargo-binstall, cargo-install) required: false default: 'cargo-binstall' # Note: # - inputs.* should be manually mapped to INPUT_* due to https://github.com/actions/runner/issues/665 # - Use GITHUB_*/RUNNER_* instead of github.*/runner.* due to https://github.com/actions/runner/issues/2185 runs: using: composite steps: - run: | set -eu if ! command -v bash >/dev/null; then if grep -Eq '^ID=alpine' /etc/os-release; then printf '::group::Install packages required for install-action (bash)\n' # NB: sync with apk_install in main.sh if command -v sudo >/dev/null; then sudo apk --no-cache add bash elif command -v doas >/dev/null; then doas apk --no-cache add bash else apk --no-cache add bash fi printf '::endgroup::\n' else printf '::error::install-action requires bash\n' exit 1 fi fi bash --noprofile --norc "${GITHUB_ACTION_PATH:?}/main.sh" shell: sh env: # NB: Sync with Windows case. INPUT_TOOL: ${{ inputs.tool }} INPUT_CHECKSUM: ${{ inputs.checksum }} INPUT_FALLBACK: ${{ inputs.fallback }} DEFAULT_GITHUB_TOKEN: ${{ github.token }} ACTION_USER_AGENT: ${{ github.action_repository }} (${{ github.action_ref }}) if: runner.os != 'Windows' # Use pwsh and retry on bash startup failure to work around windows-11-arm runner bug: # https://github.com/actions/partner-runner-images/issues/169 - run: | Set-StrictMode -Version Latest for ($i=1; $i -le 10; $i++) { $prev_err_action = $ErrorActionPreference $ErrorActionPreference = "Continue" & bash --noprofile --norc "$env:GITHUB_ACTION_PATH/main.sh" $code = $LASTEXITCODE $ErrorActionPreference = "$prev_err_action" if (Test-Path "$env:USERPROFILE\.install-action\init") { # If bash started successfully, main.sh creates init file. Remove-Item "$env:USERPROFILE\.install-action\init" -Force exit $code } if ($i -lt 10) { Write-Output "::warning::installation failed due to bash startup failure (); retrying..." } } Write-Output "::error::installation failed due to bash startup failure (); this maybe resolved by re-running job" exit 1 shell: pwsh env: # NB: Sync with non-Windows case. INPUT_TOOL: ${{ inputs.tool }} INPUT_CHECKSUM: ${{ inputs.checksum }} INPUT_FALLBACK: ${{ inputs.fallback }} DEFAULT_GITHUB_TOKEN: ${{ github.token }} ACTION_USER_AGENT: ${{ github.action_repository }} (${{ github.action_ref }}) if: runner.os == 'Windows'