ci: cache the AppImage's back-end objects for pull requests, and a lighter deps cache #2079
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!2079
Loading…
Reference in a new issue
No description provided.
Delete branch "ci-appimage-faster"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The Linux AppImage job is one of the slowest checks on every pull request (215-335 s for the job in the last 14 runs), and most of that time goes on work that is the same every run: it recompiles the whole Vulkan back end and restores a 2.3 GB cache that is mostly downloads.
Where the time went (per-step times from 14 recent runs, timestamps from the logs of 3):
make_parts.py, 6 zips one after anotherWhat changed:
nx2/build.pyalready keeps an object cache, keyed by each file's source, flags and headers (build-linux/vk-work/objcache). It is now kept withactions/cache, pruned to the objects the build used (asprune_object_cacheinnx2/make_game.pydoes). Pull requests restore it: their own cache, else main's. Pushes to main and releases never restore it and still compile every object, so the nightly and the releases are built exactly as before. The key also names the pinned LLVM (deps.sh) and the container's libc and libstdc++ header packages, because the objects' own keys leave those out. A pull request that changesgpu/vk/*.cpprecompiles only those files; one that changes agpu/vkheader recompiles the back end's ~40 files, but not Eden's or sirit's ~165.build-linux/deps/downloads(about 1.4 of its 2.3 GB).deps.shdownloads a part only when it has not built it yet. The release's downloads-only cache is unchanged.scripts/linux/make_parts.pyzips the six update parts at once, one thread each. The zips have the same bytes and the list keeps its order (checked against the old script on a test AppDir).force-unsafe-ioin the container, which is thrown away after the job.The cache key names changed, so the first run of this rebuilds the dependencies once.
Before/after (this PR's runs):
github-sync referenced this pull request2026-11-12 06:22:54 +00:00