Repository navigation
Conversation
Pushing a protected vX.Y.Z or vX.Y.Z-beta.N tag now builds every desktop platform and publishes it on the Releases page: a stable tag as Latest, a beta as a prerelease. The macOS, Windows, Linux, updater-signing and publication jobs move from release.yml into the reusable desktop-build.yml, which previews and stable releases both call, so both lanes publish the same verified assets. Stable builds embed the stable-feed endpoint. Serving a stable release to installed apps stays a separate, approved dispatch (desktop-stable-feed.yml), which reuses the preview feed's signature, endpoint and rollback gate. Betas never reach that feed. Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz> Signed-off-by: Bradley Axen <baxen@squareup.com>
Collaborator
Author
|
🤖 Review from drone00 (agent reviewer) at head Verdict: Not ready. Two small should-fix items, no blockers. The design matches what was agreed, and preview behaviour is preserved. What's solid
Should-fix
Optional
Evidence (at
|
…ironment Promotion now requires a published, non-draft release: a failed publication can leave a draft whose asset URLs 404 publicly. The stable feed dispatch fails closed unless desktop-stable-feed has required reviewers and deploys only from main, since GitHub creates a missing environment without protection. Tests run the real ruleset, environment and release jq filters against fixtures. Co-authored-by: mbot <3754f8729004d95654c46dbab3129e4ab9ef05cc2534e2a3fbfc155983bd637b@buzz.block.builderlab.xyz> Signed-off-by: Bradley Axen <baxen@squareup.com>
Collaborator
Author
|
🤖 Re-review from drone00 at head
No regressions in the diff since
|
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.
What
A public stable release lane for the desktop app, in GitHub Actions only (buzz-releases and its
desktop-v*tags are unchanged).desktop-stable.ymlruns on a pushedv[0-9]*tag (preview tagsv*-preview.*are filtered out). Before building it requires:vX.Y.ZorvX.Y.Z-beta.N;refs/tags/v*;mainhistory.It then builds every platform with the tag's version, not
tauri.conf.json's. A stable tag publishes a full release marked Latest; a beta publishes a prerelease. Both use--verify-tag, so they publish on the existing tag and never create one.desktop-build.yml(new, reusable) holds the macOS aarch64/x64 sign-and-notarize, Windows, Linux, updater-signing and publication jobs moved out ofrelease.yml. Previews, Windows/Linux candidates and stable/beta releases all call it, so they publish the same twelve assets and the sameSHA256SUMS. Stable and beta builds embed the sameBUZZ_UPDATER_PUBLIC_KEYwith…/stable-feed/latest.json, and each platform's existing endpoint check now checks that endpoint.desktop-stable-feed.ymlis a manual dispatch frommain, behind thedesktop-stable-feedenvironment, that writesstable-feed/latest.jsonfor one version. It runs the preview feed's gate, which is nowscripts/promote-updater-feed.sh, shared with preview promotion: signatures, embedded endpoint/key, no rollback, read-back compare. It accepts onlyX.Y.Zand a published, non-draft, non-prerelease release, so betas never reach the stable feed. It also refuses to run unless the environment has required reviewers and deploys only frommain, because GitHub creates a missing environment without protection (needsactions: read).scripts/preview-feed.mjspicks the feed, endpoint and version format from the version itself.docs/releases.mdcovers the new lane, the feed, and the admin setup.Previews are unchanged: same versions, assets, checks, feed promotion and pruning, except that preview promotion now also refuses a draft release (the shared gate checks
isDraft). The visible differences are check names (desktop / …), the publish job's name, and the macOS version step, which now runsscripts/candidate-version.mjslike Windows/Linux instead of an inline copy. Preview pruning only matches-preview.N.Mtags, and its test now covers a beta prerelease and thestable-feedrelease as well.tauri.conf.jsonis not changed.Admin setup needed before the first tag
refs/tags/v*, excluderefs/tags/v*-preview.*, restrict creation/update/deletion, block force pushes, bypass = admin role. The workflow refuses to publish until this ruleset exists.v…-previewtags withGITHUB_TOKEN(gh release create --target), and pruning deletes them the same way.GITHUB_TOKENcan't bypass a ruleset, so a ruleset covering all ofv*would break every preview publication and cleanup. Making GitHub Actions a bypass actor would let any workflow on any branch create a stable tag.publish-desktop-release-tag.shrequires thedesktop-v*ruleset to have no exclusions.desktop-stable-feed: required reviewers, custom deployment branch policy with onlymain. Promotion fails until both are set.OSX_CODESIGN_ROLE's OIDC trust policy (see below).Not verified
Whether
GITHUB_TOKENwithactions: readcan read the environment and its branch policies. GitHub documents that permission for these endpoints, but it hasn't run. If it can't, promotion fails closed with an API error.OIDC trust for macOS signing. Tag runs present
sub: repo:block/buzz-app:ref:refs/tags/v…. If the role only trustsrefs/heads/main, stable macOS signing will fail. If it also pinsjob_workflow_reftorelease.yml, moving the job intodesktop-build.ymlwould break previews as well. I can't read the policy from here.No workflow has run yet. Previews run through the reusable workflow for the first time on the next scheduled or manual run after merge. A manual
gh workflow run release.yml --ref mainright after merging is the cheapest end-to-end check.The fnmatch exclusion behaviour (
v*-preview.*matchingv0.7.0-preview.22.1) is from GitHub's documented ruleset syntax. It hasn't been tried on this repository.Validation
node --testondesktop-release,desktop-stable(new),packaging,preview-feed,prune-preview-releasesandbuzz-cli: 32/32 pass.jqfilters against fixture responses indesktop-stable.test.mjs.--target;preview-feed;main;actionlint1.7.7 (with shellcheck) passes onrelease.yml,desktop-stable.ymlanddesktop-stable-feed.yml.desktop-build.ymlreports one SC2015 info on the Linux check that moved verbatim fromrelease.yml, andshellcheckpasses on the new script.tests/integration/*.test.mjs: 300/301 pass. The one failure isworktree-icon.test.mjs"macOS launchers preserve…", which fails on a missingscripts/dev-credential-helper.mjsin its temp checkout and doesn't touch these files.--lateststays forced for stable tags. Leaving it off doesn't help, because the API'smake_latestdefaults totruefor new non-prerelease releases. Holding Latest for an older-line hotfix would need a version comparison, and there's no older line yet.Draft until drone00 has reviewed it and a human has watched the first preview run go through the reusable workflow.