fix(ci): resolve uv from BIN_DIR in install-ci-tools
ci / lint-compose (push) Successful in 14s
ci / lint-actionlint (push) Successful in 10s
ci / lint-shellcheck (push) Successful in 11s
ci / lint-prettier (push) Successful in 17s
ci / lint-ruff (push) Successful in 9s
ci / lint-yaml (push) Successful in 12s
ci / lint-dockerfiles (push) Successful in 9s
ci / validate (push) Successful in 9s
renovate-ci / validate-renovate (push) Successful in 1m34s
ci / build (push) Failing after 3m3s
ci / lint-compose (push) Successful in 14s
ci / lint-actionlint (push) Successful in 10s
ci / lint-shellcheck (push) Successful in 11s
ci / lint-prettier (push) Successful in 17s
ci / lint-ruff (push) Successful in 9s
ci / lint-yaml (push) Successful in 12s
ci / lint-dockerfiles (push) Successful in 9s
ci / validate (push) Successful in 9s
renovate-ci / validate-renovate (push) Successful in 1m34s
ci / build (push) Failing after 3m3s
Callers prepend BIN_DIR to PATH only after the script exits, so the bare uv invocation in install_uv_tool died with 127 on clean runners. Export BIN_DIR to PATH inside the script and invoke the just-installed binary by absolute path.
This commit is contained in:
1 parent
d0872bc918
commit
5dcad7eb38
1 file changed
+25
-4
@@ -16,6 +16,10 @@ here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||||||
TOOLS_DIR="${TOOLS_DIR:-${RUNNER_TEMP:-/tmp}/homelab-tools}"
|
TOOLS_DIR="${TOOLS_DIR:-${RUNNER_TEMP:-/tmp}/homelab-tools}"
|
||||||
BIN_DIR="$TOOLS_DIR/bin"
|
BIN_DIR="$TOOLS_DIR/bin"
|
||||||
mkdir -p "$BIN_DIR"
|
mkdir -p "$BIN_DIR"
|
||||||
|
# The just-installed tools must resolve inside this script too: callers only
|
||||||
|
# prepend BIN_DIR to PATH after the script exits, so a bare `uv` below would
|
||||||
|
# miss the binary install_uv just placed (exit 127 on a clean runner).
|
||||||
|
export PATH="$BIN_DIR:$PATH"
|
||||||
|
|
||||||
arch="$(uname -m)"
|
arch="$(uname -m)"
|
||||||
# Upstream projects disagree on arch spelling: kubeconform and actionlint use
|
# Upstream projects disagree on arch spelling: kubeconform and actionlint use
|
||||||
@@ -53,14 +57,31 @@ fetch() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# resolve <command>
|
||||||
|
# Absolute path to use for invoking a tool: the copy in BIN_DIR when present,
|
||||||
|
# otherwise the name for PATH lookup. Every version check and every in-script
|
||||||
|
# invocation goes through this, so a tool missing from both places reads as
|
||||||
|
# "not installed" instead of dying with 127 under `set -e`.
|
||||||
|
resolve() {
|
||||||
|
if [ -x "$BIN_DIR/$1" ]; then
|
||||||
|
printf '%s' "$BIN_DIR/$1"
|
||||||
|
else
|
||||||
|
printf '%s' "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# installed_version <command>
|
# installed_version <command>
|
||||||
# Prints the version of an already-installed tool, or nothing. Each tool spells
|
# Prints the version of an already-installed tool, or nothing. Each tool spells
|
||||||
# its version flag differently, hence the case.
|
# its version flag differently, hence the case.
|
||||||
installed_version() {
|
installed_version() {
|
||||||
local out
|
local bin out
|
||||||
|
bin="$(resolve "$1")"
|
||||||
|
if ! command -v "$bin" >/dev/null 2>&1; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
case "$1" in
|
case "$1" in
|
||||||
kubeconform) out="$("$1" -v 2>/dev/null | head -1 || true)" ;;
|
kubeconform) out="$("$bin" -v 2>/dev/null | head -1 || true)" ;;
|
||||||
*) out="$("$1" --version 2>/dev/null | head -1 || true)" ;;
|
*) out="$("$bin" --version 2>/dev/null | head -1 || true)" ;;
|
||||||
esac
|
esac
|
||||||
printf '%s' "$out"
|
printf '%s' "$out"
|
||||||
}
|
}
|
||||||
@@ -130,7 +151,7 @@ install_uv_tool() {
|
|||||||
return 0
|
return 0
|
||||||
fi
|
fi
|
||||||
install_uv
|
install_uv
|
||||||
UV_TOOL_BIN_DIR="$BIN_DIR" uv tool install --force "$1==$2" >/dev/null
|
UV_TOOL_BIN_DIR="$BIN_DIR" "$BIN_DIR/uv" tool install --force "$1==$2" >/dev/null
|
||||||
}
|
}
|
||||||
|
|
||||||
install_ruff() {
|
install_ruff() {
|
||||||
|
|||||||
Reference in new issue
Block a user