Repository navigation
Harden the sysimage workflow - #153
Merged
Merged
Conversation
The ubuntu-latest build on main died when the runner VM shut down during PackageCompiler's final compile, most likely out of memory. - Add a 24 GB swap file on Linux runners before building. - Log memory, swap and disk every minute during the build; step logs stream live, so this survives a runner dying. - Skip the build when the release already has this platform's image. scripts/sysimage/info.py resolves the environment and prints the image name, which takes minutes where a build takes hours. - Add a `publish` input to manual runs, so the build can be tested without publishing a release. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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.
Why
The Sysimage workflow run for the merge of #150 (run 36340670648) lost its
ubuntu-latestjob. About 6 minutes intoPackageCompiler: compiling incremental system image, the log ends withThe runner has received a shutdown signal. Julia didn't fail; the VM went away, which on GitHub-hosted runners almost always means it ran out of memory. The final compile is the heaviest step, because the generic CPU target compiles each function for several CPU types.Tracing worked, and CI computed the same environment key as a local build (
1c37dac2d47a03b0), so the pinned environment is reproducible across machines.Changes
/mntbefore the build.scripts/sysimage/info.pyresolves the Julia environment and prints the image's key, release tag and asset name. The job skips the build and upload when the release already has that asset, so an unrelatedpyproject.tomlchange no longer costs a multi-hour rebuild. Resolving takes minutes.publishinput for manual runs: it defaults to on. Pushes tomainalways publish.Testing
I'm testing this with a manual run on this branch with
publishoff, so it builds all four platforms without creating a release. I checked the name-and-skip logic locally. The swap and logging steps can only be tested on GitHub.macOS has no swap step, because GitHub's macOS runners don't allow adding swap, and
macos-latesthas only 7 GB of RAM. If macOS runs out of memory too, the fix is a lighter CPU target in CI or a larger runner.🤖 Generated with Claude Code