Repository navigation
ci(release): speed up multi-platform image builds - #177
Merged
Merged
Conversation
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.
Background
Multi-platform releases rebuild the frontend under ARM64 QEMU and do not reuse the previous release tag's GitHub Actions cache. The 0.17.4 image build and push took 12m44s with no cached BuildKit steps; its ARM64 frontend build took 323.4s compared with 56.4s on AMD64.
An existing assistant completion test can also read its shared in-memory SQLite connection while the worker is still writing the terminal event, causing intermittent release-test failures.
Root-only Python ignore patterns also allow test-generated bytecode and package metadata into the build context, invalidating the Python dependency cache between otherwise identical releases.
Changes
$BUILDPLATFORM, allowing both target images to share the native frontend build.:buildcachetag withmode=max.VERSIONimmediately before writing the version file so changing the version does not invalidate system dependency installation..docsartifacts from the build context.Validation
pnpm --dir frontend check:ui— passed..venv/bin/pythonwith PyYAML — parsed all five workflow files successfully.git diff --check— passed..venv/bin/python -m pytest tests/test_assistant_task_runner.py tests/test_assistant_task_events.py -q— 21 passed.d5c88c1), including package imports, Chinese/English PDF export, production screenshots, HTTP startup, and frontend serving.linux/amd64,linux/arm64andpush_latest=false. Each completedpython -m pytest tests/ -x -qwith 1013 passed / 3 skipped andpython -m pytest packages/marketdata/tests -qwith 188 passed.VERSION.VERSION, identical sets of 69 static files, and no generated Python cache entries in the application source layer.latestmanifest still matches the published 0.17.4 image. Local QA artifacts are excluded from this PR.The final warm build changed only the version input; unchanged dependencies and source allowed cache reuse. The test dispatch skips release-note publication and notifications.
Boundaries and risks
Python dependency installation and runtime images continue to use the target architecture because their native dependencies must match that architecture. Cold builds or changed dependencies/local packages still require installation. These are observed warm-cache measurements rather than guaranteed timings for every release. Test image tags are separate from production versions.
Follow-up
Evaluate native ARM release runners if dependency changes still make cold ARM64 builds a significant bottleneck after these cache improvements.