go のバージョンを新しくした時に、今まで入れたバイナリも全部まるっと latest でビルドしたくなる。
そういう時に go install ...@latest
をするんだけど、当時のビルドバージョンを調べるの面倒だし、コマンド一発で何とかしたい。
そういう時には、こんな感じのスクリプトを作っておくと便利。
#!/usr/bin/env bash
go install "$(go version -m "$(go env GOBIN)/$1" | head -n2 | tail -n1 | awk '{print $2}')@latest"
GOBIN の下にあるバイナリを指定して、取得してきた URL を取り出して、 @latest
をつけて go install
しなおす。
これを GOBIN にあるバイナリ全部に適用する fish scirpt が以下。
function gobin-update
set -f gobin "$(go env GOBIN)"
set -f currentVersion "$(go version | awk '{print $3}')"
echo "[INFO] current golang version is $currentVersion"
echo "[INFO] check for build versions..."
for fname in "$gobin"/*
set -f temp "$(go version -m "$fname" 2> /dev/null)"
set -f pkg "$(echo "$temp" | head -n2 | tail -n1 | awk '{print $2}')"
set -f binVersion "$(echo "$temp" | head -n1 | awk '{print $2}')"
set -f binName "$(basename $pkg)"
if test -n "$pkg" && test "$currentVersion" != "$binVersion"
echo "[INFO] rebuild $(basename $pkg) from $binVersion to $currentVersion."
go install "$pkg@latest"
end
end
echo "[INFO] finished."
end