Files
install-action/action.yml
2026-04-04 12:14:05 +09:00

83 lines
3.3 KiB
YAML

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
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 (<https://github.com/actions/partner-runner-images/issues/169>); retrying..."
}
}
Write-Output "::error::installation failed due to bash startup failure (<https://github.com/actions/partner-runner-images/issues/169>); 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'