feat: polyglot deployment sources (helm, argocd, manifests/kustomize) + first-class template variables#31
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds first-class support for deploying via Helm charts, ArgoCD Applications, and raw/kustomize manifests alongside the existing container-
servicesmodel, plus a typed template-variable layer injected into every source. Built strictly test-first across six phases (40 commits).vars/— typed variable resolver: defaults, type/enum/pattern validation, secret bindings (resolved as references, never inlined), computed expressions with topological ordering + cycle detection.provider+render/— a typedDeploymentSourceunion (services | helm | manifests | argocd) and arenderpackage that resolves a source against a variable scope: Gotext/templatefor services/helm-values/argo/inline-manifests, and an in-memory kustomize build for kustomize sources. Secret-never-inlined is enforced at render viamissingkey=error.HealthChecker):helm.sh/helm/v3(release owned by ctrlplane, secret driver in prod).argoproj.io/v1alpha1Applications using our own minimal typed struct marshaled tounstructured(noargo-cdmodule dependency, which would force k8s downgrades).dispatch/— routes a rendered source to the right provider operation by type, capability-gated (ErrUnsupportedSource).template.Templateandinstance.InstancegainVariables/Source, persisted across all five store backends (postgres/sqlite JSONB, mongo bson, memory, badger) with back-compat normalization of legacyservices-only rows. The instance provision path now resolves variables → renders → dispatches for every source type; teardown routes by the recorded source type.Dependency note
helm.sh/helm/v3 v3.21.0andsigs.k8s.io/kustomize/api v0.21.1were verified to coexist withk8s.io/* v0.35.5— pins held, zeroreplacedirectives added (confirmed via a throwaway build spike before any Helm engine code).Deferred (separate follow-ups)
Dashboard/API authoring UI; secret-binding materialization into native k8s Secrets for services/manifests; OCI Helm chart loading; custom deploy strategies over non-services sources.
Test Plan
go build ./...cleango vet ./...cleango test ./...— 27 packages pass, 0 failuresgolangci-lint run— 0 issues on all touched packagesDesign + per-phase plans:
_project_files/deployment-sources-and-variables-design.mdand_project_files/plan-phase-*.md.🤖 Generated with Claude Code