WIP: ci: Tidy CI pipeline for readability and performance #924
Closed
tcpipuk
wants to merge 1 commit from
tom/fixes
into main
pull from: tom/fixes
merge into: continuwuation:main
continuwuation:main
continuwuation:ci-deb
continuwuation:tom/git-timestamps
continuwuation:renovate/https-github.com-actions-setup-node-5.x
continuwuation:illegal-car-mods
continuwuation:nex/feat/4277-harmonized-reporting-endpoints
continuwuation:tom/ci-fedora-rpm
continuwuation:renovate/https-github.com-actions-github-script-8.x
continuwuation:renovate/https-github.com-actions-checkout-5.x
continuwuation:renovate/major-github-artifact-actions
continuwuation:jade/dep-updates
continuwuation:tom/buildkit
continuwuation:hydra/public
continuwuation:nex/feat/force-leave-room
continuwuation:renovate/actions-checkout-5.x
continuwuation:nex/feat/manual-extremities
continuwuation:jade/renovate-config-changes
continuwuation:nex/fix/sync/leave-omission
continuwuation:renovate/rand-0.x
continuwuation:renovate/axum-client-ip-0.x
continuwuation:renovate/axum-monorepo
continuwuation:jade/rocksdb-10-5
continuwuation:nex/fed-improvements
continuwuation:nex/feat/async-media
continuwuation:nex/feat/fast-joins-hack-do-not-use-DO-NOT-USE
continuwuation:jade/musl-images
continuwuation:nex/feat/better-logging
continuwuation:trigger-ci-so-latest-isnt-on-illegal-car-mods
continuwuation:jade/parking_lot
continuwuation:jade/docs-updates-20250701
continuwuation:nex/fix/msc4307
continuwuation:nex/feat/pins-backfill
continuwuation:jade/upload-ci-binaries
continuwuation:jade/admin-command-docs
continuwuation:jade/tuwunel-2025-06
continuwuation:jade/tuwunel-2025-06-old
continuwuation:jade/ai-slop-db-docs
continuwuation:nex/fix-create-auth
continuwuation:jade/version-stats
continuwuation:jade/read-receipts
continuwuation:dahsa_uwu/axum-0.8
continuwuation:jade/rust-toolchain-no-targets
continuwuation:jade/logging-features
continuwuation:jade/syncv5-typing
continuwuation:jade/msc2815
continuwuation:jade/relations
continuwuation:jade/purge-sync-tokens
continuwuation:morguldir/see-eye
continuwuation:jade/css-small-screen
continuwuation:nex/wip-751
continuwuation:tuwunel-rebase
continuwuation:test
continuwuation:oddlid/rename-admin-room-bot
continuwuation:strawberry/nix-ci-stuff
continuwuation:strawberry/valgrind
continuwuation:strawberry/morgs-snake-sync-jason-main
continuwuation:newer-media-endpoints
continuwuation:folly-coroutines-async-io
continuwuation:federation-retry-timer-port
continuwuation:bad-attempt-at-extracting-homeserver-signing-key
continuwuation:room-deletion-attempt-do-not-use
1 commit
Author | SHA1 | Message | Date | |
---|---|---|---|---|
b481ff31c0 |
ci: Consolidate workflows and optimise build pipeline performance
Some checks failed
Checks / Build / Publish / Pre-commit & Formatting (pull_request) Successful in 31s
Deploy / Documentation / Build and Deploy Documentation (pull_request) Successful in 36s
Checks / Build / Publish / Clippy and Cargo Tests (pull_request) Successful in 3m21s
Checks / Build / Publish / Build linux/amd64 (pull_request) Failing after 3m41s
Checks / Build / Publish / Build linux/arm64 (pull_request) Failing after 4m12s
Checks / Build / Publish / Publish Multi-Platform (pull_request) Failing after 0s
Merge rust-checks.yml and release-image.yml into unified ci-build.yml
workflow that runs faster and more efficiently. The previous setup ran
4+ parallel jobs immediately (format, clippy, test, builds), causing
resource contention. The new pipeline runs max 2 jobs in parallel at
each stage, catching lint/format issues quickly before attempting
expensive compilation.
Extract all Rust setup logic from both workflows into reusable
rust-with-cache composite action. This replaces 6 separate actions
(rust-toolchain, sccache, timelord, plus inline APT/cache steps) with
a single action that handles:
- Rust toolchain installation with component selection
- Cross-compilation configuration (previously scattered across
release-image.yml)
- System dependency installation with proper error handling
- Comprehensive caching (sccache, cargo registry, cargo target, uv
tools)
- Timeline tracking and performance monitoring
The previous release-image.yml had cross-compilation support but it
was implemented inline with complex environment variables. The new
rust-with-cache action centralises this with proper parameters for
pkg-config paths, foreign architecture setup, and toolchain selection.
Performance improvements make the pipeline fast enough to consolidate:
- Warmed sccache cache shared between check and build stages
- Optimised cargo target cache to exclude incremental/ and binaries
(was caching entire target/ directory via buildkit-cache-dance)
- Add restore-keys fallback for better cache hit rates
- Parallel background tasks for Rust setup while APT runs
- Fail-fast on format/lint errors before expensive compilation
- Enable Haswell CPU optimisations for x86_64 builds (AVX2, FMA, etc.)
- Add cross-language LTO (Link-Time Optimisation) for better performance
Fix ARM64 cross-compilation reliability issues:
- Move APT installations from background to foreground (background
processes would hang during package downloads despite
DEBIAN_FRONTEND=noninteractive)
- Set proper pkg-config environment for cross-compilation
- Configure APT sources to ports.ubuntu.com for foreign architectures
- Replace hardened_malloc with jemalloc (ARM64 unsupported)
Modernisation from previous commit (
|