Mise à jour automatique de Gitea
Bonjour, je suis incompétent.
Aujourd'hui encore, j'ai fait une faute de frappe, mais je vais continuer comme ça.
En principe, je ne veux pas trop toucher au serveur Git ni trop penser aux opérations, donc je veux qu'il se mette à jour automatiquement.
En fait, c'est à la fois un avantage et un inconvénient de Gitea, mais Gitea simplifie le frontend et le backend en un seul binaire.
Il suffit donc de récupérer le binaire.
Comment sauvegarder le binaire de manière stable
Donc, je veux sauvegarder le binaire de manière stable, et il semble que je puisse l'obtenir depuis les Releases. Releases · go-gitea/gitea · GitHub
En d'autres termes, il semble que je doive simplement récupérer l'URL de destination à partir d'ici.
Essayer d'appeler l'API
L'URL de téléchargement peut être obtenue comme suit.
curl https://api.github.com/repos/go-gitea/gitea/releases/latest | jq -r '.assets[].browser_download_url'
Idéalement, je voudrais affiner davantage avec jq à partir d'ici, mais en regardant les key:value du json, cela ne semble pas possible, donc il semble que je n'aie d'autre choix que de grep le binaire cible après cela. ※1
※1 Après avoir été dit par hymkor (HAYAMA_Kaoru) · GitHub que ce n'était pas le cas, je me suis souvenu d'une fois où j'utilisais jq au travail récemment et j'ai pu extraire uniquement l'objet cible comme suit.
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 '
Donc, dire que ce n'était pas possible était une erreur (tehepero)
Considérez le reste comme mes divagations.
C'est ainsi que j'ai procédé.
$ 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
Différence avec la version actuelle
Si un nouveau binaire est déployé à chaque fois, le trafic serait gaspillé, il est donc nécessaire de le déterminer à partir d'ici.
Le plus simple serait de vérifier la version actuelle de Gitea et de la grep -qi.
$ gitea -v | awk '{printf $3}'
1.22.4
Je vais stocker cela dans une variable.
Terminé
Voici donc à quoi cela ressemble.
#!/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 cela est placé dans le crontab de root, il sera exécuté comme un script régulier.
De toute façon, si chmod échoue, le script se terminera avec exit 2, donc il est peu probable qu'il y ait un comportement étrange.
Malgré tout, je me sens un peu inadéquat de l'utiliser alors que je dis que Gitea est trop riche en fonctionnalités.