Repository navigation
Add macOS DMG installer support - #49
Merged
Merged
Conversation
Extends the OS dispatcher introduced in #37 with a macos branch: - src/os.ts: accept RUNNER_OS=macOS, drop the unsupported-OS error. - src/download.ts: gmat-mac-x64-{V}-signed.dmg URL template with per-version size thresholds (R2026a floor 400 MiB matches the charter and the actual ~455 MiB DMG; R2022a/R2025a are conservative truncation guards). - src/extract.ts: hdiutil attach -nobrowse -readonly -noautoopen on a unique mountpoint under RUNNER_TEMP, locate the GMAT root inside the mount via find BuildApiStartupFile.py (the wrapper folder name is not deterministic across versions), cp -R off the read-only mount into a writable staging dir, then hdiutil detach in finally so a failed copy still releases the mount on self-hosted runners. Closes #38
djankov
marked this pull request as ready for review
May 1, 2026 00:01
3 tasks done
djankov
added a commit
that referenced
this pull request
May 1, 2026
- docs/troubleshooting.md: three new sections for platform-specific failure modes from the Windows (#48) and macOS (#49) installer paths — hdiutil attach failures (busy mountpoint, truncated DMG, permission), the hdiutil detach warning that leaves a stale mountpoint on killed self-hosted runners, and Windows ZIP extraction failures (path-length under MAX_PATH=260 on self-hosted runners). Existing "python is not on PATH" section gets a Windows-specific note covering the WindowsApps store-stub interception and the unpublished-python-version case. - docs/faq.md: new "Are there OS-specific Python gotchas?" entry summarising per-OS quirks, and a dedicated "What about R2023a and R2024a?" entry. The supported-versions entry links to it instead of restating. Closes #45
3 tasks done
djankov
added a commit
that referenced
this pull request
May 1, 2026
- README quick start: matrix is now 3-OS (ubuntu/windows/macos) on a single GMAT version, replacing the single-OS single-version stub. Adds a pointer to the multi-version compatibility recipe for consumers who want to vary GMAT version too. - README roadmap: drops the now-shipped v0.2 row (scope landed in #48/#49/#50/#51/#52) and relabels the new top row as v0.2 (current). - docs/inputs-outputs.md: version input description gains a one-line note that R2023a/R2024a were never released, linking to the canonical FAQ entry. gmat-root output description drops the stale "in v0.1" qualifier (the path is the same in v0.2). - docs/faq.md: download-verification entry drops the "in v0.1" qualifier — the action still does not verify a checksum or signature in v0.2; supply-chain hardening remains on the v0.3 roadmap. Closes #43
djankov
added a commit
that referenced
this pull request
May 1, 2026
- Populate CHANGELOG.md with the [0.2.0] - 2026-05-01 section, aggregated from the 11 merged v0.2 PRs (#47, #48, #49, #50, #51, #52, #53, #55, #56, #57, #58). - Bump package.json version from 0.1.0 to 0.2.0. The v0.2 row in the README roadmap was already trimmed-and-relabelled (`v0.2 _(current)_`) by #58 ahead of the cut, mirroring the v0.1 cut precedent (#35), so no README change is needed here. Closes #46.
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
macosbranch that downloads the signedgmat-mac-x64-{V}.dmgfrom SourceForge (URL template per macOS DMG installer support #38), mounts it viahdiutil, copies the resolved GMAT root off the read-only mount, detaches infinally, and hands off to the existingBuildApiStartupFile.py+ smoke-check pipeline unchanged.RUNNER_TEMPwith random suffixes so self-hosted runners stay clean and concurrent extracts can't collide. Thefinally-block detach plusio.rmRFon the mountpoint guarantees no stranded mounts even whencp -Rfails.BuildApiStartupFile.pyinside the mount and walking up two levels — same robust patterngmat-run's working macOS CI uses.hdiutil attachruns with-nobrowse -readonly -noautoopenand an explicitly empty stdin (Buffer.alloc(0)) to defend against any interactive license-acceptance prompt blocking the runner.path.joinis already used everywhere,io.which('python', true)resolves the same way on macOS as on Linux,RUNNER_TEMPis set on hosted macOS runners, andcache.tsreadsRUNNER_OS/RUNNER_ARCHdirectly so the cache key picks upmacOS-X64(orARM64under Rosetta) for free.cp -Ron BSDcppreserves symlinks, and Mach-O code signatures live inside the binaries themselves so universal binaries and signed dylibs survive the copy without extra flags.README.mdand the docs landing surface (index,getting-started,faq) to reflect macOS support and rolls macOS into the v0.2 roadmap row.dist/so theVerify dist/ matches src/CI step stays green.Cross-platform self-CI for
macos-latestis intentionally not added here — that's #40's scope.Test plan
npm run format:checkclean.npm run lintclean.npm run typecheckclean.npm run buildclean;git diff dist/clean after rebuild.buildandself-testjobs pass on the PR.macos-latestmatrix self-test — no live macOS runner in this workspace.Closes #38