Skip to content

fix(release): stop merges from publishing, filter prerelease tags, gate manual update in dev builds - #69

Merged
carterscode merged 1 commit into
mainfrom
chore/release-plumbing-fixes
Aug 8, 2026
Merged

fix(release): stop merges from publishing, filter prerelease tags, gate manual update in dev builds#69
carterscode merged 1 commit into
mainfrom
chore/release-plumbing-fixes

Conversation

@carterscode

Copy link
Copy Markdown
Owner

Three independent release-plumbing fixes. None of them are UI-overhaul work — they are pulled out ahead of it so main is safe before the feature branch diverges further.

⚠️ Merging this cuts one final release

The trigger removal only takes effect after it lands. This PR touches both src/** and release.yml, so merging it fires release.yml one last time under the old rules and publishes v0.1.65. Every merge after that is silent.

That release is legitimate — it contains the user-facing fix in #3 below.

1. A push to main no longer publishes

release.yml fired on any push to main touching src/**, installer/**, or the workflow itself, which made merging a PR indistinguishable from cutting a release. v0.1.62, v0.1.63 and v0.1.64 all shipped as a side effect of merging.

 on:
   push:
-    branches: [main]
-    paths:
-      - 'src/**'
-      - 'installer/**'
-      - '.github/workflows/release.yml'
     tags: ['v*.*.*']
   workflow_dispatch:

Publishing now requires an explicit act: push a v*.*.* tag, or run the workflow by hand. Both paths are unchanged. paths: went with branches: — it existed only to narrow the branch trigger, and leaving a path filter on a tag-only trigger would be misleading.

2. The version auto-bump no longer breaks on a prerelease tag

The v*.*.* glob also matches v0.1.65-beta.1. With no filter, $parts[2] becomes "65-beta" and [int] throws — a single tagged prerelease would have broken every subsequent release.

-$latest = (git tag --list 'v*.*.*' --sort=-v:refname | Select-Object -First 1)
+$latest = (git tag --list 'v*.*.*' --sort=-v:refname | Where-Object { $_ -notmatch '-' } | Select-Object -First 1)

dev-build.yml has always had this filter. release.yml never did, despite the project docs claiming both did.

3. "Check now" no longer self-updates a dev build

CheckUpdatesNowButton_Click called UpdateService.CheckLatestAsync() with no guard. In a dev build, clicking it downloaded the newest stable installer and launched it over the running build — the exact self-replacement IsDevBuild() exists to prevent. The startup check has always been gated; this manual path was not.

It now reports that updates are disabled and returns before UpdateService is touched. No XAML change, no orphaned handler.

This is a live shipping bug, independent of the beta-channel work that prompted finding it.

Verification

Build clean (warnings-as-errors), full suite green — 631 tests.

🤖 Generated with Claude Code

…te manual update in dev builds

Three independent release-plumbing fixes, none of them UI-overhaul work.

release.yml no longer fires on a push to main. It published on any push
touching src/** or installer/**, so merging a PR was indistinguishable from
cutting a release -- v0.1.62 through v0.1.64 all shipped that way as a side
effect of merging. Publishing now requires an explicit act: a pushed
v*.*.* tag or a manual workflow_dispatch. Both remain.

The version auto-bump now filters prerelease tags. The 'v*.*.*' glob also
matches v0.1.65-beta.1, and with no filter $parts[2] becomes "65-beta",
which [int] throws on -- a tagged prerelease would have broken every
subsequent release. dev-build.yml has always had this filter; release.yml
did not, despite the docs claiming both did.

The Settings "Check now" button no longer self-updates a dev build. The
startup check has always been gated on App.IsDevBuild(), but this manual
path was not: clicking it in a dev build downloaded the newest stable
installer and launched it over the running build. It now reports that
updates are disabled and returns. Shipping bug, independent of the beta
channel work.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@carterscode
carterscode merged commit 127179f into main Aug 8, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant