From 1226aa9cfbd4663d54c5bcff44a3df28972a5e24 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 16 Oct 2026 05:56:05 +0000 Subject: [PATCH] Let the release workflow be started from the Actions tab Adds a workflow_dispatch trigger with a version input, so a release can be made without pushing a tag first. The draft release targets the commit that was built, and publishing it creates the tag there. Co-Authored-By: Claude Opus 5.5 (1M context) Claude-Session: https://claude.ai/code/session_01M8Yy1fex2mgNsAZDo8CUru --- .github/workflows/release.yml | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0205813..53bd1f9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,10 +1,17 @@ name: Release -# Push a tag like v1.0.0 to build the exe and create a draft GitHub Release with it. -# The draft stays private until someone presses Publish on the Releases page. +# Push a tag like v1.0.0, or run this workflow from the Actions tab with a version, to build +# the exe and create a draft GitHub Release with it. The draft stays private until someone +# presses Publish on the Releases page; when started from the Actions tab, publishing also +# creates the tag on the commit that was built. on: push: tags: ['v*'] + workflow_dispatch: + inputs: + tag: + description: Version tag to release, for example v1.0.0 + required: true permissions: contents: write # create the draft release and upload its files @@ -13,6 +20,8 @@ jobs: release: runs-on: windows-latest timeout-minutes: 30 + env: + TAG: ${{ inputs.tag || github.ref_name }} steps: - uses: actions/checkout@v4 @@ -24,7 +33,7 @@ jobs: id: version shell: pwsh run: | - $tag = "${{ github.ref_name }}" + $tag = $env:TAG if ($tag -notmatch '^v(\d+\.\d+\.\d+)$') { throw "Tag '$tag' must look like v1.2.3" } "version=$($Matches[1])" >> $env:GITHUB_OUTPUT if (-not (Test-Path ".github/release-notes/$tag.md")) { throw "Add .github/release-notes/$tag.md before tagging" } @@ -51,7 +60,7 @@ jobs: - name: Name the exe and write its SHA-256 checksum shell: pwsh run: | - $name = "ProDHCPServer-${{ github.ref_name }}-win-x64.exe" + $name = "ProDHCPServer-$($env:TAG)-win-x64.exe" New-Item -ItemType Directory -Force -Path dist | Out-Null Copy-Item publish/ProDHCPServer.exe "dist/$name" $hash = (Get-FileHash "dist/$name" -Algorithm SHA256).Hash.ToLowerInvariant() @@ -64,20 +73,20 @@ jobs: env: GH_TOKEN: ${{ github.token }} run: | - $tag = "${{ github.ref_name }}" + $tag = $env:TAG $files = (Get-ChildItem dist).FullName gh release view $tag *> $null if ($LASTEXITCODE -eq 0) { gh release upload $tag @files --clobber } else { - gh release create $tag @files --draft --verify-tag --title "ProDHCPServer $tag" --notes-file ".github/release-notes/$tag.md" + gh release create $tag @files --draft --target ${{ github.sha }} --title "ProDHCPServer $tag" --notes-file ".github/release-notes/$tag.md" } if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE } - uses: actions/upload-artifact@v4 if: always() with: - name: release-${{ github.ref_name }} + name: release-${{ env.TAG }} path: | dist/ screenshots/