Mise à jour automatique de Gitea

5 min

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

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.

Related Posts