CI: consolidate 13 Gitea workflows into one bounded 15-minute required gate #115
Reference in New Issue
Block a user
Delete Branch "%!s()"
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?
Problem
MetaCrate currently has 13 active Gitea Actions workflows. Broad and overlapping path filters cause a normal source change to start several independent jobs on the same ARM64 VPS runner. Each job repeats checkout, toolchain setup, package installation, native dependency preparation, and overlapping Cargo work. This produces long queues, repeated compilation, and poor time-to-signal.
This is a critical CI correctness and runtime bug, not only a cosmetic workflow cleanup. A green result must still mean that the code is ready, but routine validation must complete in about 15 minutes maximum.
Measured baseline
The Gitea API currently reports 13 active workflows and 333 historical runs. Completed runs with valid timestamps show:
Examples: Skia run 324, release-matrix run 322, artifact-audit run 315, and workspace run 236.
The YAML inventory also shows:
FORCE_SKIA_BINARIES_DOWNLOAD.Current workflow inventory
api-surface.ymlartifact-audit.ymlcodegen.ymlconcurrency-audit.ymldocumentation.ymlimaging-meshing.ymljpeg2000.ymlperformance.ymlrelease-candidate.ymlrelease-matrix.ymlrust-workspace.ymlskia.ymlsupply-chain.ymlRequired outcome
ci.ymlworkflow that is the authoritative code-ready signal.metacrate-ci-matrixtool or a cross-platform repository-owned CI driver. YAML must orchestrate it rather than duplicate long command lists.ubuntu-latestonly. Portable Windows and macOS mappings must remain cross-compiled or statically checked from Ubuntu; do not add macOS or Windows Gitea runners.Runtime and caching work
sccache, native artifacts, and pinned audit tools. Keys must include the Rust version, target triple,Cargo.lock, relevant feature/native configuration, and native installer inputs.CARGO_BUILD_JOBS=1everywhere. Keep memory use safe and prove the selected setting with measurements.cargo-denyandcargo-machete; do not compile both tools from scratch on every source push.Skia regression that must be fixed
The exact MetaCrate Skia 0.99.0 binary exists for
aarch64-unknown-linux-gnuwith the requested JPEG/PDF/SVG/textlayout/Vulkan/WebP feature tuple:skia-binaries-a25a0fdb7d90429aa2d1-aarch64-unknown-linux-gnu-jpegd-jpege-pdf-svg-textlayout-vulkan-webpd-webpe.tar.gzThe current downstream workflows set
FORCE_SKIA_BINARIES_DOWNLOAD. In rust-skia 0.99.0 this variable is a repository-testing switch: it asks for a Git hash from theskia-bindingspackage directory. A crates.io dependency directory is not a Git checkout, so selection can return no key and fall through toSTARTING A FULL BUILD. Merely setting the variable to0still activates it because rust-skia checks for presence.The consolidated workflow must:
.cargo_vcs_info.jsonhash lookup, or provide an explicitly pinned/mirroredSKIA_BINARIES_URL;aarch64-unknown-linux-gnu, not musl or another triple;DOWNLOAD AND INSTALL SUCCEEDEDoccurred andSTARTING A FULL BUILDdid not occur.Acceptance criteria
ubuntu-latest; no macOS or Windows Gitea jobs are introduced.timeout-minutes: 15. A practical internal target of 12 minutes leaves shutdown/upload variance below the hard limit.started_attocompleted_at. The sample must include at least one deliberate cold dependency/native cache run and at least four normal warm-cache runs.A design that is functionally complete but regularly exceeds 15 minutes is not accepted. A design that meets 15 minutes by dropping required coverage is also not accepted.
Implemented and verified in commit
27c860c225.Implementation:
Verification:
27c860c.