v1.1.2
Install
Pick your platform on the website,
or take a file below. Every download is listed in SHA256SUMS.txt.
Already running it? It updates itself: open the window and choose Update now,
or run gcloud-dot upgrade.
What changed
Make the two manual release steps repeatable
The macOS disk image is built and notarized here rather than in CI, because
notarization needs an Apple key that is not in the repository's secrets. That
left two things to remember by hand, and the second one was missed on the first
release of the day: CI writes SHA256SUMS.txt before the image exists, and the
in-app updater refuses any download whose hash is not published there, so a DMG
uploaded without amending that file produces an app that declines to install
its own update.
make publish-macos now does both and prints what a client will see.
The winget manifests are generated for the same reason. Three files repeat the
version and one carries a checksum, which is read from the release's own
SHA256SUMS.txt so the manifest describes the artifact people will download
rather than one built locally alongside it.
1.1.2: keep looking for updates, and sweep what the last one left behind
The update check ran once, twenty seconds after launch. This app is built to
sit in the menu bar for weeks, so a release landing on a Tuesday was not
mentioned until something happened to restart the tray, which for a well
behaved background app might be never. It now checks again once a day.
That turns a one-off notification into a daily one, which is its own problem: a
notification a day about the same release teaches people to dismiss this app's
notifications without reading them, and the ones about expiring credentials are
the whole point. So each version is announced once however often it is seen,
while the banner in the window stays, because a banner is a statement rather
than an interruption.
Also sweeps the executable a Windows upgrade renamed aside. The installer tries
to delete it, but at that moment the process holding it is usually still alive,
so the delete is deferred to the next reboot. Doing it at startup, when nothing
holds the file, closes that gap for anyone who does not reboot.
Full changelog: v1.1.1...v1.1.2