Skip to content

Modern Concourse pipeline and shared CI tools image#5686

Merged
norman-abramovitz merged 3 commits into
cloudfoundry:developfrom
nabramovitz:feat/concourse-pipeline
Jul 23, 2026
Merged

Modern Concourse pipeline and shared CI tools image#5686
norman-abramovitz merged 3 commits into
cloudfoundry:developfrom
nabramovitz:feat/concourse-pipeline

Conversation

@nabramovitz

Copy link
Copy Markdown
Contributor

Adds a modern Concourse pipeline under ci/ and the shared CI tools image both CIs can run make targets in. The legacy deploy/ci/ node:8 pipelines are untouched — this is a clean replacement path, not a modernization of them.

Pipeline (ci/)

Every task is a thin caller of the same make targets a developer or GitHub Actions runs — no logic lives in the pipeline YAML.

Job Trigger Runs
gate commits on the tracked branch make check gate
audit nightly make audit + make audit modrot (report-only)
release pushed v* tag make buildmake release cf githubmake publish — the same path as the release.yml workflow; notes come from the annotated tag body

ci/pipeline.yml is a spruce structure file: required settings are (( param )) asserts, so an incomplete config fails the merge loudly instead of reaching Concourse. Operators copy ci/settings.yml.example to the untracked ci/settings.yml (secrets can resolve via spruce's vault operator) and deploy with ci/repipe. spruce/jq/fly are operator-side only — workers receive fully-resolved YAML.

Validated with spruce merge + fly validate-pipeline, including the missing-settings failure path.

Tools image (ci/tools-image/)

One image — ghcr.io/cloudfoundry/stratos-ci — with node 24 + bun + go 1.26.5 (modrot and osv-scanner need ≥ 1.26.4), gh CLI, and the make audit scanner set (gosec, govulncheck, modrot, osv-scanner, gitleaks, trivy, zizmor). Replaces the legacy node:8 deploy/ci/Dockerfile.concourse for CI purposes; the new ci-image.yml workflow builds and pushes it on changes under ci/tools-image/. GitHub Actions jobs can consume the same image via container:.

Smoke-built locally and every tool verified runnable inside the image. zizmor is clean on the new workflow.

Deliberately deferred until a job needs them: ZAP (joins with the DAST workstream, #5679) and golangci-lint (no lint job yet; it is also the image's biggest from-source compile). The all-in-one docker image build stays in GitHub Actions — it is a docker build/push, not a make target.

Bumps to v5.0.0-dev.145 (dev.144 rides #5685) and carries its changelog.d fragment per the mechanism introduced there.

New modern pipeline under ci/ (the legacy deploy/ci/ node:8 pipelines
are untouched): gate on tracked-branch commits, nightly report-only
audit (make audit + modrot), and v* tag-triggered release running the
same make targets as release.yml. Tasks are thin make callers in the
shared tools image; all logic stays in the Makefile and build/ scripts.

Structure file ci/pipeline.yml carries spruce (( param )) asserts so an
incomplete config fails the merge loudly; operators copy
ci/settings.yml.example to the untracked ci/settings.yml and deploy
with ci/repipe (needs spruce, jq, fly — operator-side only, workers
never see them). Validated: spruce merge + fly validate-pipeline.
One image (ghcr.io/cloudfoundry/stratos-ci) for every runner to execute
the same make targets in: node 24 + bun + go 1.26.5, gh CLI, and the
make audit scanner set (gosec, govulncheck, modrot, osv-scanner,
gitleaks, trivy, zizmor). Replaces the legacy node:8
deploy/ci/Dockerfile.concourse for CI purposes. Built and pushed by the
new ci-image.yml workflow on changes under ci/tools-image/.

Deliberately absent until a job needs them: ZAP (DAST workstream cloudfoundry#5679)
and golangci-lint (no lint job; its from-source build is also the
image's biggest compile). Smoke-built locally; all tools verified
runnable in the image.
dev.144 rides the open release-notes-fragments PR.

@norman-abramovitz norman-abramovitz left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

@norman-abramovitz
norman-abramovitz merged commit 6c2126a into cloudfoundry:develop Jul 23, 2026
22 checks passed
@nabramovitz
nabramovitz deleted the feat/concourse-pipeline branch July 23, 2026 12:38
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants