Skip to content

Attach the engine for Intel Macs to each release - #54

Merged
watzon merged 1 commit into
mainfrom
feature/intel-engine
Oct 27, 2026
Merged

watzon merged 1 commit into
mainfrom
feature/intel-engine

Conversation

@watzon

@watzon watzon commented Oct 27, 2026

Copy link
Copy Markdown
Owner

What changed

Each release now has a fifth engine file: sayso-engine-<version>-macos-x86_64.tar.gz, with its .sha256. It is the same Swift engine, built for Intel Macs. Sayso itself still runs on Apple silicon only.

  • scripts/build-engine-x86_64.sh is new. It cross-compiles the engine (swift build --arch x86_64), strips it, signs it like the engine of the app (same identity, identifier dev.sayso.Sayso.engine, entitlements, hardened runtime, timestamp), and notarizes it. SAYSO_SIGN_IDENTITY=- signs ad hoc and skips notarization, for CI and local tests.
  • scripts/notarize-lib.sh is new. It holds the notarize function that was in scripts/release.sh, moved without a change. Both scripts use it.
  • scripts/package-engine.sh reads the architecture of a macOS engine with lipo and puts it in the file name. It stops for a universal binary. On Linux it checks the ELF machine code against the machine. The README text has an Intel note.
  • release.yml: the macOS job builds, signs, and notarizes the Intel engine, packs it with --require-signed, attaches it, and keeps it as the artifact release-engine-macos-x86_64. The manifest job needs the new file.
  • engine-check.yml: new platform macos-x86_64 on the runner macos-15-intel. All macOS jobs now check that the architecture of the engine matches the file name and the runner.
  • ci.yml: new manual job "Engine file, macOS x86_64 (manual)". It builds the engine with an ad hoc signature and feeds engine-check.
  • Docs: docs/releasing.md, docs/extensions.md, CONTEXT.md, crates/sayso-engine-sdk/README.md. find_engine needs no change.

A bare executable cannot have a stapled ticket. macOS looks the notarization ticket up online. The script and the docs say so.

How it was checked

  • shellcheck on the changed scripts and actionlint on the workflows: no new findings.
  • On an Apple silicon Mac: built the Intel engine with SAYSO_SIGN_IDENTITY=- scripts/build-engine-x86_64.sh, packed it with scripts/package-engine.sh, unpacked it, and ran the core level of the conformance suite under Rosetta: 17 checks, 0 failed. lipo -archs says x86_64.
  • Packed an arm64 engine: the file is named macos-arm64. Packed a universal binary: the script stops with an error.
  • Manual CI run on this branch: see the comment below.

What is not checked

  • Signing with the Developer ID and notarization of the bare binary run only in the real Release workflow.
  • Intel runners: GitHub ends them after the macOS 15 image in 2027. The Intel check then needs another machine.

The release gets a fifth engine file, sayso-engine-<version>-macos-x86_64.tar.gz.
scripts/build-engine-x86_64.sh cross-compiles the Swift engine, strips it, signs
it like the engine of the app, and notarizes it. scripts/package-engine.sh now
reads the architecture of a macOS engine with lipo, so an arm64 engine can
never get the x86_64 name. The notarize function moves to scripts/notarize-lib.sh
so both scripts use it. The engine check runs on macos-15-intel, the manifest job
needs the new file, and CI has a manual job for it. Sayso itself stays Apple
silicon only.
@watzon

watzon commented Oct 27, 2026

Copy link
Copy Markdown
Owner Author

Manual CI run on da93b03: success for all jobs, including Engine file, macOS x86_64 (manual) and Engine file check / macos-x86_64 (runner macos-15-intel). https://github.com/watzon/sayso/actions/runs/40581523637

@watzon
watzon merged commit 250a556 into main Oct 27, 2026
33 checks passed
@watzon
watzon deleted the feature/intel-engine branch October 27, 2026 21:41
@watzon watzon mentioned this pull request Oct 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant