From e679fa06e6e2c5653a43cea3ae91d0086ba10112 Mon Sep 17 00:00:00 2001 From: Joakim Persson Date: Sat, 18 Apr 2026 16:50:01 +0200 Subject: [PATCH] Add check-versions.sh to compare pinned versions against latest releases MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Run before tagging a release to see what tools have newer versions. Reports only — does not modify files. Human decides what to bump. --- check-versions.sh | 66 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100755 check-versions.sh diff --git a/check-versions.sh b/check-versions.sh new file mode 100755 index 0000000..3e8495c --- /dev/null +++ b/check-versions.sh @@ -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 ""