From c4c5b6da25a2a2cd443324cf10eb36c646ee5889 Mon Sep 17 00:00:00 2001 From: Dmitriy Fofanov Date: Wed, 25 Feb 2026 16:52:34 +0300 Subject: [PATCH] =?UTF-8?q?fix(release):=20Gitea=201.22=20API=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D1=82=20name/b?= =?UTF-8?q?ody=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20title/note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Корневая причина всех пустых релизов: Gitea 1.22.1 API принимает поля 'name'/'body' для POST и PATCH, а 'title'/'note' молча игнорируются. - POST CreateRelease: title/note name/body - PATCH EditRelease: title/note name/body - Добавлено логирование ответа PATCH для диагностики - concurrency group предотвращает параллельные run'ы --- .github/workflows/release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c59eed3..4c19728 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -323,7 +323,7 @@ jobs: if [ "${HOST}" = "github.com" ]; then RELEASE_PAYLOAD="{\"tag_name\":\"${TAG}\",\"target_commitish\":\"${TARGET_COMMITISH}\",\"name\":\"${RELEASE_TITLE}\",\"body\":${BODY_JSON},\"draft\":false,\"prerelease\":false}" else - RELEASE_PAYLOAD="{\"tag_name\":\"${TAG}\",\"target\":\"${TARGET_COMMITISH}\",\"title\":\"${RELEASE_TITLE}\",\"note\":${BODY_JSON},\"draft\":false,\"prerelease\":false}" + RELEASE_PAYLOAD="{\"tag_name\":\"${TAG}\",\"target_commitish\":\"${TARGET_COMMITISH}\",\"name\":\"${RELEASE_TITLE}\",\"body\":${BODY_JSON},\"draft\":false,\"prerelease\":false}" fi echo ">>> Создание релиза для тега ${TAG}..." @@ -363,14 +363,13 @@ jobs: exit 1 fi - # Always PATCH the release to guarantee title + note are set + # Always PATCH the release to guarantee name + body are set # (handles race condition when parallel run creates empty release) - echo ">>> Обновление релиза (ID: ${RELEASE_ID}) — title + note..." + echo ">>> Обновление релиза (ID: ${RELEASE_ID}) — name + body..." + PATCH_PAYLOAD="{\"name\":\"${RELEASE_TITLE}\",\"body\":${BODY_JSON}}" if [ "${HOST}" = "github.com" ]; then - PATCH_PAYLOAD="{\"name\":\"${RELEASE_TITLE}\",\"body\":${BODY_JSON}}" PATCH_URL="https://api.github.com/repos/${REPO}/releases/${RELEASE_ID}" else - PATCH_PAYLOAD="{\"title\":\"${RELEASE_TITLE}\",\"note\":${BODY_JSON}}" PATCH_URL="${SERVER}/api/v1/repos/${REPO}/releases/${RELEASE_ID}" fi PATCH_RESP=$(curl -sS -X PATCH \ @@ -379,7 +378,8 @@ jobs: "${EXTRA_HEADERS[@]}" \ "${PATCH_URL}" \ -d "${PATCH_PAYLOAD}") - echo ">>> Релиз обновлён" + PATCH_NAME=$(printf '%s' "${PATCH_RESP}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('name',''))" 2>/dev/null || echo '') + echo ">>> Релиз обновлён (name: ${PATCH_NAME})" if [ "${HOST}" = "github.com" ]; then UPLOAD_BASE=$(printf '%s' "${RELEASE_JSON}" | python3 -c "import sys,json; print(json.load(sys.stdin).get('upload_url','').split('{')[0])")