Автоматическое обновление Gitea

5 min

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

Привет, я бездарь.
Сегодня, как и вчера, я сделал опечатку, но оставлю как есть.

В основном, я не хочу особо возиться с Git-сервером и не хочу думать об операционных аспектах, поэтому я хочу, чтобы он обновлялся автоматически.
Более того, это одновременно и хорошая, и плохая сторона Gitea: Gitea представляет собой единый бинарный файл, который упрощает как фронтенд, так и бэкенд.
Поэтому достаточно просто получить бинарный файл.

Как стабильно сохранять бинарный файл

Итак, я хочу стабильно сохранять бинарный файл, и, похоже, его можно получить из Releases. Releases · go-gitea/gitea · GitHub
То есть, похоже, достаточно просто получить URL для сохранения отсюда.

Попробуем вызвать API

URL для скачивания можно получить следующим образом.

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

В идеале, я бы хотел отфильтровать это дальше с помощью jq, но, глядя на key:value в json, это кажется невозможным, поэтому, похоже, остается только использовать grep для поиска нужного бинарного файла после этого. *1


*1 После того, как hymkor (HAYAMA_Kaoru) · GitHub сказал, что это не так, я вспомнил, как недавно использовал jq на работе, и смог извлечь только нужный объект следующим образом.

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

или

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

Итак, я ошибся, сказав, что это невозможно (техеперо).
Остальное считайте моей болтовней.


Итак, я сделал так.

$ 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

Различия с текущей версией

Размещение нового бинарного файла каждый раз будет тратить трафик, поэтому необходимо определить это здесь.
Самый простой способ — проверить текущую версию Gitea и использовать grep -qi.

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

Сохраним это в переменной.

Готово

Итак, получилось вот так.

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

Если поместить это в crontab пользователя root, оно будет выполняться как регулярный скрипт.
В любом случае, если chmod завершится неудачей, скрипт выйдет с exit 2, так что странного поведения быть не должно.

Я чувствую свою несостоятельность, говоря, что Gitea слишком богата функциями, но все равно использую ее.

Related Posts