Skip to content

Offload macOS .app assembly off the build->test critical path#563

Open
Keno wants to merge 1 commit into
JuliaCI:mainfrom
KenoAIStaging:macos-app-offload-to-linux
Open

Offload macOS .app assembly off the build->test critical path#563
Keno wants to merge 1 commit into
JuliaCI:mainfrom
KenoAIStaging:macos-app-offload-to-linux

Conversation

@Keno

@Keno Keno commented Jul 12, 2026

Copy link
Copy Markdown
Member

Take advantage of JuliaLang/julia@1fd3353, which turns the macOS .app into a pure repackage of the tree .tar.gz (contrib/mac/app no longer needs osacompile/plutil and runs on any host). The mac build jobs therefore no longer need to assemble the .app themselves.

  • build_julia.sh: stop assembling+staging the .app on the mac builders. The build now stages only the tree .tar.gz, so it finishes sooner and the test jobs waiting on it start sooner.

  • utilities/macos/assemble_app.sh (new): shared recipe that builds the unsigned Julia-X.Y.app from a downloaded .tar by driving contrib/mac/app's Makefile with MAKE=true (neutralizing its recursive make binary-dist, which would otherwise trigger a full source build) and an empty codesign identity.

  • julia-pr: a small Linux app-builder (stage_macos_app.{yml,arches,sh}) downloads the staged tree tarball and repackages+stages the .app. It depends only on the matching build_ job -- so it runs in parallel with the tests, off the build->test critical path -- and is gated if: pipeline.slug == "julia-pr" (juliaup fetches PR .apps from the ephemeral-pr bucket; julia-ci gets its .app from publish instead).

  • julia-ci: upload_julia.sh now assembles the unsigned .app from the .tar it already downloads (via the shared script) before signing, instead of downloading a staged .app that the build no longer produces.

Also bump the x86_64-apple-darwin build timeout 80 -> 90.

Take advantage of JuliaLang/julia@1fd3353, which turns the macOS .app into
a pure repackage of the tree .tar.gz (contrib/mac/app no longer needs
osacompile/plutil and runs on any host). The mac build jobs therefore no
longer need to assemble the .app themselves.

  * build_julia.sh: stop assembling+staging the .app on the mac builders.
    The build now stages only the tree .tar.gz, so it finishes sooner and
    the test jobs waiting on it start sooner.

  * utilities/macos/assemble_app.sh (new): shared recipe that builds the
    unsigned Julia-X.Y.app from a downloaded .tar by driving
    contrib/mac/app's Makefile with MAKE=true (neutralizing its recursive
    `make binary-dist`, which would otherwise trigger a full source build)
    and an empty codesign identity.

  * julia-pr: a small Linux app-builder (stage_macos_app.{yml,arches,sh})
    downloads the staged tree tarball and repackages+stages the .app. It
    depends only on the matching build_ job -- so it runs in parallel with
    the tests, off the build->test critical path -- and is gated
    `if: pipeline.slug == "julia-pr"` (juliaup fetches PR .apps from the
    ephemeral-pr bucket; julia-ci gets its .app from publish instead).

  * julia-ci: upload_julia.sh now assembles the unsigned .app from the .tar
    it already downloads (via the shared script) before signing, instead of
    downloading a staged .app that the build no longer produces.

Also bump the x86_64-apple-darwin build timeout 80 -> 90.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@Keno
Keno requested a review from DilumAluthge July 12, 2026 09:50
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