Conversation
Add a PR-gated, fully GitHub-native release pipeline:
- New update-upstream-release.yml: a daily (and on-demand) job that
detects a new upstream syncthing/syncthing stable v2 release, runs the
existing cmd/update-release bump script, and opens a version-bump PR
against v2. It only touches the packaging metadata, so a human reviews
the bump before any signed binary is built.
- build-syncthing-macos.yml: make notarization real (submit --wait, fail
on non-Accepted status, then staple the ticket into the DMG) and add
two jobs that run after a bump PR is merged to v2:
* publish-release: create the GitHub Release with the notarized DMG,
guarded so it only fires when the version tag is new (ordinary v2
pushes stay inert).
* regenerate-appcast: trigger generate-appcast.yml so the Sparkle
auto-updater feed is refreshed, only when a new release was cut.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
asavageiv
marked this pull request as ready for review
September 10, 2026 11:44
Author
|
I'd say the biggest risk here is the |
Add `--timeout 30m` to `notarytool submit --wait` so a stuck submission fails fast instead of holding the macOS runner up to the 6h job limit. Normal submissions finish in 1-5 min; this is just a safety ceiling. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
AI usage note: I generated this with the help of Claude Opus at XHigh effort. I've reviewed every line myself. I am a professional software engineer with 15+ years of experience and was a senior SWE at a FANG company.
The
build-syncthing-macoschanges can be dropped if desired and are definitely more of a guess on my part because I'm not super familiar with the release process. At lease the auto-PR to bump the release version might be useful just as an automatic notification that there's a new reason to release/update syncthing-macos. If we don't want the auto push to Sparkle just from merging the bump PR, let me know and I can adjust.Summary
Automates the currently-manual release process so a new
syncthing-macosrelease is produced whenever upstreamsyncthing/syncthingpublishes a new stable v2 version. A maintainer merges a bump PR before any signed binary is built and shipped to the Sparkle auto-updater.Motivation
Releasing is manual today:
make update-releaselocally to bumpsyncthing/Info.plist+syncthing/Scripts/syncthing-resource.shto the latest upstream tag.v2→build-syncthing-macos.ymlbuilds + signs the DMG and submits it for notarization (without waiting or stapling).generate-appcast.ymlto refresh the Sparkle feed.This PR closes the manual gaps and adds detection of new upstream releases.
Flow
Changes
New —
.github/workflows/update-upstream-release.ymlschedule(06:00 UTC) and on-demand viaworkflow_dispatch.cmd/update-release/update-release.pyto rewrite the packaging metadata to the latest upstream stable v2 release.v2only when the version actually changes; idempotent per version (re-runs refresh the same branch/PR).Changed —
.github/workflows/build-syncthing-macos.ymlnotarize: nowxcrun notarytool submit --wait, fails the job unless the status isAccepted, thenxcrun stapler staples the ticket into the DMG and uploads the stapled artifact. (Previously fire-and-forget, never stapled.)publish-release: creates the GitHub Release with the notarized DMG, deriving the tag from the DMG name (Syncthing-2.1.5-1.dmg→v2.1.5-1). Guarded so it only fires when the tag is new — ordinaryv2pushes stay inert, and merging a bump PR cuts exactly one release.regenerate-appcast: triggers the existinggenerate-appcast.ymlviagh workflow run, only when a new release was actually published.Design decisions
update-release.py'sallow_prerelease=Falsedefault.GitHub Actions is not permitted to create or approve pull requests). Alternative: change thegh pr createstep to use a PAT / GitHub App token.signingandappcastenvironment secrets are used unchanged.Testing
Ran
update-upstream-release.ymlviaworkflow_dispatchin a fork: it detected upstream v2.1.5, bumpedInfo.plist+syncthing-resource.sh, pushed the branch, and attempted to open the bump PR. The only blocker was the "Allow GitHub Actions to create PRs" toggle above. The full signed → notarize → staple → publish → appcast path depends on the repo's environment secrets (which forks don't inherit) and will first run on merge here.Notes / limitations
distVersionbump (the-1suffix), as today.GITHUB_TOKENdon't trigger the PR's own debug build (GitHub anti-recursion); the real build runs post-merge onv2. Use a PAT/App token if PR-time CI is desired.🤖 Generated with Claude Code