Repository navigation
Release in one dispatch, build osx-x64 on Apple silicon, prepare 12.1.2 - #18
Merged
Marc-André Moreau (mamoreau-devolutions) merged 3 commits intoOct 30, 2026
Conversation
Add phase=all (now the default) to release.yml. After the existing build and stage jobs, a new pin-release job verifies the staged SHA256SUMS, checks that master still points at the built commit and that vX.Y.Z is free, then commits only host-checksums.txt on that commit, tags it and pushes master and the tag in one atomic, non-forced push. The existing publish and publish-crates jobs then run against that tag from the same run. phase=build and phase=publish keep working as the manual fallback. The commit/tag logic lives in prepare-release.ps1 -CommitAndTag -SourceRevision, so the manual path can use it too and the helper regression test covers it. The push uses GITHUB_TOKEN, or the optional RELEASE_PUSH_TOKEN secret when master or tags gain protection rules. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Marc-André Moreau (mamoreau-devolutions)
requested a review
from a team
as a code owner
October 30, 2026 12:47
Generated with `rust/prepare-release.ps1 -Version 12.1.2` (no hand edits): the three crates, the exact rustolonia-sys pin, release-manifest.json and SharedVersion.props move to 12.1.2, host-checksums.txt is cleared, and Cargo.lock plus the in-repository apps' lock files pick up the new crate versions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The macos-15-intel job was the slowest in both workflows: about an hour for the CI release gate (osx-arm64: ~30 min) and 21 minutes for the release host build (next slowest: 13). - release.yml builds the osx-x64 host on macos-14 with the x86_64-apple-darwin Rust target and installs Rosetta 2 if needed, so the standalone-app smoke tests still launch the x64 app. - test-host-download.ps1 builds with --target for an osx-x64 RID on an arm64 Mac (Rosetta launches it) and rejects other cross RIDs early. - CI drops osx-x64 from the native release gate; the existing cross-build (osx-x64) job on macos-14 now also packages the host tarball and runs the same standalone-app smoke test under Rosetta, rehearsing the release path on every PR. x64 macOS no longer runs the managed test suite or native-hardware smoke tests in CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Marc-André Moreau (mamoreau-devolutions)
merged commit Oct 30, 2026
9f48c24
into
master
9 checks passed
Marc-André Moreau (mamoreau-devolutions)
deleted the
claude/release-oneshot-d1ef47
branch
October 30, 2026 14:38
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.
Summary
This PR also prepares 12.1.2:
rust/prepare-release.ps1 -Version 12.1.2, no hand edits. That bumps the three crates, the exactrustolonia-syspin,release-manifest.jsonandSharedVersion.props, clearshost-checksums.txt, and refreshesCargo.lockand the rustolonia entries in the in-repository apps' lock files. After it merges, the 12.1.2 release is the one-dispatch command below.After the version bump is merged, a single dispatch of Release now does the whole release:
phase=all(now the default). It runsversion→build(6 RIDs) →stage-release(unchanged) → newpin-release→ existingpublish→ optionalpublish-crates.pin-release(contents: write):github.sha) and downloads the staged artifact from the same run, then re-verifies it withsha256sum --check;masterno longer points at the built commit or ifvX.Y.Zalready exists;prepare-release.ps1 -Checksums -SumsFile … -CommitAndTag -SourceRevision $GITHUB_SHA, which makes "Pin rustolonia X.Y.Z release host checksums". That commit's parent is the build commit and it changes onlyhost-checksums.txt. The script also creates the annotated tagvX.Y.Zand refuses a dirty tree, an existing tag, a different HEAD, or any other changed file;git push --atomic(never forced). If master moved or the tag appeared in the meantime, nothing is pushed. I checked this behaviour against a local bare repo.publish/publish-cratesare reused rather than copied:phase=allthey take the artifacts from the same run, usegithub.shaas the build source, and also require the tag to point at the commitpin-releasepushed.host-checksums.txt.phase=publishthe behaviour is unchanged: it validates thebuild_run_idrun and downloads from it.phase=build/phase=publishkeep working as the manual fallback. Withphase=all, theversionjob also rejectsbuild_run_id, and rejectsdraftcombined withpublish_crates, before the expensive builds start.GITHUB_TOKEN, or the optional repository secretRELEASE_PUSH_TOKENwhen it is set.rust/PRODUCTIZATION.mdnow describes the one-dispatch path first, including recovery, and keeps the manual path as a fallback (examples updated to 12.1.2).osx-x64 on Apple silicon
The
macos-15-inteljobs were the slowest in both workflows. In CI the release-gate job took about an hour, against ~30 min for osx-arm64. In the release, the host build took 21 min; the next slowest took 13.macos-14, using thex86_64-apple-darwinRust target.test-host-download.ps1now passes--targetin that case.cross-build (osx-x64)job onmacos-14now also packages the host tarball and runs the same standalone-app test under Rosetta. Every PR therefore rehearses the release's osx-x64 path.Owner configuration
Nothing is needed for 12.1.2. Today
masterhas no branch protection and the repository has no rulesets, soGITHUB_TOKENwithcontents: writecan push. As before, the workflow-permissions setting must allowcontents: write; it already does, because publish uses it.If
masterorv*tags are protected later, do one of these:RELEASE_PUSH_TOKEN: a fine-grained PAT for an account on the bypass list, with Contents: Read and write on this repository only.Rules that require signed commits are not supported by this path; use the manual path.
A checksum commit pushed with
GITHUB_TOKENdoes not trigger Avalonia Rust CI. That is expected.Verification
pwsh rust/tests/test-build-app.ps1passes. It now exercises-CommitAndTagin a scratch git repo: the dirty-tree and wrong-source refusals, the parent and tag target, the annotated tag, a commit that touches one file, an existing tag, and no-op checksums.The workflow YAML parses and the job graph is as intended.
actionlintwas not available locally.Not run: the workflow itself. These parts are checked only by reading:
!cancelled()job conditions;download-artifact@v4reading the same run's artifact when no token is passed;gh run rerun --failedreusing artifacts and outputs from the earlier attempt.The first
phase=allrun (12.1.2) is the real test.No new third-party actions; only
actions/checkoutandactions/download-artifactare used, per the CI action policy.🤖 Generated with Claude Code