From ad33980c4030787930984e2b4904b6d598815aef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=A8=8B=E5=BA=8F=E5=91=98=E9=98=BF=E6=B1=9F=28Relakkes?= =?UTF-8?q?=29?= Date: Wed, 17 Jun 2026 17:19:27 +0800 Subject: [PATCH] fix(release): keep manual desktop releases as drafts Make workflow_dispatch draft handling explicit and add a post-publish guard that edits the release back to draft when manual draft runs upload assets to an existing release.\n\nTested: bun test scripts/pr/release-workflow.test.ts\nTested: git diff --check\nScope-risk: narrow\nConfidence: high --- .github/workflows/release-desktop.yml | 8 +++++++- scripts/pr/release-workflow.test.ts | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/release-desktop.yml b/.github/workflows/release-desktop.yml index bd9e704f..53601b99 100644 --- a/.github/workflows/release-desktop.yml +++ b/.github/workflows/release-desktop.yml @@ -587,7 +587,7 @@ jobs: tag_name: v${{ steps.version.outputs.value }} name: Claude Code Haha v${{ steps.version.outputs.value }} body: ${{ steps.release_notes.outputs.body }} - draft: ${{ github.event_name == 'workflow_dispatch' && inputs.draft || false }} + draft: ${{ github.event_name == 'workflow_dispatch' && inputs.draft == true }} prerelease: false fail_on_unmatched_files: true files: | @@ -599,3 +599,9 @@ jobs: artifacts/release-assets/**/*.blockmap artifacts/update-metadata-standard/*.yml desktop/scripts/install-macos-unsigned.sh + + - name: Ensure workflow-dispatch release remains draft + if: github.event_name == 'workflow_dispatch' && inputs.draft == true + env: + GH_TOKEN: ${{ github.token }} + run: gh release edit "v${{ steps.version.outputs.value }}" --draft --repo "${{ github.repository }}" diff --git a/scripts/pr/release-workflow.test.ts b/scripts/pr/release-workflow.test.ts index d8089e40..f6964e86 100644 --- a/scripts/pr/release-workflow.test.ts +++ b/scripts/pr/release-workflow.test.ts @@ -285,6 +285,10 @@ describe('release desktop workflow', () => { expect(publishJob).toContain('artifacts/release-assets/**/*.blockmap') expect(publishJob).toContain('artifacts/update-metadata-standard/*.yml') expect(publishJob).toContain('desktop/scripts/install-macos-unsigned.sh') + expect(publishJob).toContain("draft: ${{ github.event_name == 'workflow_dispatch' && inputs.draft == true }}") + expect(publishJob).toContain('Ensure workflow-dispatch release remains draft') + expect(publishJob).toContain("if: github.event_name == 'workflow_dispatch' && inputs.draft == true") + expect(publishJob).toContain('gh release edit "v${{ steps.version.outputs.value }}" --draft --repo "${{ github.repository }}"') expect(publishJob).toContain('fail_on_unmatched_files: true') expect(publishJob).toContain('Load release notes') expect(workflow.indexOf('publish-release:')).toBeGreaterThan(workflow.indexOf('build:'))