Skip to content

Build and draft releases from version tags - #4

Merged
LoganRupe merged 6 commits into
mainfrom
feature/ci/release-workflow
Oct 10, 2026
Merged

LoganRupe merged 6 commits into
mainfrom
feature/ci/release-workflow

Conversation

@LoganRupe

Copy link
Copy Markdown
Owner

Pushing a v* tag now builds the macOS DMG and Windows MSI in Actions and attaches them to a draft release, with the matching CHANGELOG section as notes. You review the draft, then publish it.

  • macOS: the self-signed identity is imported from the MAC_SIGNING_P12 / MAC_SIGNING_P12_PASSWORD secrets into a throwaway keychain. A tag build fails if the secrets are missing; PR and manual runs fall back to ad-hoc signing.
  • Windows: MSI is unsigned (SmartScreen will warn), same as local builds.
  • PRs that touch packaging get a full installer build as artifacts.

Also fixes two Windows release bugs found on the way:

  • Publishing relied on win-*.pubxml profiles that are gitignored and never existed in the repo, so a clean clone built a framework-dependent app. The csproj now sets SelfContained and WindowsAppSDKSelfContained, and publish.ps1 fails if the runtimes are missing from the payload.
  • The About dialog showed 0.5 for 0.5.1; it now shows major.minor.patch.

Not yet tested: installing and launching the CI-built MSI on a real Windows machine.

Add a Release workflow: pushing a v* tag builds the self-signed macOS DMG
(identity imported from repo secrets into a temporary keychain) and the
Windows MSI, then attaches both to a draft release with the CHANGELOG
section as notes. Manual runs build artifacts only.

Windows publishing no longer depends on gitignored publish profiles, which
never existed in the repo, so a clean clone built a framework-dependent app.
The csproj now sets SelfContained and WindowsAppSDKSelfContained, and
publish.ps1 fails if coreclr.dll or the Windows App SDK runtime is missing
from the payload. The About dialog now shows major.minor.patch.
Copilot AI balanced review requested due to automatic review settings October 10, 2026 08:36

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

🟡 Changes recommended

Release credentials can reach PR builds, and reruns can overwrite already-published releases.

2 open findings
What changed in this PR

Automates draft releases from version tags while fixing Windows packaging and version display.

Changes:

  • Adds macOS/Windows installer builds and draft release creation.
  • Ensures Windows publishes are self-contained.
  • Updates release documentation and About-version formatting.
File Description
.github/​workflows/​release.yml Builds installers and creates draft releases.
README.md Documents the release process.
Docs/​Distribution/​Packaging.md Documents CI signing secrets.
CursorFollowWin/​CursorFollowWin.csproj Enables self-contained publishing.
CursorFollowWin/​scripts/​publish.ps1 Validates bundled runtime files.
CursorFollowWin/​SettingsWindow.xaml.cs Displays patch versions.
CursorFollowWin/​README.md Updates publishing instructions.

🧠 Review effort: Balanced


💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +48 to +53
if [ -z "$P12_BASE64" ]; then
if [ -n "$TAG" ]; then echo "::error::MAC_SIGNING_P12 secret is not set"; exit 1; fi
echo "::warning::No signing secret; building ad-hoc signed (artifacts only)"
echo "SIGN_IDENTITY=-" >> "$GITHUB_ENV"
exit 0
fi
Comment on lines +120 to +125
if gh release view "$TAG" >/dev/null 2>&1; then
gh release upload "$TAG" dist/* --clobber
gh release edit "$TAG" --notes-file notes.md
else
gh release create "$TAG" dist/* --draft --verify-tag --title "CursorFollow ${TAG#v}" --notes-file notes.md
fi
- mac: make PassthroughHostingView non-generic. Xcode 26.6's optimizer
  crashes (EarlyPerfInliner) on the deinit of the generic private
  NSHostingView subclass in Release builds; Xcode 27 is fine.
- win: pin the publish output with -o. Without a publish profile the
  default path gains a bin\<platform>\ level and publish.ps1 lost it.
The self-contained publish adds per-language folders of .mui files. WiX
validation rejected them (ICE03 odd .mui language ids, ICE64 per-user
subfolders without RemoveFile rows). Suppress both and remove the whole
install folder on a real uninstall, like the existing data-folder cleanup.
With the Settings window open, Application.Exit closed only some of the
three windows and returned. The window it skipped (the output window in
one run, Settings in another) never got a close, so the WinUI message
loop kept running and the process stayed alive. A trace of Closed events
showed Exit never touched the surviving window. ExitApplication now
closes Settings, the panel and the output window itself, then calls Exit.

Not a regression from the self-contained publish: the framework-dependent
Debug build hangs the same way.

Fixes #5
@LoganRupe
LoganRupe merged commit 4323eec into main Oct 10, 2026
6 checks passed
@LoganRupe
LoganRupe deleted the feature/ci/release-workflow branch October 10, 2026 10:00
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.

2 participants