Files
DLE/scripts/gitea-upload-release-assets.sh
2026-03-01 22:03:48 +03:00

82 lines
3.1 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/env bash
#
# Прикрепить файлы из папки downloads/ к релизу DLE в Gitea (через API).
# Запускать на VDS после sync, когда downloads/ уже на сервере.
#
# На VDS:
# cd /home/docker/dapp
# export GITEA_PASSWORD='adminhb32026'
# export GITEA_URL='https://hb3-accelerator.com/gitea'
# ./scripts/gitea-upload-release-assets.sh [тег] [каталог]
# ./scripts/gitea-upload-release-assets.sh v1.0.3 ./downloads
#
# Требования: curl. Без jq (парсим id из JSON вручную).
set -e
GITEA_URL="${GITEA_URL:-https://hb3-accelerator.com/gitea}"
GITEA_USER="${GITEA_USER:-admin}"
GITEA_PASSWORD="${GITEA_PASSWORD:?Задайте GITEA_PASSWORD.}"
ORG="VC-HB3-Accelerator"
REPO="DLE"
TAG="${1:-v1.0.3}"
DIR="${2:-./downloads}"
API="${GITEA_URL}/api/v1"
AUTH="-u ${GITEA_USER}:${GITEA_PASSWORD}"
CURL_OPTS="-s --connect-timeout 15 --max-time 1200"
RETRIES=2
if [ ! -d "$DIR" ] || [ -z "$(ls -A "$DIR" 2>/dev/null)" ]; then
echo "Каталог $DIR пуст или не найден. Запускайте на VDS после sync."
exit 1
fi
echo "Gitea: $GITEA_URL, репо: $ORG/$REPO, тег: $TAG, каталог: $DIR"
echo "---"
# Получить или создать релиз по тегу
json=$(curl $CURL_OPTS $AUTH "${API}/repos/${ORG}/${REPO}/releases/tags/${TAG}" 2>/dev/null) || true
if [ -z "$json" ] || echo "$json" | grep -q '"message"'; then
echo "Релиз $TAG не найден, создаём..."
json=$(curl $CURL_OPTS -X POST $AUTH -H "Content-Type: application/json" \
-d "{\"tag_name\":\"${TAG}\",\"name\":\"Release ${TAG}\",\"target\":\"${TAG}\"}" \
"${API}/repos/${ORG}/${REPO}/releases" 2>/dev/null) || true
fi
release_id=$(echo "$json" | grep -o '"id":[0-9]*' | head -1 | grep -o '[0-9]*')
if [ -z "$release_id" ]; then
echo "Не удалось получить id релиза. Проверьте GITEA_PASSWORD и GITEA_URL."
[ -n "$json" ] && echo "Ответ API: ${json:0:200}..."
echo "Создайте релиз $TAG в Gitea вручную (Releases → Create), затем запустите скрипт снова."
exit 1
fi
echo "Релиз $TAG (id=$release_id). Загрузка ассетов..."
for f in "$DIR"/*; do
[ -f "$f" ] || continue
name=$(basename "$f")
echo " $name ..."
code=""
for try in $(seq 1 $((RETRIES+1))); do
code=$(curl $CURL_OPTS -w "%{http_code}" -o /tmp/gitea_asset_$$.out -X POST $AUTH \
"${API}/repos/${ORG}/${REPO}/releases/${release_id}/assets?name=${name}" \
-F "attachment=@${f}")
if [ "$code" = "201" ]; then
echo " OK"
break
fi
if [ "$code" = "409" ]; then
echo " уже в релизе (409)"
break
fi
if [ "$try" -le "$RETRIES" ] && echo "$code" | grep -qE '^5[0-9]{2}$'; then
echo " HTTP $code, повтор $try/$RETRIES через 10 с..."
sleep 10
else
echo " HTTP $code"
break
fi
done
rm -f /tmp/gitea_asset_$$.out
done
echo "Готово. Проверьте: ${GITEA_URL}/${ORG}/${REPO}/releases"