fix(ci): bump MACOSX_DEPLOYMENT_TARGET from 10.9 to 12.0#1363
Conversation
|
@greptileai review |
Greptile SummaryThis PR aligns the macOS release builds with the Swift helper’s minimum deployment target. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (1): Last reviewed commit: "fix(ci): bump MACOSX_DEPLOYMENT_TARGET f..." | Re-trigger Greptile |
Greptile SummaryThis PR raises the deployment target in both macOS release jobs. The main changes are:
Confidence Score: 4/5Both release jobs can produce native artifacts that require macOS 14, including bundles that still declare support for older systems.
.github/workflows/release.yml Important Files Changed
Reviews (2): Last reviewed commit: "fix(ci): bump MACOSX_DEPLOYMENT_TARGET f..." | Re-trigger Greptile |
| env: | ||
| AW_EXTRAS: true | ||
| MACOSX_DEPLOYMENT_TARGET: 10.9 | ||
| MACOSX_DEPLOYMENT_TARGET: "14.0" |
There was a problem hiding this comment.
Job-Wide Target Raises Binary Minimum
This job passes MACOSX_DEPLOYMENT_TARGET=14.0 to every child build, including Cargo, native Python extensions, and delegated submodule builds. Any resulting Mach-O artifact can require macOS 14, causing the packaged application to fail during loading on macOS 11–13 even when only the Swift helper needed the higher target.
There was a problem hiding this comment.
Now moot at 12.0 — that's the measured floor of the Swift helper itself (Task needs 10.15, Date.now needs 12), so no artifact gets a higher requirement than the helper already imposes. The job-wide setting is intentional so all binaries share one floor, and the bundle's LSMinimumSystemVersion now derives from the same variable (d620cc5).
| AW_EXTRAS: true | ||
| TAURI_BUILD: true | ||
| MACOSX_DEPLOYMENT_TARGET: 10.9 | ||
| MACOSX_DEPLOYMENT_TARGET: "14.0" |
There was a problem hiding this comment.
Bundle Minimum No Longer Matches
The Tauri job applies the macOS 14 target to all native compilation, while scripts/package/build_app_tauri.sh still declares LSMinimumSystemVersion as 10.14. On macOS 10.14–13, users can receive a bundle that advertises compatibility but fails when dyld loads an executable or library built by this job.
There was a problem hiding this comment.
Fixed in d620cc5 — LSMinimumSystemVersion now derives from ${MACOSX_DEPLOYMENT_TARGET:-12.0}.
The submodule bump in 372fd95 pulled in aw-watcher-window#126, which builds the Swift helper with -target $(arch)-apple-macosx$(MACOSX_DEPLOYMENT_TARGET) (default 14.0, env-overridable). The bundle workflow still exported 10.9 — below rustc's 10.12 floor and Swift Foundation's 10.10 minimum — so the macOS Build step failed with: aw_watcher_window/macos.swift: error: 'URL' is only available in macOS 10.10 or newer 12.0 is the Swift helper's true floor (Swift concurrency needs 10.15, Date.now needs 12; verified by compiling macos.swift at 10.12/10.13/ 10.15/12.0 for both arches). Unlike upstream's 14.0 default, it keeps a future x86_64 build (#1263) usable on Intel Macs back to ~2014-15 (Monterey) instead of 2018+ (Sonoma), and still avoids the #125-class Sonoma crash caused by inheriting the runner-default macOS 15 target.
ac09d9a to
24b4986
Compare
TimeToBuildBob
left a comment
There was a problem hiding this comment.
The 12.0 revision fixes the concrete master failure, and both macOS jobs passed on the previous run at 14.0. One compatibility mismatch remains before merge: scripts/package/build_app_tauri.sh still emits LSMinimumSystemVersion=10.14, while this change compiles all native Tauri-job artifacts with MACOSX_DEPLOYMENT_TARGET=12.0. The app would advertise support for 10.14–11 even though its binaries may require 12.
Please change that plist value to 12.0 in this PR (ideally derive it from ${MACOSX_DEPLOYMENT_TARGET:-12.0} so the build target and advertised floor cannot drift again). The Qt/PyInstaller bundle does not currently declare an equivalent minimum in aw.spec, so that mismatch is specific to the Tauri bundle.
Separately, run 29907762087 also had an unrelated flaky-looking Tauri macOS test failure in aw-client: both eager RequestQueue.register_bucket tests failed even though the same SHA passed on Linux/Windows and the replacement PR run's macOS job passed. I would not broaden this CI repair PR for that unless it recurs.
…RGET The Tauri app bundle hardcoded LSMinimumSystemVersion=10.14 while its binaries are now built with MACOSX_DEPLOYMENT_TARGET=12.0, so the bundle would advertise support for macOS 10.14-11 and then fail at dyld load. Derive the plist value from the same variable (defaulting to 12.0) so the build target and advertised floor cannot drift again.
|
Addressed the review in d620cc5: |
TimeToBuildBob
left a comment
There was a problem hiding this comment.
d620cc5 does exactly what I asked for — LSMinimumSystemVersion now derives from ${MACOSX_DEPLOYMENT_TARGET:-12.0} so the advertised floor can't drift from the build target again. Both Greptile P1 threads are resolved. LGTM, merging when CI clears.
) 14.0 (#126) was chosen to stop the runner-default target (macOS 15) from leaking into the binary, not because the code needs macOS 14 APIs. The actual floor is macOS 12: Swift concurrency (Task) needs 10.15 and Date.now needs 12; the helper compiles cleanly at 12.0 for both x86_64 and arm64, and fails at 11.0 and below. Lowering the floor keeps the helper usable on Monterey-era machines (Intel Macs back to ~2014-15) ahead of restoring x86_64 bundle builds (ActivityWatch/activitywatch#1263), and matches the bundle repo which now builds everything with MACOSX_DEPLOYMENT_TARGET=12.0 (ActivityWatch/activitywatch#1363). Still fixes the #125 Sonoma dyld crash, which only required an explicit target <= the user's OS. Verified locally: swiftc -target arm64-apple-macosx12.0 builds and otool reports 'minos 12.0'.
Adds macos-15-intel to both the Qt and Tauri build matrices, restoring Intel macOS artifacts that were dropped when the matrix moved to macos-latest (arm64) — see #1263. GitHub retired the free macos-13 x86_64 image, but macos-15-intel is its designated standard-image successor (distinct from the paid -large runners). With MACOSX_DEPLOYMENT_TARGET=12.0 (#1363) the x86_64 artifacts support Intel Macs back to ~2014-15 (Monterey). Artifact names already use uname -m (#1262), macOS steps key off runner.os, and signing/ notarization run per-job, so no other changes are needed.
Problem
The submodule bump (372fd95) pulled in ActivityWatch/aw-watcher-window#126, which compiles the Swift helper with
-target $(arch)-apple-macosx$(MACOSX_DEPLOYMENT_TARGET), defaulting to 14.0 but overridable via env (?=). This workflow still exportedMACOSX_DEPLOYMENT_TARGET: 10.9— below rustc's 10.12 floor (#1327) and Swift Foundation's 10.10 minimum — so both macOS jobs on master (run 29907762087) failed compilingmacos.swift:Fix
Set
MACOSX_DEPLOYMENT_TARGET: "12.0"in both macOS build jobs.Why 12.0 and not upstream's 14.0: 14.0 in aw-watcher-window#126 was chosen to stop the runner-default (macOS 15) target from leaking in — not because the code needs macOS 14 APIs. Compiling
macos.swiftat various targets (both arches) shows the true floor is 12.0: Swift concurrency (Task) needs 10.15,Date.nowneeds 12. Targeting 12.0:Current builds are arm64-only, so today this only affects arm64 (floor 11.0 anyway); the Intel-relevant part matters when #1263 restores x86_64 artifacts.
Follow-up worth doing upstream: lower aw-watcher-window's Makefile default (and its minos CI check) from 14.0 to 12.0 to match.
Context
Last blocker for re-cutting the v0.14.0b2 release (signing + notarization fixed in #1362 and via secret rotation; see #1339).