Giteaを自動アップデートしたい
3 min read
こんにてゃ、無能です。
今日も今日とてタイポしましたがこのままいきます。
基本的に、Gitサーバはあんまりいじらずあまり運用的なことを考えたく無いので自動でアップデートするようにしたい。
なんならGitea
のいいところでもあり悪いところでもあるが、Giteaは単一バイナリでフロントエンドもバックエンドも簡潔するのだ。
という訳でバイナリさえ引っ張ってこればいい。
どうやって安定的にバイナリを保存するか
というわけで、安定的にバイナリを保存したいのだが、Releases
から取得ができそうである。 Releases · go-gitea/gitea · GitHub
つまりは、ここから保存先URLを引っ張ってくればよさそうだな。
apiを叩いてみる
以下でダウンロード先URLが取得できる。
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'
理想的なのはここからjqで更に絞り込みたいのだが、json
のkey:value
見ていると出来なさそうなのでひたすらこのあとに目的のバイナリをgrep
するしかなさそうである。※1
※1 hymkor (HAYAMA_Kaoru) · GitHub さんに言われて、そんなことは無いだろう、ということで最近仕事でjq
打ってたときのこと思い出して以下で対象オブジェクトだけ抽出できた。
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '
または
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '
というわけで、出来ないというのは間違いでした(てへぺろ)
残りは俺の戯言として見てください
というわけでこうした。
$ curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url' | grep linux-amd64$
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 171k 0 171k 0 0 291k 0 --:--:-- --:--:-- --:--:-- 291k
https://github.com/go-gitea/gitea/releases/download/v1.23.4/gitea-1.23.4-linux-amd64
現在バージョンとの差異
毎回新しいバイナリを配置していたらトラフィックが勿体無いので、ここから判定する必要がある。
一番お手軽なのは、現在のGiteaのバージョンを確認しそれをgrep -qi
することだろう。
$ gitea -v | awk '{printf $3}'
1.22.4
これを変数格納しておく。
完成
というわけでこんな感じになった。
#!/bin/bash
# give me root
BINARY_URL=$(curl https://api.github.com/repos/go-gitea/gitea/releases/latest |\
jq -r '.assets[].browser_download_url' |\
grep linux-amd64$ )
NOW_GITEA_V=$(gitea -v | awk '{printf $3}')
DAEMON_RESTART="service gitea restart"
if ! echo $BINARY_URL | grep -qi $NOW_GITEA_V ; then
wget -O gitea $BINARY_URL
chmod +x gitea || exit 2
mv gitea /usr/local/bin/gitea
$DAEMON_RESTART
else
exit 0
fi
これを、rootのcrontabに入れておけば定期スクリプトとして実行されるだろう。
そもそも、chmod
で失敗すればexit 2
して抜けるのでまあ変な挙動になることも無さそうである。
なんやかんやGiteaがリッチすぎると言いながら、使ってしまっているという至らなさが自分で感じる。