Quero atualizar o Gitea automaticamente

5 min

language: ja bn de en es fr hi ko pt ru zh-cn zh-tw

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.

Related Posts