Quiero actualizar Gitea automáticamente

5 min

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

Hola, soy un inútil.
Hoy también cometí un error tipográfico, pero lo dejaré así.

Básicamente, no quiero tocar mucho el servidor Git ni pensar en operaciones, así que quiero que se actualice automáticamente.
De hecho, es tanto un punto fuerte como un punto débil de Gitea que Gitea sea un único binario que simplifica tanto el frontend como el backend.
Así que solo necesito obtener el binario.

¿Cómo guardar el binario de forma estable?

Así que, quiero guardar el binario de forma estable, y parece que se puede obtener de Releases. Releases · go-gitea/gitea · GitHub
En otras palabras, parece que puedo obtener la URL de descarga de aquí.

Probando la API

La URL de descarga se puede obtener a continuación.

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'

Lo ideal sería refinar aún más con jq desde aquí, pero viendo los key:value de json, parece que no es posible, así que parece que no hay más remedio que usar grep para el binario deseado después de esto. *1


*1 Después de que hymkor (HAYAMA_Kaoru) · GitHub me dijera que "eso no puede ser cierto", recordé cuando usé jq en el trabajo recientemente y pude extraer solo el objeto deseado de la siguiente manera.

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.name | match("linux-amd64$")) | .browser_download_url '

o

curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[] | select(.browser_download_url | match("linux-amd64$")) | .browser_download_url '

Así que, decir que no se podía hacer fue un error (tehepero - una disculpa juguetona).
Por favor, consideren el resto como mis divagaciones.


Así que lo hice de esta manera.

$ 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

Diferencia con la versión actual

Sería un desperdicio de tráfico si se desplegara un nuevo binario cada vez, así que es necesario determinarlo desde aquí.
Lo más fácil sería verificar la versión actual de Gitea y usar grep -qi con ella.

$ gitea -v | awk '{printf $3}'
1.22.4

Guárdalo en una variable.

Completado

Así es como quedó.

#!/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

Si esto se coloca en el crontab de root, se ejecutará como un script periódico.
Además, si chmod falla, el script saldrá con exit 2, por lo que no parece que vaya a haber un comportamiento extraño.

A pesar de quejarse de que Gitea es demasiado 'rico' (con muchas funciones), siento mi propia insuficiencia al terminar usándolo.

Related Posts