mirror of
https://github.com/taiki-e/install-action.git
synced 2026-05-07 21:40:30 +00:00
Support whitespace separated list
This commit is contained in:
7
.github/workflows/ci.yml
vendored
7
.github/workflows/ci.yml
vendored
@@ -156,7 +156,12 @@ jobs:
|
|||||||
- uses: ./
|
- uses: ./
|
||||||
with:
|
with:
|
||||||
# NB: Update alias list in tools/publish.rs and case for aliases in main.sh.
|
# NB: Update alias list in tools/publish.rs and case for aliases in main.sh.
|
||||||
tool: nextest,taplo-cli,typos-cli,wasm-bindgen-cli,wasmtime-cli
|
tool: |
|
||||||
|
nextest
|
||||||
|
taplo-cli
|
||||||
|
typos-cli
|
||||||
|
wasm-bindgen-cli
|
||||||
|
wasmtime-cli
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
- name: Test bash
|
- name: Test bash
|
||||||
|
|||||||
@@ -22,7 +22,7 @@ GitHub Action for installing development tools (mainly from GitHub Releases).
|
|||||||
|
|
||||||
| Name | Required | Description | Type | Default |
|
| Name | Required | Description | Type | Default |
|
||||||
| ---- | :------: | ----------- | ---- | ------- |
|
| ---- | :------: | ----------- | ---- | ------- |
|
||||||
| tool | **✓** | Tools to install (comma-separated list) | String | |
|
| tool | **✓** | Tools to install (whitespace or comma separated list) | String | |
|
||||||
| checksum | | Whether to enable checksums | Boolean | `true` |
|
| checksum | | Whether to enable checksums | Boolean | `true` |
|
||||||
|
|
||||||
### Example workflow
|
### Example workflow
|
||||||
|
|||||||
18
main.sh
18
main.sh
@@ -29,6 +29,19 @@ warn() {
|
|||||||
info() {
|
info() {
|
||||||
printf >&2 'info: %s\n' "$*"
|
printf >&2 'info: %s\n' "$*"
|
||||||
}
|
}
|
||||||
|
normalize_comma_or_space_separated() {
|
||||||
|
# Normalize whitespace characters into space because it's hard to handle single input contains lines with POSIX sed alone.
|
||||||
|
local list="${1//[$'\r\n\t']/ }"
|
||||||
|
if [[ "${list}" == *","* ]]; then
|
||||||
|
# If a comma is contained, consider it is a comma-separated list.
|
||||||
|
# Drop leading and trailing whitespaces in each element.
|
||||||
|
sed -E 's/ *, */,/g; s/^.//' <<<",${list},"
|
||||||
|
else
|
||||||
|
# Otherwise, consider it is a whitespace-separated list.
|
||||||
|
# Convert whitespace characters into comma.
|
||||||
|
sed -E 's/ +/,/g; s/^.//' <<<" ${list} "
|
||||||
|
fi
|
||||||
|
}
|
||||||
_sudo() {
|
_sudo() {
|
||||||
if type -P sudo >/dev/null; then
|
if type -P sudo >/dev/null; then
|
||||||
sudo "$@"
|
sudo "$@"
|
||||||
@@ -440,9 +453,8 @@ tool="${INPUT_TOOL:-}"
|
|||||||
tools=()
|
tools=()
|
||||||
if [[ -n "${tool}" ]]; then
|
if [[ -n "${tool}" ]]; then
|
||||||
while read -rd,; do
|
while read -rd,; do
|
||||||
t="${REPLY# *}"
|
tools+=("${REPLY}")
|
||||||
tools+=("${t%* }")
|
done < <(normalize_comma_or_space_separated "${tool}")
|
||||||
done <<<"${tool},"
|
|
||||||
fi
|
fi
|
||||||
if [[ ${#tools[@]} -eq 0 ]]; then
|
if [[ ${#tools[@]} -eq 0 ]]; then
|
||||||
warn "no tool specified; this could be caused by a dependabot bug where @<tool_name> tags on this action are replaced by @<version> tags"
|
warn "no tool specified; this could be caused by a dependabot bug where @<tool_name> tags on this action are replaced by @<version> tags"
|
||||||
|
|||||||
@@ -206,7 +206,29 @@ IFS=$'\n'
|
|||||||
tools=($(LC_ALL=C sort -u <<<"${tools[*]}"))
|
tools=($(LC_ALL=C sort -u <<<"${tools[*]}"))
|
||||||
IFS=$'\n\t'
|
IFS=$'\n\t'
|
||||||
|
|
||||||
# TODO: inject random space before/after of tool name for testing https://github.com/taiki-e/install-action/issues/115.
|
comma_sep=$((RANDOM % 2))
|
||||||
IFS=','
|
list=''
|
||||||
printf 'tool=%s\n' "${tools[*]}"
|
for tool in "${tools[@]}"; do
|
||||||
IFS=$'\n\t'
|
if [[ -n "${list}" ]]; then
|
||||||
|
if [[ "${comma_sep}" == "1" ]]; then
|
||||||
|
list+=','
|
||||||
|
else
|
||||||
|
case $((RANDOM % 2)) in
|
||||||
|
0) list+=' ' ;;
|
||||||
|
1) list+=$'\t' ;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
case $((RANDOM % 3)) in
|
||||||
|
0) ;;
|
||||||
|
1) list+=' ' ;;
|
||||||
|
2) list+=$' \t ' ;;
|
||||||
|
esac
|
||||||
|
list+="${tool}"
|
||||||
|
case $((RANDOM % 3)) in
|
||||||
|
0) ;;
|
||||||
|
1) list+=' ' ;;
|
||||||
|
2) list+=$' \t ' ;;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
printf 'tool=%s\n' "${list}"
|
||||||
|
|||||||
Reference in New Issue
Block a user