go installで導入したパッケージをgupで最新にする

cargo-updateコマンドが便利なのでGo環境でも同じようなものを探してみました．gupというものを見つけて試してみました．

nao1215/gup: gup – Update binaries installed by “go install” with goroutines.

gup/doc/ja/README.md at main · nao1215/gup (日本語)

gupのインストール

$ go install github.com/nao1215/gup@latest

Note

releasesにはいくつかの形式のパッケージやバイナリもあります．

$GOPATH/bin のリストを取得

$ gup list
air: github.com/cosmtrek/air@v1.44.0
algia: github.com/mattn/algia@v0.0.83
bluetuith: github.com/darkhz/bluetuith@v0.2.3
bsky: github.com/mattn/bsky@v0.0.61
: (以下省略)

バイナリが最新バージョンかチェックする

$ gup check
check binary under $GOPATH/bin or $GOBIN
[ 1/22] libdb.so/dissent (v0.0.30 / current: go1.22.6, installed: go1.23.2)
[ 2/22] github.com/thushan/smash (Already up-to-date: v0.9.3 / go1.23.2)
[ 3/22] github.com/mrmarble/termsvg/cmd/termsvg (Already up-to-date: v0.9.2 / go1.23.2)
[ 4/22] github.com/darkhz/bluetuith (Already up-to-date: v0.2.3 / go1.23.2)
[ 5/22] github.com/nao1215/gup (Already up-to-date: v0.27.5 / go1.23.2)
[ 6/22] github.com/pouriyajamshidi/tcping (Already up-to-date: v1.22.1 / go1.23.2)
[ 7/22] github.com/charmbracelet/glow (Already up-to-date: v1.5.1 / go1.23.2)
[ 8/22] github.com/schachmat/wego (Already up-to-date: v0.0.0-20241006164746-6578d5ebf3d5 / go1.23.2)
[ 9/22] github.com/mattn/bsky (Already up-to-date: v0.0.61 / go1.23.2)
[10/22] github.com/antonmedv/countdown (Already up-to-date: v1.5.0 / go1.23.2)
[11/22] github.com/BuddhiLW/lazywal/cmd/lazywal (Already up-to-date: v0.5.3 / go1.23.2)
[12/22] github.com/mattn/efm-langserver (Already up-to-date: v0.0.53 / go1.23.2)
[13/22] github.com/buildkite/terminal-to-html/v3/cmd/terminal-to-html (Already up-to-date: v3.16.3 / go1.23.2)
[14/22] github.com/diamondburned/gtkcord4 (current: v0.0.19, latest: v0.0.30 / current: go1.21.6, installed: go1.23.2)
[15/22] github.com/ariasmn/ugm (Already up-to-date: v1.6.0 / go1.23.2)
[16/22] github.com/charmbracelet/vhs (Already up-to-date: v0.8.0 / go1.23.2)
[17/22] github.com/mattn/algia (Already up-to-date: v0.0.83 / go1.23.2)
[18/22] github.com/cosmtrek/air (current: v1.44.0, latest: v1.61.1 / current: go1.19.8, installed: go1.23.2)
[19/22] github.com/sweetbbak/tget (current: v0.0.0-20240308040335-76c53b4462e7, latest: v0.1.1 / current: go1.22.1, installed: go1.23.2)
[20/22] github.com/kkdai/chatgpt (Already up-to-date: v0.4.1 / go1.23.2)
[21/22] github.com/pcarrier/vanity-keygen (Already up-to-date: v0.0.0-20220703224004-4dfc327cc534 / go1.23.2)
[22/22] github.com/eeeXun/gtt (Already up-to-date: v0.0.0-20240810151233-9986dcb52543 / go1.23.2)

If you want to update binaries, run the following command.
$ gup update dissent gtkcord4 air tget

指定したバイナリを更新する

$ gup update tget

全てのバイナリを更新する

$ gup update

指定したバイナリを削除する

$ gup remove gtkcord4

Note

バイナリだけの削除のようでsourceは残ります．

GOバイナリ環境のエクスポート，インポート

GOバイナリ環境の情報をエクスポートして別環境にインポートできます．エクスポートファイルは $XDG_CONFIG_HOME/gup/gup.conf に書き出されます．もしくは --output オプションでSTDOUTに出力できます．

エクスポート

$ gup export
Export /home/matoken/.config/gup/gup.conf
$ tail -1 ~/.config/gup/gup.conf
wego = github.com/schachmat/wego

インポート

$ export GOPATH=$HOME/go-test (1)
$ export PATH=$PATH:$GOPATH/bin
$ go install github.com/nao1215/gup@latest (2)
$ which gup
/home/matoken/go-test/bin/gup
$ gup list (3)
gup: github.com/nao1215/gup@v0.27.5
$ rsync -avcP 192.168.0.27:~/.config/gup/gup.conf ~/.config/gup/ (4)
$ gup import (5)
start update based on /home/matoken/.config/gup/gup.conf
update binary under $GOPATH/bin or $GOBIN
[ 1/21] github.com/nao1215/gup (<from gup.conf> to v0.27.5, <from gup.conf> to )
[ 2/21] github.com/schachmat/wego (<from gup.conf> to v0.0.0-20241006164746-6578d5ebf3d5, <from gup.conf> to )
[ 3/21] github.com/mattn/algia (<from gup.conf> to v0.0.83, <from gup.conf> to )
[ 4/21] github.com/pouriyajamshidi/tcping (<from gup.conf> to v1.22.1, <from gup.conf> to )
: (以下省略)

テスト用の環境をGOPATHに設定

gupを導入

gupしか導入されていないのを確認

リモートのgup.confをコピー

インポート

Tip

Debian sid amd64環境でエクスポート，RaspberryPi OS armhf環境でインポートを試みましたがうまく行きました．

gup update で目的は達成できましたが，エクスポート，インポート機能がことのほか便利な感じです．

試した環境

メイン環境

$ gup list | grep gup
gup: github.com/nao1215/gup@v0.27.5
$ dpkg-query -W golang
golang:amd64 2:1.23~2
$ lsb_release -dr
Description: Debian GNU/Linux trixie/sid
Release: n/a
$ arch
x86_64

インポート環境

$ gup list | grep gup
gup: github.com/nao1215/gup@v0.27.5
$ dpkg-query -W golang
golang:armhf 2:1.19~1
$ lsb_release -dr
No LSB modules are available.
Description: Raspbian GNU/Linux 12 (bookworm)
Release: 12
$ arch
armv7l