CI portable runner and release topology¶
Executable owner: blueflyio/gitlab_components (base-runner, minimal-ci / BRANCH_TOPOLOGY_GUARD, related shared components).
This rule: estate law for consumers. Do not re-implement in project YAML.
Portable compute¶
- Include
gitlab_components/base-runner(or a shared component that already extends it). - Portable build/test/validate jobs use
tags: [$BUILD_RUNNER_TAG]via.base-runner/.portable-runner. - Group CI/CD variable
BUILD_RUNNER_TAGis the only portable switch: - NORMAL:
saas-linux-small-amd64 - OVERFLOW:
bluefly-overflow - Forbidden in consumer
.gitlab-ci.ymlfor portable jobs: - hard-coded
bluefly-generic - hard-coded
saas-linux-small-amd64/oracle-dockeras a “temporary” pin tags: []on a local.basethat strips the shared runner contract- Deploy-only tags stay on deploy templates (
.oracle-deploy-runner,.nas-deploy-runner). Never use them to dodge a dead portable runner.
Proven defect class: consumer pin to offline bluefly-generic stranded required jobs while SaaS (BUILD_RUNNER_TAG) was healthy.
MR / branch topology¶
Valid development flow:
feature/* → release/v0.1.x → main
Invalid without an ancestry-recovery merge tip:
feature/* → main
chore/* / fix/* → main
main → release/v0.1.x
Release-cut ancestry (conflicted release → main recovery) must keep a two-parent tip:
M^1already onrelease/v0.1.xM^2recordsmainorigin/mainmust not be an ancestor ofM^1
A linear commit on top of a good merge fails BRANCH_TOPOLOGY_GUARD (no ^2). Rebuild the tip as a merge; do not weaken the guard globally.
Consumer CI¶
Consumer pipelines are thin includes of gitlab_components only. Shared failures fix once in gitlab_components. Project-local runner overrides and duplicate job YAML are defects.