fix(release): build each binary separately to avoid LTO OOM - #765
Conversation
📝 WalkthroughWalkthroughThe release workflow increases the Linux amd64 timeout and changes both amd64 and arm64 static release builds to invoke Cargo separately for ChangesLinux release build workflow
Estimated code review effort: 2 (Simple) | ~10 minutes Possibly related PRs
Suggested reviewers: Poem
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
There was a problem hiding this comment.
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
📒 Files selected for processing (1)
.github/workflows/release.yml
| # 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 |
There was a problem hiding this comment.
📐 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
doneRepository: 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
doneRepository: 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
Summary by CodeRabbit