Add check-versions.sh to compare pinned versions against latest releases
Run before tagging a release to see what tools have newer versions. Reports only — does not modify files. Human decides what to bump.
This commit is contained in:
Executable
+66
@@ -0,0 +1,66 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# check-versions.sh — Compare pinned versions in Dockerfile against latest releases
|
||||||
|
# Run before tagging a release to see what can be bumped.
|
||||||
|
set -euo pipefail
|
||||||
|
|
||||||
|
BOLD="\033[1m"; DIM="\033[2m"; GREEN="\033[32m"; YELLOW="\033[33m"; RESET="\033[0m"
|
||||||
|
|
||||||
|
DOCKERFILE="${1:-Dockerfile}"
|
||||||
|
|
||||||
|
if [[ ! -f "$DOCKERFILE" ]]; then
|
||||||
|
echo "Usage: $0 [Dockerfile]"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
get_pinned() {
|
||||||
|
grep "^ARG $1=" "$DOCKERFILE" | head -1 | cut -d= -f2
|
||||||
|
}
|
||||||
|
|
||||||
|
get_latest_github() {
|
||||||
|
local repo="$1"
|
||||||
|
local tag
|
||||||
|
tag=$(curl -s "https://api.github.com/repos/${repo}/releases/latest" | jq -r '.tag_name // empty')
|
||||||
|
# Strip leading 'v' if present
|
||||||
|
echo "${tag#v}"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_latest_go() {
|
||||||
|
curl -s "https://go.dev/dl/?mode=json" | jq -r '.[0].version' | sed 's/^go//'
|
||||||
|
}
|
||||||
|
|
||||||
|
get_latest_npm() {
|
||||||
|
npm view "$1" version 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
check() {
|
||||||
|
local name="$1" current="$2" latest="$3"
|
||||||
|
if [[ -z "$latest" ]]; then
|
||||||
|
printf " ${DIM}%-20s %-12s (could not check)${RESET}\n" "$name" "$current"
|
||||||
|
elif [[ "$current" == "$latest" ]]; then
|
||||||
|
printf " ${GREEN}%-20s %-12s ✓ up to date${RESET}\n" "$name" "$current"
|
||||||
|
else
|
||||||
|
printf " ${YELLOW}${BOLD}%-20s %-12s → %s available${RESET}\n" "$name" "$current" "$latest"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${BOLD}Version check for $DOCKERFILE${RESET}"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
# GitHub-sourced binaries
|
||||||
|
check "opencode" "$(get_pinned OPENCODE_VERSION)" "$(get_latest_npm opencode-ai)"
|
||||||
|
check "gosu" "$(get_pinned GOSU_VERSION)" "$(get_latest_github tianon/gosu)"
|
||||||
|
check "fzf" "$(get_pinned FZF_VERSION)" "$(get_latest_github junegunn/fzf)"
|
||||||
|
check "git-lfs" "$(get_pinned GIT_LFS_VERSION)" "$(get_latest_github git-lfs/git-lfs)"
|
||||||
|
check "neovim" "$(get_pinned NVIM_VERSION)" "$(get_latest_github neovim/neovim)"
|
||||||
|
check "bat" "$(get_pinned BAT_VERSION)" "$(get_latest_github sharkdp/bat)"
|
||||||
|
check "eza" "$(get_pinned EZA_VERSION)" "$(get_latest_github eza-community/eza)"
|
||||||
|
check "zoxide" "$(get_pinned ZOXIDE_VERSION)" "$(get_latest_github ajeetdsouza/zoxide)"
|
||||||
|
check "uv" "$(get_pinned UV_VERSION)" "$(get_latest_github astral-sh/uv)"
|
||||||
|
check "Go (opt)" "$(get_pinned GO_VERSION)" "$(get_latest_go)"
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo -e "${DIM}Node.js uses major version ($(get_pinned NODE_VERSION)) — auto-updates via nodesource.${RESET}"
|
||||||
|
echo -e "${DIM}rustup-init uses latest from static.rust-lang.org — no pinned version.${RESET}"
|
||||||
|
echo -e "${DIM}Debian apt packages update on each build via apt-get update.${RESET}"
|
||||||
|
echo ""
|
||||||
Reference in New Issue
Block a user