新しい go と latest なソースからバイナリをビルドしなおす

golang

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

参考にしたサイト


この記事をシェアする
Built with Hugo
テーマ StackJimmy によって設計されています。