Documentation
¶
Overview ¶
Package gitops provides Flux CD graph discovery, change impact analysis, and reconciliation coordination.
Core rule: if Flux already knows it, StageFreight discovers it — never asks for it. No duplicated topology config. No declared kustomization lists. Flux is truth. StageFreight is the intelligence + evidence layer.
Index ¶
- func BuildKubeconfig(cfg config.ClusterConfig, rctx *runtime.RuntimeContext) error
- func DuplicatePaths(graph *FluxGraph) map[string][]KustomizationKey
- func GetChangedFiles(repoDir, base, head string) ([]string, error)
- func NormalizePath(p string) string
- func SortKeys(keys []KustomizationKey)
- type BootstrapState
- type FluxBackend
- func (f *FluxBackend) Capabilities() []runtime.Capability
- func (f *FluxBackend) Cleanup(rctx *runtime.RuntimeContext)
- func (f *FluxBackend) Execute(ctx context.Context, plan *runtime.LifecyclePlan, rctx *runtime.RuntimeContext) (*runtime.LifecycleResult, error)
- func (f *FluxBackend) Name() string
- func (f *FluxBackend) Plan(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) (*runtime.LifecyclePlan, error)
- func (f *FluxBackend) Prepare(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) error
- func (f *FluxBackend) Validate(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) error
- type FluxGraph
- type FluxReconcileResult
- type ImpactResult
- type KustomizationKey
- type KustomizationNode
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func BuildKubeconfig ¶
func BuildKubeconfig(cfg config.ClusterConfig, rctx *runtime.RuntimeContext) error
BuildKubeconfig creates an isolated kubeconfig for the target cluster. CA is resolved from environment: <PREFIX>_CA_FILE or <PREFIX>_CA_B64. OIDC token is resolved from STAGEFREIGHT_OIDC. All ephemeral files are registered for cleanup on rctx.Resolved.
func DuplicatePaths ¶
func DuplicatePaths(graph *FluxGraph) map[string][]KustomizationKey
DuplicatePaths returns paths owned by multiple kustomizations.
func GetChangedFiles ¶
GetChangedFiles returns files changed between two refs.
func NormalizePath ¶
NormalizePath cleans a path for consistent matching.
func SortKeys ¶
func SortKeys(keys []KustomizationKey)
SortKeys sorts kustomization keys lexically by namespace/name.
Types ¶
type BootstrapState ¶
BootstrapState indicates whether Flux bootstrapping is needed.
func DetectBootstrapRequired ¶
func DetectBootstrapRequired(graph *FluxGraph) BootstrapState
DetectBootstrapRequired checks if Flux bootstrapping is needed. Stub for now — returns false. Hook wired for future extension.
type FluxBackend ¶
type FluxBackend struct {
// contains filtered or unexported fields
}
FluxBackend implements runtime.LifecycleBackend for Flux CD reconciliation.
func (*FluxBackend) Capabilities ¶
func (f *FluxBackend) Capabilities() []runtime.Capability
func (*FluxBackend) Cleanup ¶
func (f *FluxBackend) Cleanup(rctx *runtime.RuntimeContext)
Cleanup is handled by rctx.Resolved cleanup funcs registered in Prepare.
func (*FluxBackend) Execute ¶
func (f *FluxBackend) Execute(ctx context.Context, plan *runtime.LifecyclePlan, rctx *runtime.RuntimeContext) (*runtime.LifecycleResult, error)
Execute runs flux reconcile on the planned set. Idempotent: repeated execution converges to the same state.
func (*FluxBackend) Name ¶
func (f *FluxBackend) Name() string
func (*FluxBackend) Plan ¶
func (f *FluxBackend) Plan(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) (*runtime.LifecyclePlan, error)
Plan discovers the Flux graph, computes impact, and builds the reconcile set. Deterministic: identical config + inputs → identical output.
func (*FluxBackend) Prepare ¶
func (f *FluxBackend) Prepare(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) error
Prepare builds an isolated kubeconfig for the target cluster. Skipped if no cluster config is present (local dev).
func (*FluxBackend) Validate ¶
func (f *FluxBackend) Validate(ctx context.Context, cfg *config.Config, rctx *runtime.RuntimeContext) error
Validate checks that the flux CLI is available and cluster config is complete.
type FluxGraph ¶
type FluxGraph struct {
Kustomizations map[KustomizationKey]KustomizationNode
ReverseDeps map[KustomizationKey][]KustomizationKey
}
FluxGraph is the discovered dependency graph of Flux Kustomizations.
func DiscoverFluxGraph ¶
DiscoverFluxGraph walks the repo and discovers all Flux Kustomization objects. Builds forward and reverse dependency graphs. No config needed — everything is derived from the actual manifests.
type FluxReconcileResult ¶
type FluxReconcileResult struct {
Kustomization string
Namespace string
Attempted bool
Success bool
Duration time.Duration
Ready bool
Message string
}
FluxReconcileResult reports the outcome of reconciling one kustomization. Kept for backward compatibility with existing CLI output rendering.
func Reconcile ¶
func Reconcile(keys []KustomizationKey, dryRun bool) []FluxReconcileResult
Reconcile executes flux reconcile on the given kustomizations in order. Legacy function — new code should use FluxBackend via the runtime.
type ImpactResult ¶
type ImpactResult struct {
ChangedFiles []string
DirectlyAffected []KustomizationKey
TransitivelyAffected []KustomizationKey
ReconcileSet []KustomizationKey // topologically sorted
UnmappedFiles []string // changed files not under any kustomization path
}
ImpactResult describes which kustomizations are affected by a set of changes.
func ComputeImpact ¶
func ComputeImpact(graph *FluxGraph, files []string) ImpactResult
ComputeImpact determines which kustomizations are affected by changed files. Walks the reverse dependency graph to find transitive dependents.
type KustomizationKey ¶
KustomizationKey uniquely identifies a Flux Kustomization. Identity is (namespace, name) — never bare name alone.
func Orphans ¶
func Orphans(graph *FluxGraph) []KustomizationKey
Orphans returns kustomizations with no dependents and no dependencies.
func TopoSort ¶
func TopoSort(graph *FluxGraph, subset []KustomizationKey) []KustomizationKey
TopoSort produces a deterministic topological order for a subset of the graph. Dependencies come before dependents. Ties broken by namespace/name sort.
func (KustomizationKey) String ¶
func (k KustomizationKey) String() string
type KustomizationNode ¶
type KustomizationNode struct {
Key KustomizationKey
Path string // normalized, repo-root relative
DependsOn []KustomizationKey
SourceRef string
}
KustomizationNode is a discovered Flux Kustomization with its dependencies.