From 951f2d616347e29d551a24d171ea6e0d5fe239d6 Mon Sep 17 00:00:00 2001 From: cucadmuh <49571317+cucadmuh@users.noreply.github.com> Date: Fri, 1 May 2026 22:19:11 +0300 Subject: [PATCH] fix(release): rebind untagged draft releases to expected app-v tag (#406) After create/update, fetch release by id and force tag_name/target_commitish when GitHub returns an unexpected tag (including untagged placeholders). This self-heals release metadata before downstream upload steps consume release_id. --- .../workflows/reusable-channel-publish.yml | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/.github/workflows/reusable-channel-publish.yml b/.github/workflows/reusable-channel-publish.yml index 0fda0f28..329f979f 100644 --- a/.github/workflows/reusable-channel-publish.yml +++ b/.github/workflows/reusable-channel-publish.yml @@ -207,6 +207,30 @@ jobs: core.info(`Created release id=${releaseId} tag=${tag} target_commitish=${targetCommitish}`); } + // Self-heal: GitHub can occasionally produce a draft release with an untagged + // placeholder even when tag_name was requested. Force the expected tag binding. + const { data: createdOrUpdated } = await github.rest.repos.getRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: releaseId, + }); + if ((createdOrUpdated.tag_name || "") !== tag) { + core.warning( + `Release id=${releaseId} has tag '${createdOrUpdated.tag_name ?? ""}', expected '${tag}'. Re-binding release tag.` + ); + await github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: releaseId, + tag_name: tag, + target_commitish: targetCommitish, + name, + body, + draft, + prerelease, + }); + } + core.setOutput("release_id", String(releaseId)); - name: validate release id output env: