Skip to content

Comments

feat: simplify release to workflow_dispatch only#968

Merged
Mossaka merged 3 commits intomainfrom
feat/simplify-release
Feb 19, 2026
Merged

feat: simplify release to workflow_dispatch only#968
Mossaka merged 3 commits intomainfrom
feat/simplify-release

Conversation

@Mossaka
Copy link
Collaborator

@Mossaka Mossaka commented Feb 19, 2026

Summary

  • Integrate version bumping directly into the release workflow — the entire release is now a single workflow_dispatch with a bump type selector
  • Add concurrency guard and branch protection (main + maintenance branches only)
  • Update docs/releasing.md to reflect the one-step process

Before (old flow)

  1. npm version patch (bumps version, creates commit + tag locally)
  2. git push origin main (push version commit)
  3. git push origin --tags (push tag to trigger workflow)

After (new flow)

gh workflow run release.yml -f bump=patch

Or from the GitHub UI: Actions > Release > Run workflow > select bump type > Run workflow.

That's it. The workflow handles everything:

  1. Bumps package.json version
  2. Commits the change and creates the git tag
  3. Builds all Docker images (parallel)
  4. Creates binaries, tarball, checksums
  5. Generates changelog and publishes GitHub Release

Key design decisions

  • Version bump in CI: The bump-version job runs npm version --no-git-tag-version, commits as github-actions[bot], and pushes the commit + tag
  • All jobs checkout the tag: Build and release jobs use ref: ${{ needs.bump-version.outputs.version }} to ensure they build from the version-bumped commit
  • Concurrency guard: concurrency: { group: release } prevents duplicate releases if triggered twice
  • Branch guard: Only main and v*.x maintenance branches are allowed

Test plan

  • Verify the workflow YAML syntax is valid
  • Verify workflow_dispatch with bump input renders correctly in the Actions UI
  • Verify the bump-version job correctly bumps, commits, tags, and pushes
  • Verify build jobs checkout the correct (post-bump) commit
  • Verify changelog generation works with the tag created by bump-version

🤖 Generated with Claude Code

Remove the tag push trigger from the release workflow. Now the only way
to release is via workflow_dispatch (Actions UI or `gh workflow run`).

The workflow reads the version from package.json, builds everything,
then creates and pushes the git tag only after builds succeed. This
eliminates the multi-step tag push dance and reduces the release process
to: npm version → git push → trigger workflow.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Copilot AI review requested due to automatic review settings February 19, 2026 04:24
@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

📰 DEVELOPING STORY: Smoke Copilot reports was cancelled. Our correspondents are investigating the incident...

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

💫 TO BE CONTINUED... Smoke Claude was cancelled! Our hero faces unexpected challenges...

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

🌑 The shadows whisper... Smoke Codex was cancelled. The oracle requires further meditation...

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

✅ Coverage Check Passed

Overall Coverage

Metric Base PR Delta
Lines 82.30% 82.45% 📈 +0.15%
Statements 82.23% 82.37% 📈 +0.14%
Functions 82.74% 82.74% ➡️ +0.00%
Branches 74.46% 74.55% 📈 +0.09%
📁 Per-file Coverage Changes (1 files)
File Lines (Before → After) Statements (Before → After)
src/docker-manager.ts 83.2% → 83.8% (+0.55%) 82.5% → 83.0% (+0.54%)

Coverage comparison generated by scripts/ci/compare-coverage.ts

- Add concurrency group to prevent duplicate releases
- Add branch guard (only main or maintenance v*.x branches)
- Use `git tag -l` instead of `git rev-parse` for precise tag checks
- Document that npm version creates a local tag (don't push it)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR simplifies the release process by removing the push: tags trigger and moving tag creation into the workflow itself. The release workflow now reads the version from package.json, builds all artifacts, and only creates the git tag after successful builds—preventing dangling tags from failed builds.

Changes:

  • Release workflow trigger changed from push: tags to workflow_dispatch only
  • Version extraction simplified to always read from package.json
  • Git tag creation moved into the workflow after successful builds
  • Documentation updated to reflect the new 3-step process: npm versiongit push → trigger workflow

Reviewed changes

Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.

File Description
.github/workflows/release.yml Removed tag trigger, simplified version extraction logic, added manual tag creation step after builds, added fetch-tags option for changelog generation
docs/releasing.md Updated release steps to reflect workflow_dispatch trigger, removed references to pushing tags manually, updated troubleshooting and maintenance instructions
Comments suppressed due to low confidence (1)

docs/releasing.md:38

  • For consistency and clarity, the documentation should mention that when using the Actions UI (line 35), users need to select the branch before clicking "Run workflow". This is especially important for maintenance releases but applies to all releases.

Consider adding a note:

Trigger the release from the **Actions** tab (select the branch, then click "Run workflow") or CLI:
### 3. Run the Release Workflow

Trigger the release from the **Actions** tab or CLI:


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines 346 to 356
- name: Create git tag
run: |
TAG="${{ needs.setup.outputs.version }}"
if [ -n "$(git tag -l "$TAG")" ]; then
echo "Tag $TAG already exists, skipping creation"
else
git tag "$TAG"
git push origin "$TAG"
echo "Created and pushed tag $TAG"
fi

Copy link

Copilot AI Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The manual git tag creation step is missing git user configuration and creates a logical conflict with the GitHub Release action.

Issues:

  1. The git tag and git push commands will fail without git user configuration. Add before line 342:

    • git config user.name "github-actions[bot]"
    • git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
  2. The softprops/action-gh-release action (line 452) automatically creates tags if they don't exist. Since you're manually creating the tag here, you should either:

    • Remove this manual tag creation step entirely and let the release action handle it, OR
    • Document why the tag must be created before the release (e.g., for changelog generation)
  3. If keeping this step, the GitHub API changelog generation (line 371-379) may fail because the tag was just pushed seconds ago and might not be immediately available in GitHub's API. The fallback to git log should handle this, but it will result in inconsistent changelog formatting.

Suggested change
- name: Create git tag
run: |
TAG="${{ needs.setup.outputs.version }}"
if [ -n "$(git tag -l "$TAG")" ]; then
echo "Tag $TAG already exists, skipping creation"
else
git tag "$TAG"
git push origin "$TAG"
echo "Created and pushed tag $TAG"
fi

Copilot uses AI. Check for mistakes.
Comment on lines 14 to 31
@@ -24,32 +22,31 @@ npm version minor
npm version major
```

This will:
- Update `package.json` version
- Create a git commit with the version change
- Create a git tag (e.g., `v0.1.1`)
This updates `package.json` and creates a version commit (and a local tag) automatically.

### 2. Push Changes and Tag
### 2. Push the Version Commit

```bash
# Push the version commit
git push origin main

# Push the tag (this triggers the release workflow)
git push origin --tags
```
Copy link

Copilot AI Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Critical documentation issue: By default, npm version creates BOTH a commit AND a git tag locally. The documentation states it only creates a commit (line 25), which is incorrect and will cause issues.

When users run npm version patch and then git push origin main, the local tag will also be pushed (if they have push.followTags=true in their git config) OR it will remain locally and conflict with the workflow-created tag.

Solutions:

  1. Update the documentation to use --no-git-tag-version flag (recommended):

    npm version patch --no-git-tag-version
    git add package.json package-lock.json
    git commit -m "chore: bump version to X.Y.Z"
  2. OR add a step to delete the local tag before pushing:

    npm version patch  # creates commit + tag
    git tag -d v0.1.1  # delete local tag
    git push origin main
  3. OR add git-tag-version=false to .npmrc to disable tag creation globally.

Copilot uses AI. Check for mistakes.
@@ -206,6 +193,7 @@ For backporting fixes to older major versions:
1. Create a maintenance branch: `git checkout -b v0.x`
2. Cherry-pick or apply fixes
3. Update version: `npm version patch`
Copy link

Copilot AI Feb 19, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The documentation for maintenance releases needs to specify which branch to target when running the workflow. The gh workflow run command should include a --ref parameter to run on the maintenance branch.

Update line 195 to:

gh workflow run release.yml --ref v0.x

Otherwise, the workflow will run on the default branch (main) instead of the maintenance branch, which would release the wrong version.

This issue also appears on line 35 of the same file.

Copilot uses AI. Check for mistakes.
@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects built successfully.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

Bun Build Test Results

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

All Bun projects built and tested successfully.

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

Deno Build Test Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests completed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

🟢 Smoke Test PASSED

Last 2 Merged PRs:

Test Results:

  • ✅ GitHub MCP
  • ✅ Playwright (github.com title contains "GitHub")
  • ✅ File creation (/tmp/gh-aw/agent/smoke-test-copilot-22168490404.txt)
  • ✅ Bash verification

cc @Mossaka

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

Node.js Build Test Results

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js projects successfully installed dependencies and passed their test suites.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

Smoke Test Results (Run #22168490413)

Last 2 merged PRs: #965, #954

✅ GitHub MCP (list_pull_requests)
✅ Playwright (github.com navigation)
✅ File Write (/tmp/gh-aw/agent/smoke-test-claude-22168490413.txt)
✅ Bash Tool (file verification)

Status: PASS

AI generated by Smoke Claude

@github-actions
Copy link
Contributor

.NET Build Test Results ✅

All .NET projects successfully restored, built, and ran.

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

Project Details

hello-world: Successfully printed "Hello, World!"
json-parse: Successfully parsed JSON and extracted data (Name: AWF Test, Success: True)

AI generated by Build Test .NET

@github-actions
Copy link
Contributor

Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: PASS

All Rust projects built successfully and all tests passed.

AI generated by Build Test Rust

@github-actions
Copy link
Contributor

feat: add ARM64 binary support for awf CLI
docs: add api-proxy image publishing details to release guide
MCP merged PRs ✅ | safeinputs-gh PR list ✅ | Playwright title ✅ | Tavily search ❌
File write ✅ | Bash cat ✅ | Discussion comment ✅ | Build ✅
Overall: FAIL

AI generated by Smoke Codex

@github-actions
Copy link
Contributor

Java Build Test Results

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

All Java projects compiled successfully and all tests passed.

AI generated by Build Test Java

The entire release process is now a single workflow dispatch. Select
the bump type (patch/minor/major) in the UI or pass it via CLI:

  gh workflow run release.yml -f bump=patch

The workflow bumps package.json, commits, tags, builds all artifacts,
and publishes the GitHub release. No local steps required.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

🎬 THE ENDSmoke Claude MISSION: ACCOMPLISHED! The hero saves the day! ✨

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

📰 VERDICT: Smoke Copilot has concluded. All systems operational. This is a developing story. 🎤

@github-actions
Copy link
Contributor

github-actions bot commented Feb 19, 2026

✨ The prophecy is fulfilled... Smoke Codex has completed its mystical journey. The stars align. 🌟

@github-actions
Copy link
Contributor

Bun Build Test Results

Project Install Tests Status
elysia 1/1 PASS
hono 1/1 PASS

Overall: PASS

All Bun projects successfully installed dependencies and passed tests.

AI generated by Build Test Bun

@github-actions
Copy link
Contributor

C++ Build Test Results

Project CMake Build Status
fmt PASS
json PASS

Overall: PASS

All C++ projects built successfully.

AI generated by Build Test C++

@github-actions
Copy link
Contributor

Go Build Test Results

Project Download Tests Status
color 1/1 PASS
env 1/1 PASS
uuid 1/1 PASS

Overall: PASS ✅

All Go projects successfully downloaded dependencies and passed their test suites.

AI generated by Build Test Go

@github-actions
Copy link
Contributor

.NET Build Test Results

Project Restore Build Run Status
hello-world PASS
json-parse PASS

Overall: PASS

Both projects successfully restored NuGet packages, built, and ran without errors.

AI generated by Build Test .NET

@github-actions
Copy link
Contributor

Smoke Test Results (Copilot)

Status: PASS ✅

cc @Mossaka (author)

AI generated by Smoke Copilot

@github-actions
Copy link
Contributor

Rust Build Test Results

Project Build Tests Status
fd 1/1 PASS
zoxide 1/1 PASS

Overall: PASS

All Rust projects built and tested successfully.

AI generated by Build Test Rust

@github-actions
Copy link
Contributor

Build Test: Deno - Results

Project Tests Status
oak 1/1 ✅ PASS
std 1/1 ✅ PASS

Overall: ✅ PASS

All Deno tests completed successfully.

AI generated by Build Test Deno

@github-actions
Copy link
Contributor

Claude Smoke Test Results

Last 2 Merged PRs:

Test Results:

  • ✅ GitHub MCP: Retrieved PR data
  • ✅ Playwright: Page title contains "GitHub"
  • ✅ File Write: Created test file
  • ✅ Bash: Verified file contents

Status: PASS

AI generated by Smoke Claude

@github-actions
Copy link
Contributor

Node.js Build Test Results

All tests completed successfully! ✅

Project Install Tests Status
clsx PASS PASS
execa PASS PASS
p-limit PASS PASS

Overall: PASS

All Node.js projects built and tested successfully.

AI generated by Build Test Node.js

@github-actions
Copy link
Contributor

Java Build Test Results ✅

All Java projects compiled and tested successfully through the firewall.

Project Compile Tests Status
gson 1/1 PASS
caffeine 1/1 PASS

Overall: PASS

Maven proxy configuration: 172.30.0.10:3128 (Squid proxy)

AI generated by Build Test Java

@github-actions
Copy link
Contributor

Merged PRs: feat: add ARM64 binary support for awf CLI; docs: add api-proxy image publishing details to release guide
GitHub MCP merged PR review: ✅
Safeinputs gh pr list: ✅
Playwright github title: ✅
Tavily web search: ❌
File write: ✅
Bash cat verify: ✅
Discussion query + comment: ✅
Build (npm ci && npm run build): ✅
Overall: FAIL

AI generated by Smoke Codex

@Mossaka Mossaka merged commit e656d48 into main Feb 19, 2026
90 of 91 checks passed
@Mossaka Mossaka deleted the feat/simplify-release branch February 19, 2026 20:10
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant