Quero atualizar o Gitea automaticamente
Olá, sou um inútil.
Mesmo hoje, cometi um erro de digitação, mas vou continuar assim.
Basicamente, não quero mexer muito no servidor Git nem pensar muito em operações, então quero que ele se atualize automaticamente.
Na verdade, é um ponto forte e fraco do Gitea, mas o Gitea é um único binário que simplifica tanto o frontend quanto o backend.
Portanto, basta baixar o binário.
Como salvar o binário de forma estável
Então, quero salvar o binário de forma estável, e parece que posso obtê-lo de Releases. Releases · go-gitea/gitea · GitHub
Em outras palavras, parece que basta pegar o URL de download daqui.
Tentando chamar a API
O URL de download pode ser obtido abaixo.
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'
O ideal seria refinar ainda mais com jq a partir daqui, mas olhando para os key:value do json, parece que não é possível, então parece que a única opção é usar grep para encontrar o binário desejado depois disso. *1
*1 Depois que hymkor (HAYAMA_Kaoru) · GitHub me disse que 'não é bem assim', lembrei-me de quando estava usando jq no trabalho recentemente e consegui extrair apenas o objeto alvo com o seguinte.
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '
Ou
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '
Então, estava errado ao dizer que não era possível (tehepero - som de colocar a língua para fora, usado para admitir um erro de forma brincalhona)
Por favor, considere o resto como minhas divagações.
Então, fiz assim.
$ 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
Diferença em relação à versão atual
Seria um desperdício de tráfego se eu implantasse um novo binário toda vez, então preciso determinar isso a partir daqui.
A maneira mais fácil seria verificar a versão atual do Gitea e usar grep -qi nela.
$ gitea -v | awk '{printf $3}'
1.22.4
Vou armazenar isso em uma variável.
Concluído
Então, ficou assim.
#!/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
Se eu colocar isso no crontab do root, ele será executado como um script periódico.
Além disso, se chmod falhar, ele sairá com exit 2, então não parece que haverá um comportamento estranho.
Apesar de dizer que o Gitea é muito rico em recursos, sinto minha própria imperfeição por acabar usando-o.