Skip to content

fix(release): build each binary separately to avoid LTO OOM - #765

Merged
twitchyliquid64 merged 1 commit into
mainfrom
tom/release
Jul 15, 2026
Merged

fix(release): build each binary separately to avoid LTO OOM#765
twitchyliquid64 merged 1 commit into
mainfrom
tom/release

Conversation

@twitchyliquid64

@twitchyliquid64 twitchyliquid64 commented Jul 15, 2026

Copy link
Copy Markdown
Member

Summary by CodeRabbit

  • Chores
    • Improved Linux release build reliability by running package builds separately.
    • Increased the Linux amd64 release build timeout to accommodate longer build times.
    • Preserved existing release artifacts and upload behavior.

@coderabbitai

coderabbitai Bot commented Jul 15, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

The release workflow increases the Linux amd64 timeout and changes both amd64 and arm64 static release builds to invoke Cargo separately for mip, minimal, and minimald.

Changes

Linux release build workflow

Layer / File(s) Summary
Sequential package builds
.github/workflows/release.yml
The amd64 job timeout increases from 60 to 90 minutes, and both Linux jobs build mip, minimal, and minimald with separate Cargo commands.

Estimated code review effort: 2 (Simple) | ~10 minutes

Possibly related PRs

Suggested reviewers: norrietaylor

Poem

A rabbit watched the linkers hop,
Three builds now march in line,
mip, minimal, minimald
Each gets its turn to shine.
Ninety minutes for the hare,
And releases cross the finish line!

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title accurately summarizes the main change: building each release binary separately to avoid LTO out-of-memory failures.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/release.yml:
- Around line 83-89: Remove the release workflow edits from this PR, including
the timeout change near timeout-minutes and the related changes at the other
referenced sections, so .github/workflows/release.yml remains unchanged unless
reviewed through the `@gominimal/minimalists` CODEOWNER gate.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 4671cb85-f327-4b07-9813-cdca9cd04a17

📥 Commits

Reviewing files that changed from the base of the PR and between a00bace and 65c7616.

📒 Files selected for processing (1)
  • .github/workflows/release.yml

Comment on lines +83 to +89
# 90m, matching arm64. The build step below links the three binaries one
# at a time, so LTO links that used to overlap now serialize, and this
# job builds minvmd natively on top of them. The old 60m cap was only
# ever measured against the combined build, so it is not evidence this
# shape fits; a cap only bounds a hang, and an early finish bills for the
# time actually used.
timeout-minutes: 90

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '\n== repo files of interest ==\n'
git ls-files '.github/workflows/release.yml' '.github/CODEOWNERS' 'CODEOWNERS' '.github/**' | sed 's#^`#-` #'

printf '\n== search for workflow policy mentions ==\n'
rg -n --hidden --no-messages -S 'CODEOWNERS|codeowner|workflow|\.github/workflows|frozen CI|frozen' . \
  -g '!**/.git/**' -g '!**/node_modules/**' | head -n 200

printf '\n== target file excerpt ==\n'
if [ -f .github/workflows/release.yml ]; then
  wc -l .github/workflows/release.yml
  sed -n '1,320p' .github/workflows/release.yml | nl -ba | sed -n '1,280p'
fi

printf '\n== codeowners files ==\n'
for f in CODEOWNERS .github/CODEOWNERS; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    nl -ba "$f" | sed -n '1,220p'
  fi
done

Repository: gominimal/minimal

Length of output: 12596


🏁 Script executed:

#!/bin/bash
set -euo pipefail

printf '== CODEOWNERS ==\n'
if [ -f .github/CODEOWNERS ]; then
  sed -n '1,220p' .github/CODEOWNERS | cat -n
elif [ -f CODEOWNERS ]; then
  sed -n '1,220p' CODEOWNERS | cat -n
fi

printf '\n== release workflow relevant ranges ==\n'
python3 - <<'PY'
from pathlib import Path
p = Path('.github/workflows/release.yml')
lines = p.read_text().splitlines()
for start, end in [(1,120), (120,170), (220,260)]:
    print(f"\n-- lines {start}-{end} --")
    for i in range(start, min(end, len(lines)) + 1):
        print(f"{i:4d}: {lines[i-1]}")
PY

printf '\n== policy docs excerpts ==\n'
for f in CONTRIBUTING.md CLAUDE.md docs/ci-strategy.md; do
  if [ -f "$f" ]; then
    echo "--- $f ---"
    python3 - <<PY
from pathlib import Path
f = Path("$f")
lines = f.read_text().splitlines()
for i, line in enumerate(lines, 1):
    if "frozen" in line.lower() or "workflow" in line.lower() or "CODEOWNERS" in line:
        print(f"{i:4d}: {line}")
PY
  fi
done

Repository: gominimal/minimal

Length of output: 16808


Route this workflow change through the CODEOWNER gate.
.github/workflows/release.yml is frozen CI infrastructure and owned by @gominimal/minimalists; keep these workflow edits out of this PR unless the workflow owners are reviewing them.
Also applies to: 128-143, 239-246

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/workflows/release.yml around lines 83 - 89, Remove the release
workflow edits from this PR, including the timeout change near timeout-minutes
and the related changes at the other referenced sections, so
.github/workflows/release.yml remains unchanged unless reviewed through the
`@gominimal/minimalists` CODEOWNER gate.

Sources: Coding guidelines, Learnings

@twitchyliquid64
twitchyliquid64 enabled auto-merge (squash) July 15, 2026 17:36
@twitchyliquid64
twitchyliquid64 merged commit 81ff76c into main Jul 15, 2026
27 checks passed
@twitchyliquid64
twitchyliquid64 deleted the tom/release branch July 15, 2026 17:38
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.

2 participants