#!/bin/bash # Публикация Release в Gitea (не только git tag) # Использование: # export GITEA_TOKEN=ваш_токен # Настройки → Приложения → Токен доступа # bash scripts/publish-gitea-release.sh 0.10.0 set -euo pipefail VERSION="${1:-0.10.0}" TAG="v${VERSION#v}" GITEA_URL="${GITEA_URL:-https://git.evilfox.cc}" OWNER="${GITEA_OWNER:-test}" REPO="${GITEA_REPO:-shop10}" if [ -z "${GITEA_TOKEN:-}" ]; then echo "Задайте GITEA_TOKEN (токен с правом write:repository)" echo " export GITEA_TOKEN=..." exit 1 fi NOTES_FILE="$(dirname "$0")/../.release-notes/${TAG}.md" if [ ! -f "$NOTES_FILE" ]; then NOTES_FILE="$(dirname "$0")/../CHANGELOG.md" fi BODY=$(sed -n "/## \[${VERSION#v}\]/,/^## \[/p" "$NOTES_FILE" 2>/dev/null | sed '$d' || cat "$NOTES_FILE") if [ -z "$BODY" ]; then BODY="Release ${TAG} — см. CHANGELOG.md" fi # Экранирование JSON BODY_JSON=$(printf '%s' "$BODY" | python3 -c 'import json,sys; print(json.dumps(sys.stdin.read()))') HTTP=$(curl -sS -o /tmp/gitea-release.json -w "%{http_code}" -X POST \ "${GITEA_URL}/api/v1/repos/${OWNER}/${REPO}/releases" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"tag_name\":\"${TAG}\",\"name\":\"${VERSION#v}\",\"body\":${BODY_JSON},\"target_commitish\":\"main\",\"prerelease\":false}") if [ "$HTTP" = "201" ]; then echo "Release создан: ${GITEA_URL}/${OWNER}/${REPO}/releases/tag/${TAG}" cat /tmp/gitea-release.json | python3 -m json.tool 2>/dev/null || cat /tmp/gitea-release.json elif [ "$HTTP" = "409" ]; then echo "Release ${TAG} уже существует — обновление..." RELEASE_ID=$(curl -sS "${GITEA_URL}/api/v1/repos/${OWNER}/${REPO}/releases/tags/${TAG}" \ -H "Authorization: token ${GITEA_TOKEN}" | python3 -c "import json,sys; print(json.load(sys.stdin)['id'])") curl -sS -X PATCH "${GITEA_URL}/api/v1/repos/${OWNER}/${REPO}/releases/${RELEASE_ID}" \ -H "Authorization: token ${GITEA_TOKEN}" \ -H "Content-Type: application/json" \ -d "{\"name\":\"${VERSION#v}\",\"body\":${BODY_JSON}}" | python3 -m json.tool echo "Обновлено: ${GITEA_URL}/${OWNER}/${REPO}/releases/tag/${TAG}" else echo "Ошибка HTTP ${HTTP}" cat /tmp/gitea-release.json exit 1 fi