The app called the GitHub releases API from ProjectSelectionComponent.init
to decide whether to show an "update available" dialog. That is an
unprompted network request before the user has done anything, which has
been raised as a privacy concern.
The release notes are already in the repo at release time, so bake them
in instead. prepareForRelease writes the new CHANGELOG.md entry to
common/src/commonMain/composeResources/files/changelog.md and commits it
alongside the version bump, so the resource cannot drift from the version
in libs.versions.toml.
On load, ChangelogRepository compares the baked entry's version against
lastSeenChangelogVersion in global settings and shows a "What's New"
dialog when they differ. Dismissing records the version. Fresh installs
are seeded as already-seen, so only upgrading users get the popup;
the old lastDismissedUpdateVersion key is dropped, which is safe because
the TOML serializer ignores unknown keys.
About drops its update check entirely and gains two buttons: Changes,
which reopens the dialog with no network, and GitHub Release, which opens
the browser.
VersionCheckRepository stays for the protocol mismatch dialog, which only
appears after the user has connected to a sync server and exists to tell
them which version to get. It keeps its automatic check and is now that
repository's only consumer.
Links in the notes are clickable via linkifyChangelog, which handles
[label](url) and bare urls, including urls containing parentheses. It is
deliberately not a markdown renderer: entries lead with [New] / [Fix]
tags that a real parser mangles.
App stores reject release notes that describe anything but the app, so
the release dialog now has a Full tab and an App stores tab. Play,
F-Droid, macOS, iOS and Flathub take the app-only notes; CHANGELOG.md
and the GitHub release keep the full text.
Entries are filtered by audience tag: an opening [Fix/Web] tag, with or
without a leading dash, and a single-word Web:/Server: label. Prose that
merely mentions a server keeps its bullet. Everything removed is listed
on the App stores tab.
Truncation now works on whole entries, so a skipped bullet takes its
continuations and sub-bullets with it, pruned headers do not spend
budget, and the ellipsis appears only when something was left out.
A release with no store notes leaves the store metadata untouched
instead of blanking it.
The repository moved from github.com/Wavesonics/hammer-editor to
github.com/Darkrock-Studios/hammer-editor. Update all URLs across
source, build scripts, web templates, docs, store metadata, and
test fixtures.
Introduce a SERVER platform (tag token `server`) and a third release
scope alongside All / Targeted. A server-only release produces a
`vX.Y.Z+server` tag, which matches none of the per-store publish jobs in
publish-release.yml, so no client app store upload runs while the server
distribution still builds and deploys out of band.
isPlatformReleaseTag now recognizes `+server`, so backout/revert clean it
up like any other release tag.
Pass -u gh-releases-zsync to appimagetool so the Linux AppImage carries
update metadata and emits a .zsync file, and upload that file to the
release. Closes#478
- Switch to FlatLaf (Darcula) for an IntelliJ-grade look and feel.
Lives in buildSrc only — never ships in the released app.
- Restructure the dialog into TitledBorder sections: Version,
Publish scope, Will push tag, Changelog.
- Replace the always-on checkbox grid with an All / Targeted scope
toggle. Full release (the common case) is now one click and shows
the bare vX.Y.Z tag; Targeted enables the per-store checkboxes.
- Make the computed tag the dialog's focal point — large monospaced
bold, italic + dimmed when no platforms are picked.
- Right-align Commit button, live-update window title to show the
version transition, bump frame size for more changelog room.
We've run into many problems where everything publishes fine, except 1 store. This provides a way to unblock that one store without pushing to the rest.