Skip to content

release: prepare pinned deployment artifacts for v0.4.0 - #13

Merged
josedab merged 22 commits into
mainfrom
refactor/clean-code-srp
Sep 6, 2026
Merged

release: prepare pinned deployment artifacts for v0.4.0#13
josedab merged 22 commits into
mainfrom
refactor/clean-code-srp

Conversation

@josedab

@josedab josedab commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Summary

This prepares deployment assets for the active 0.4.0 line and pins the official image source to offline-analytics-verified core commit ae1ae701f3a6b371375d1a169a1ecfefff38b7cc. Images are staged and validated before promotion, while unsupported installers, demos, and Helm configurations fail closed.

Key changes

  • Builds the image from the exact core SHA in core-source.env instead of assuming core sources exist in this repository.
  • Makes docker-publish.yml the single publisher: push one staging reference, resolve its digest, smoke-test/scan/sign/attest that digest, then promote the unchanged digest to public tags.
  • Runs strict real-HTTP image smoke checks and rejects malformed or semantically invalid health, metrics, and management responses rather than accepting connectivity alone.
  • Installs checksum-pinned jq 1.7.1 for smoke validation and validates responses against a single-document full JSON schema.
  • Keeps the installer disabled until a controlled endpoint and complete checksum-verified archive set exist; failure occurs before download or filesystem mutation.
  • Requires an explicit image in Compose, raw Kubernetes, and Helm paths; local placeholders are intentionally unpullable and the chart has no silent published default.
  • Wires TLS/SASL only through settings the server actually reads, fixes listener ports at 9092/9094, states auto-topic creation explicitly, and gates image editions/capabilities.
  • Rejects multi-replica clustering, HPA/KEDA autoscaling, and unsupported Moonshot/CDC/edge paths rather than deploying independent brokers or unverified APIs.
  • Packages seeder libraries correctly and keeps Grafana dashboards independently testable while marking unverified metric names explicitly.
  • Restricts official publication to validated linux/amd64 until other architectures have equivalent pre-promotion smoke and vulnerability-scan lanes.
  • Adds g++ to full Linux builders so native dependencies compile during complete image validation.

Validation

  • Full builders include g++; ShellCheck is clean, and current make test, make lint, and make static pass with 96 Helm tests.
  • The HTTP smoke test performs real requests and strictly validates response status, content, and JSON shape; isolated tests cover valid and invalid responses.
  • jq 1.7.1 is checksum-pinned, and smoke-response validation uses one complete JSON Schema document rather than concatenated schema fragments.
  • Static gates continue to cover the core pin, single publisher, digest-preserving promotion, strict image smoke behavior, unpublished-artifact claims, image capabilities, listener/TLS scope, disabled demos, installer behavior, and monitoring contracts.
  • The final core source pin is ae1ae701f3a6b371375d1a169a1ecfefff38b7cc everywhere in the deployment contract; both hosted CI image builds and strict HTTP smoke checks pass. Registry publication, signing, and attestation remain release-only gates.
  • External registry access and keyless signing/attestation remain release blockers; no published image or signed registry artifact is claimed.
  • Final hosted evidence: push CI and pull-request CI both pass validation and image-build jobs on ea079b7.

Commit structure

  • 2e56df5 fix(publish): verify pinned core builds and installer artifacts
  • 403169e fix(helm): enforce secure standalone runtime contracts
  • 70575ee fix(demos): fail closed on unsupported deployment paths
  • 1bd5db1 chore(release): prepare v0.4.0
  • 3b09d72 chore(release): pin core v0.4.0 source
  • 0b01f42 fix(build): support full Linux image validation
  • d5eb230 chore(release): advance final core source pin
  • f9616bc fix(test): validate image smoke responses strictly
  • 55db35b chore(release): pin benchmark-verified core source
  • dcb6345 chore(release): pin doctest-verified core source
  • 147662c chore(release): pin CI-stable core source
  • b137a73 chore(release): pin Linux-verified core source
  • ea079b7 chore(release): pin offline-analytics core source

Release and merge notes

  • Release blocker: the pinned core commit ae1ae701f3a6b371375d1a169a1ecfefff38b7cc must be reviewed/merged and built with external registry credentials; the staged digest must pass registry smoke, security, signing, and attestation gates before any semver tag is attached.
  • Compatibility note: standalone-only deployment is enforced; clustering/autoscaling and the edge/CDC demos remain unavailable, and Helm now rejects values that previously rendered ineffective configurations.
  • Merge/order: merge core first, then the ae1ae701f3a6b371375d1a169a1ecfefff38b7cc pin and this deployment PR; its published image/digest unlocks SDK, operator, cloud, Homebrew, and tester-program gates.
  • Existing v0.3.0 tags and releases are immutable. This work targets the new v0.4.0 line; this PR does not create a tag, GitHub Release, package, image, or other publication.

josedab added 19 commits August 3, 2026 08:37
The image build context, the publisher and the installer all made claims
nothing here could keep: builds assumed core sources in this repository,
public tags were pushed before any validation ran, and the installer
downloaded release archives that do not exist.

Builds now come from the immutable core commit pinned in core-source.env
and fail closed while it is empty. docker-publish.yml is the single
publisher: it stages one reference, validates that digest and only then
promotes it. The installer verifies checksums and platform selection and
stays disabled until verified assets exist.
The chart rendered configurations the running server could not honour:
auth and TLS settings the binary never read, listener ports that reached
only part of the wiring, autoscalers that would start independent brokers,
and moonshot values no template ever wired.

The chart now requires an explicit image whose edition/capabilities it
never infers, renders TLS and SASL through the variables core actually
reads, keeps 9092/9094 fixed, always states autoCreateTopics, and rejects
clustering, autoscaling, KEDA and moonshot values instead of accepting
them silently. The raw k8s manifests follow the same standalone contract.
The edge, CDC and moonshot demos shipped runnable entry points for
behaviour nothing here can verify: an MQTT bridge no image exposes,
CDC and StreamQL routes that came from documentation rather than a
running server, and compile-time features advertised through runtime
environment variables core never reads.

The edge stack is removed and its remaining artifacts are marked
unsupported; the CDC and moonshot demos require an explicitly built
image and exit non-zero without one. Dashboard and alert metric names
are recorded as unverified in monitoring/METRICS.md, the duplicate
invalid Dockerfiles are gone, and the static gates that keep these
claims honest are wired into make static.
@josedab josedab changed the title refactor: split deployment seeding and dashboard responsibilities release: prepare pinned deployment artifacts for v0.4.0 Sep 4, 2026
@josedab
josedab merged commit 3a5ee25 into main Sep 6, 2026
5 checks passed
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.

1 participant