82 lines
3.1 KiB
Bash
82 lines
3.1 KiB
Bash
#!/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" |