flate

module
v0.4.7 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 14, 2026 License: AGPL-3.0

README

flate

Render and diff Flux GitOps repositories fully offline — one static binary, no cluster, no kubectl, no shellouts.

Tests Lint Release License Discord

flate is a Go rewrite of flux-local. Helm, kustomize, go-git, and oras-go are linked as native libraries, so a kind cluster plus a stack of CLIs (helm, kustomize, flux, kubectl) collapse into one binary that runs in CI in seconds, not minutes. Changed-only mode reconciles just the subtree a PR touches, dropping single-file diffs to tens of milliseconds on real home-ops repos.

At a glance:

  • Offline — one static binary; no cluster, kubectl, helm/kustomize/flux CLIs, or shellouts.
  • Fast — changed-only mode reconciles just the subtree a PR touches.
  • CI-native — seconds not minutes; a GitHub Action ships in the repo.
  • Embeddablepkg/orchestrator is a library entry point.

Contents

Install

brew install --cask home-operations/tap/flate
go install github.com/home-operations/flate/cmd/flate@latest
docker pull ghcr.io/home-operations/flate:latest

…or in a GitHub Actions workflow:

- uses: home-operations/flate/action@main

Use

flate get ks       --path ./kubernetes
flate build hr     --path ./kubernetes plex
flate diff ks      --path ./kubernetes --path-orig ../baseline/kubernetes
flate diff all     --path ./kubernetes --path-orig ../baseline/kubernetes
flate diff images  --path ./kubernetes --path-orig ../baseline/kubernetes -o json
flate test all     --path ./kubernetes

The [name] positional on get ks/hr and build/diff/test ks/hr is matched against the resource's bare name (metadata.name), not namespace/name. Use -n / --namespace to scope.

Every reconcile-running command takes --path <dir> (default .); --path-orig <dir> switches into changed-only mode. flate <verb> --help lists every flag. get, build, diff, and test all run the same offline reconcile pipeline before producing output, so referenced Git, OCI, Helm, Bucket, or remote kustomize sources must be reachable. Source caches respect Flux intervals: immutable pins reuse cache; mutable refs refresh when their interval expires.

Verb Targets Notes
get ks, hr, images, all List or summarize. -o table / yaml / json / name.
build ks, hr, all Render Kustomizations and HelmReleases to YAML or JSON.
diff ks, hr, images, all Path-keyed diff against --path-orig via dyff. K8s-aware: list entries match by identifier (container name, env-var name), so a reorder shows as ⇆ order changed instead of phantom value churn. -o styles: human (default), github, brief, gitlab, gitea, a plain unified diff, and a self-contained html page (filterable navigation tree with keyboard nav, per-resource side-by-side ⇄ unified views, word-level syntax-highlighted diffs, light/dark theme).
test ks, hr, all Pytest-style PASS / FAIL / SKIPPED per resource. Non-zero exit on any failure.

get ks and get hr accept -l/--selector key=value for label filtering. diff accepts --strip-attr <key> (repeatable) to drop annotation/label keys before comparison; the default set covers chart-bump noise (helm.sh/chart, checksum/config, checksum/secret, app.kubernetes.io/version, chart). Helm template flags are available on every reconcile-running subcommand because flate reconciles the full graph before filtering output. Reconcile-running subcommands accept --allow-missing-secrets to soft-skip source auth Secrets and omit generated HR valuesFrom refs that only exist in the live cluster — see Behaviors.

Default output filters. --skip-secrets and --skip-crds both default to truebuild and diff strip rendered Secret and CustomResourceDefinition objects from manifest output. Pass --skip-secrets=false / --skip-crds=false to include them; --skip-kinds <kind> (repeatable) drops additional kinds. These are output-stream filters, distinct from --allow-missing-secrets, which gates source auth and generated HR values Secret readiness.

Cache. flate persists source fetches and helm template output under an on-disk cache (honoring Flux intervals). flate cache gc prunes stale entries; flate cache clear-render drops the persistent helm template-output cache.

Changed-only mode

--path-orig flips every command into change-aware reconcile. flate diffs the two paths, walks ownership backwards (longest matching Flux KS spec.path, including spec.components), and reconciles only the touched subtree plus its content dependencies.

In the keep-set: direct file edits, chart sources, KS sourceRef, HR valuesFrom, kustomize components (touching a shared component re-renders every consumer).

Out: dependsOn (reconcile-ordering, not content — skipped resources still get marked Ready so downstream waits unblock) and meta-Kustomizations that don't claim the deeper file.

git worktree add ../baseline main
flate diff ks --path ./kubernetes --path-orig ../baseline/kubernetes

--path can point at a narrow Flux entry like ./kubernetes/flux/cluster; flate iteratively follows each loaded KS's spec.path to discover the rest of the tree.

Source kinds and auth

Kind Status Auth (spec.secretRef)
GitRepository full HTTPS: username + password or bearerToken. SSH: identity (+ optional password, known_hosts).
OCIRepository full .dockerconfigjson. Falls back to --registry-config, then ~/.docker/config.json.
HelmRepository full HTTP basic: username + password; OCI flavor routes through the OCI puller.
HelmChart full Inline (HR.spec.chart) and standalone CRD.
Bucket generic only accesskey + secretkey. aws/gcp/azure fail loud — use static creds.
ExternalArtifact file:// only status.artifact.url must be a local path.

flate renders your own repo offline, so Secret values pass through verbatim — only SOPS ciphertext is wiped to ..PLACEHOLDER_<key>.. (flate can't decrypt it, and raw ENC[…] poisons rendering). A wiped (or genuinely missing) auth value is treated as missing — auth fails with a clear "missing username/password" instead of attempting auth with the placeholder. See Behaviors for --allow-missing-secrets, which soft-skips affected sources end-to-end.

Behaviors

SOPSspec.decryption is not implemented. Encrypted Secret/ConfigMap values get wiped to ..PLACEHOLDER_<key>.. (flate can't decrypt offline, and raw ENC[…] ciphertext poisons downstream rendering). Cleartext Secret values are NOT wiped — flate renders your own repo, not a live cluster. Downstream postBuild.substituteFrom lookups resolve a SOPS value to the placeholder rather than failing.

spec.suspend — honored on every reconcilable CR. Suspended resources mark Ready / "suspended" and produce no rendered output.

Producer-aware auto-skip (ExternalSecret / SealedSecret) — on by default, no flag. When a referenced Secret is missing but an in-repo ExternalSecret or SealedSecret declares it as a target (spec.target.name / spec.template.metadata.name), flate has positive evidence it materializes live and skips it automatically: a source whose auth secretRef is producer-backed marks Ready / "skipped: …"; a HelmRelease valuesFrom ref with a declared producer is omitted so the release renders with the remaining values. This removes the need for --allow-missing-secrets in the common ExternalSecrets/SealedSecrets setup. A missing Secret with no declared producer still fails loud — a real typo is never silently swallowed. The scan reads the producer's static target name; a kustomize namePrefix/nameSuffix that rewrites the generated Secret name (or an ES generated by a ResourceSet, for source auth) is not followed, and those fall back to fail-loud or the flag below.

--allow-missing-secrets — off by default; the blanket fallback for missing secrets that have no declared in-repo producer. When set, any source whose auth secretRef is missing or PLACEHOLDER-wiped marks Ready / "skipped: …" instead of Failed, and consumers (KS sourceRef, HR chartRef) propagate the skip so flate test reports SKIPPED rather than a cascade of FAILED. HelmRelease valuesFrom Secret/ConfigMap refs that cannot materialize offline are omitted so the release can render with the remaining values. Cert and proxy secretRefs still fail loud, since silently dropping TLS material is a security downgrade.

spec.dependsOn[].readyExpr (CEL) — evaluated against self and dep projections, matching upstream kustomize- and helm-controller binding:

dependsOn:
    - name: infra-controllers
      readyExpr: |
          dep.status.conditions.exists(c, c.type == "Healthy" && c.status == "True")

Substitution opt-out — the kustomize.toolkit.fluxcd.io/substitute: disabled label or annotation is honored per-resource, matching kustomize-controller. Used for ConfigMaps embedding bash array expansions envsubst can't parse.

Signature verification — flate does not verify signatures. spec.verify on OCIRepository (cosign) and GitRepository (PGP) is ignored: the artifact is pulled and rendered unconditionally, with no warning. flate is an offline renderer of what Flux would apply, not an admission gate — signature enforcement belongs in-cluster (see Limits).

ResourceSet inputs (inputs / inputsFrom) — a ResourceSet renders its resources / resourcesTemplate once per input set. Inline spec.inputs and spec.inputsFrom both contribute sets; each inputsFrom entry references a ResourceSetInputProvider by name or by label selector (scoped to the ResourceSet's namespace). The built-in inputs.provider block on every set reflects the sourcing CR's apiVersion/kind/name/namespace — the referenced provider for inputsFrom, the ResourceSet itself for inline.

Combination follows spec.inputStrategy: Flatten (default) concatenates all sets (<< inputs.foo >>); Permute Cartesian-products across providers, nesting each under its normalized name (<< inputs.<provider>.foo >>) plus a synthetic inputs.id, capped at 10000 permutations. A ResourceSet that emits ResourceSetInputProvider objects is resolved by the discovery fixed-point pass, so a later ResourceSet's inputsFrom.selector picks them up (the two-stage namespace→deployment pattern). Static providers export spec.defaultValues; for dynamic providers, pre-bake status.exportedInputs to render them offline (see Limits).

Limits

flate is rendering-only.

  • No SOPS decryption. SOPS-encrypted values are wiped to a placeholder; pre-decrypt if you need them in the diff. (Cleartext Secret values render as-is.)
  • No signature verification. spec.verify on OCIRepository (cosign) and GitRepository (PGP) is ignored — artifacts are pulled and rendered unconditionally. flate shows what Flux would apply; it does not gate on signatures. Enforce signatures in-cluster.
  • No cloud workload identity. spec.serviceAccountName is a no-op; use static creds in a Secret.
  • No healthChecks. flate tracks resource readiness, not status conditions of rendered objects.
  • ResourceSetInputProvider: Static resolves offline (from spec.defaultValues). Dynamic providers (GitHubPullRequest, GitLab, OCIArtifactTag, ExternalService, …) need network access and contribute zero inputs — unless you pre-bake them by setting status.exportedInputs on the provider manifest, which flate honors directly (see Behaviors).
  • Diff output isn't a source patch. flate diff defaults to dyff's human-readable report; -o github emits path-keyed syntax (@@ <path> @@) that GitHub's diff lexer renders natively, -o diff a standard unified diff, and -o html a self-contained, syntax-highlighted HTML page — a filterable left tree (with j/k keyboard nav) grouping each changed resource under its Flux HelmRelease/Kustomization → kind, per-resource side-by-side or unified views with word-level change highlighting, and a light/dark theme — for browser or CI-artifact review (flate diff all -o html > diff.html). All forms diff the rendered manifests on each side, so none apply with patch / git apply against your repo — use the rendered output of flate build if you need a literal patch.

Architecture

discovery → Store ⇄ events ⇄ controllers (source · kustomization · helmrelease)

Pipeline: bootstrap-source seed → loader pre-pass excluding configMapGenerator/secretGenerator data files → file walk → spec.path + ResourceSet fixed-point expansion → bootstrap-source aliasing for unresolved GitRepository refs → namespace inheritance → parent index → dependsOn cycle preflight → change-filter → controllers fire → render → render-time keep-set extension for emitted children → orphan demotion → output.

The Store is the single source of truth. Every stored manifest is immutable; mutation routes through Store.Mutate[T] (clone, mutate, AddObject). Helm chart loads coalesce through a per-path keylock — N parallel reconciles of the same chart issue exactly one parse.

Library use

pkg/orchestrator is the embed entry point.

import (
    "context"
    "github.com/home-operations/flate/pkg/orchestrator"
)

o, _ := orchestrator.New(orchestrator.Config{Path: "/path/to/cluster"})
res, err := o.Render(context.Background())
// res is non-nil even when err != nil — partial output stays usable.
for id, docs := range res.Manifests {
    // rendered YAML docs for the KS / HR with this id
}
for id, info := range res.Failed {
    // structured failure list keyed by NamedResource
}

Other entry points worth knowing:

  • Orchestrator.WithFetcher(kind, f) — swap any source fetcher (in-memory fakes for tests, custom kinds).
  • Store.OnObject / OnStatus / OnArtifact — typed listeners; payloads are pre-cast.
  • helm.Prepare(hr, lookup, provider) then helmClient.TemplateDocs(...) — render one HelmRelease without the orchestrator. lookup is a manifest.HelmChartLookup (func(ns, name string) *HelmChartSource). kustomize.Prepare(ks, provider) is the symmetric helper for Kustomizations.
  • discovery.Run(ctx, Config{Path, Store, WipeSecrets}) — load phase as a standalone unit.
  • change.Filter.AddEmitted(emitter, child) — extend the changed-only-mode keep set at runtime when a custom controller emits a child that wasn't visible at filter-build time; records the emitter→child edge. Call BEFORE Store.AddObject(child) so the synchronous listener sees the extended set.
  • Store.Mutate[T] — clone-then-AddObject helper encoding the immutability contract. See pkg/manifest/doc.go for the full rule.

Development

go build ./cmd/flate
go test ./...
go test -race ./...
golangci-lint run ./...

Tool versions pin via mise. Testdata lives in testdata/; test/e2e runs the cobra command tree in-process — no fork/exec, no freshly built binary.

License

AGPL-3.0. flate borrows behavior and test fixtures from flux-local (Apache-2.0).

Directories

Path Synopsis
cmd
flate command
flate — local validator for Flux GitOps repositories.
flate — local validator for Flux GitOps repositories.
internal
assert
Package assert holds dependency-free test assertion helpers usable from any package's tests.
Package assert holds dependency-free test assertion helpers usable from any package's tests.
cas
Package cas holds the atomic content-addressed staging dance used by baseline materialization: build into a sibling temp dir, atomically rename it into the final slot, and — when the rename loses a cross-process race — discard the temp and adopt the winner's already-finalized directory.
Package cas holds the atomic content-addressed staging dance used by baseline materialization: build into a sibling temp dir, atomically rename it into the final slot, and — when the rename loses a cross-process race — discard the temp and adopt the winner's already-finalized directory.
cli
Package cli wires flate's command-line interface using cobra.
Package cli wires flate's command-line interface using cobra.
diskcache
Package diskcache holds the persistent disk render-cache Store and the single-flight, mtime-LRU sweep that bounds it.
Package diskcache holds the persistent disk render-cache Store and the single-flight, mtime-LRU sweep that bounds it.
format
Package format provides the table, YAML, JSON, and "name" output modes used across flate's CLI surface.
Package format provides the table, YAML, JSON, and "name" output modes used across flate's CLI surface.
keylock
Package keylock provides per-key mutual-exclusion locks that honor context cancellation.
Package keylock provides per-key mutual-exclusion locks that honor context cancellation.
report
Package report turns a reconcile's failures into a compact, styled end-of-run summary: the real (primary) errors shown once, every cascaded failure folded under the root that caused it, and any deferred log lines in a quiet footer.
Package report turns a reconcile's failures into a compact, styled end-of-run summary: the real (primary) errors shown once, every cascaded failure folded under the root that caused it, and any deferred log lines in a quiet footer.
style
Package style is flate's terminal presentation layer: the glyphs, lipgloss color helpers, ANSI-aware truncation, and duration formatting shared by the CLI status bar and the `flate test` report, so both surfaces speak one vocabulary instead of hand-rolling escape codes and symbols.
Package style is flate's terminal presentation layer: the glyphs, lipgloss color helpers, ANSI-aware truncation, and duration formatting shared by the CLI status bar and the `flate test` report, so both surfaces speak one vocabulary instead of hand-rolling escape codes and symbols.
testrunner
Package testrunner implements `flate test`.
Package testrunner implements `flate test`.
testutil
Package testutil is shared fixture scaffolding for tests across the repo — kept minimal so each test file stays self-describing.
Package testutil is shared fixture scaffolding for tests across the repo — kept minimal so each test file stays self-describing.
pkg
baseline
Package baseline resolves and materializes a git revision into a tempdir so `flate diff` can run without an explicit --path-orig.
Package baseline resolves and materializes a git revision into a tempdir so `flate diff` can run without an explicit --path-orig.
change
Package change computes file-level differences between two filesystem trees and maps them onto the Flux resources they affect.
Package change computes file-level differences between two filesystem trees and maps them onto the Flux resources they affect.
controllers/base
Package base provides the shared lifecycle harness every flate controller wraps around its per-resource reconcile body.
Package base provides the shared lifecycle harness every flate controller wraps around its per-resource reconcile body.
controllers/emit
Package emit holds the render-emission helpers shared by the Kustomization and ResourceSet controllers: both parse a rendered doc set and land the children in the store through the identical two-pass strategy, so the logic lives here exactly once rather than being copied per controller.
Package emit holds the render-emission helpers shared by the Kustomization and ResourceSet controllers: both parse a rendered doc set and land the children in the store through the identical two-pass strategy, so the logic lives here exactly once rather than being copied per controller.
controllers/helmrelease
Package helmrelease implements the HelmReleaseController.
Package helmrelease implements the HelmReleaseController.
controllers/kustomization
Package kustomization reconciles Flux Kustomizations: wait on dependsOn / sourceRef / structural parent, resolve postBuild substitutions, run the kustomize SDK, parse the result back into the Store, and publish a KustomizationArtifact.
Package kustomization reconciles Flux Kustomizations: wait on dependsOn / sourceRef / structural parent, resolve postBuild substitutions, run the kustomize SDK, parse the result back into the Store, and publish a KustomizationArtifact.
controllers/resourceset
Package resourceset reconciles flux-operator ResourceSets as first-class DAG nodes: wait on dependsOn / inputsFrom RSIPs / the structural parent KS, render the RS via the resourceset package, and emit every child through the standard two-pass emit path.
Package resourceset reconciles flux-operator ResourceSets as first-class DAG nodes: wait on dependsOn / inputsFrom RSIPs / the structural parent KS, render the RS via the resourceset package, and emit every child through the standard two-pass emit path.
controllers/source
Package source reconciles Flux source CRs (GitRepository, OCIRepository, Bucket, ExternalArtifact, HelmRepository) into on-disk artifacts via per-kind Fetcher implementations from pkg/source, then publishes the result to the Store.
Package source reconciles Flux source CRs (GitRepository, OCIRepository, Bucket, ExternalArtifact, HelmRepository) into on-disk artifacts via per-kind Fetcher implementations from pkg/source, then publishes the result to the Store.
depwait
Package depwait resolves a controller's NamedResource dependencies for the dag scheduler: Classify decides, WITHOUT blocking, whether each dep is Ready, terminally Failed, or still blocked (parkable).
Package depwait resolves a controller's NamedResource dependencies for the dag scheduler: Classify decides, WITHOUT blocking, whether each dep is Ready, terminally Failed, or still blocked (parkable).
diff
Package diff compares two sets of rendered Kubernetes manifests and reports the resources whose rendered form differs.
Package diff compares two sets of rendered Kubernetes manifests and reports the resources whose rendered form differs.
discovery
Package discovery owns flate's filesystem-to-store hydration phase: walking the user's working tree, expanding spec.path references, aliasing in-cluster-bootstrapped sources, rendering ResourceSets, and computing the structural-parent index.
Package discovery owns flate's filesystem-to-store hydration phase: walking the user's working tree, expanding spec.path references, aliasing in-cluster-bootstrapped sources, rendering ResourceSets, and computing the structural-parent index.
helm
Package helm wraps helm.sh/helm/v4 to render HelmReleases without shelling out to the `helm` binary.
Package helm wraps helm.sh/helm/v4 to render HelmReleases without shelling out to the `helm` binary.
helm/deterministic
Package deterministic provides drop-in replacements for the nondeterministic functions Helm exposes to chart templates through sprig — the time-, crypto/rand-, and math/rand-backed ones (now, randAlphaNum, shuffle, genCA, …) — so flate renders byte-identically run to run.
Package deterministic provides drop-in replacements for the nondeterministic functions Helm exposes to chart templates through sprig — the time-, crypto/rand-, and math/rand-backed ones (now, randAlphaNum, shuffle, genCA, …) — so flate renders byte-identically run to run.
image
Package image discovers container images inside rendered Kubernetes manifests by parsing string values, not by hard-coding a table of kinds and field names.
Package image discovers container images inside rendered Kubernetes manifests by parsing string values, not by hard-coding a table of kinds and field names.
kustomize
Package kustomize wraps sigs.k8s.io/kustomize/api so the rest of flate never invokes the `kustomize` CLI.
Package kustomize wraps sigs.k8s.io/kustomize/api so the rest of flate never invokes the `kustomize` CLI.
loader
Package loader hydrates a Store from on-disk Flux manifests.
Package loader hydrates a Store from on-disk Flux manifests.
manifest
Package manifest defines the data model for Flux GitOps resources as observed locally in a Git repository.
Package manifest defines the data model for Flux GitOps resources as observed locally in a Git repository.
orchestrator
Package orchestrator wires the controllers together and runs the reconcile loop.
Package orchestrator wires the controllers together and runs the reconcile loop.
resourceset
Package resourceset renders flux-operator ResourceSet CRs offline.
Package resourceset renders flux-operator ResourceSet CRs offline.
schedule
Package schedule provides flate's dependency-driven reconcile scheduler: a re-entrant fixpoint engine that runs each node's reconcile body on a bounded task pool, parks a body that reports unsatisfied dependencies (Dispatcher OutcomeBlocked), and re-runs it when any of those dependencies advances.
Package schedule provides flate's dependency-driven reconcile scheduler: a re-entrant fixpoint engine that runs each node's reconcile body on a bounded task pool, parks a body that reports unsatisfied dependencies (Dispatcher OutcomeBlocked), and re-runs it when any of those dependencies advances.
selector
Package selector implements metadata filtering used by every flate command.
Package selector implements metadata filtering used by every flate command.
source
Package source implements SourceController — reconciles GitRepository and OCIRepository resources by fetching the underlying artifact into a content-addressed on-disk cache and publishing a *store.GitArtifact or *store.OCIArtifact for downstream controllers.
Package source implements SourceController — reconciles GitRepository and OCIRepository resources by fetching the underlying artifact into a content-addressed on-disk cache and publishing a *store.GitArtifact or *store.OCIArtifact for downstream controllers.
source/atomic
Package atomic provides a stage-then-rename WriteFile primitive.
Package atomic provides a stage-then-rename WriteFile primitive.
source/blob
Package blob is a small content-addressed storage layer for flate's fetched artifacts.
Package blob is a small content-addressed storage layer for flate's fetched artifacts.
source/bucket
Package bucket implements the source.Fetcher for KindBucket (S3-compatible object storage via minio-go).
Package bucket implements the source.Fetcher for KindBucket (S3-compatible object storage via minio-go).
source/cacheroot
Package cacheroot owns the layout of flate's on-disk cache.
Package cacheroot owns the layout of flate's on-disk cache.
source/external
Package external implements source.TypedFetcher for ExternalArtifact.
Package external implements source.TypedFetcher for ExternalArtifact.
source/git
Package git implements the source.Fetcher for KindGitRepository.
Package git implements the source.Fetcher for KindGitRepository.
source/git/internal/gittransport
Package gittransport carries the shared HTTPS-transport install lock serialized across git.Fetcher and the bare-mirror cache.
Package gittransport carries the shared HTTPS-transport install lock serialized across git.Fetcher and the bare-mirror cache.
source/git/mirror
Package mirror implements the bare-clone object store shared across GitRepository fetches.
Package mirror implements the bare-clone object store shared across GitRepository fetches.
source/gittree
Package gittree materializes a git commit's tree to disk, writing every blob as a regular file (or real symlink, where applicable), in parallel.
Package gittree materializes a git commit's tree to disk, writing every blob as a regular file (or real symlink, where applicable), in parallel.
source/helmchart
Package helmchart implements the source.Fetcher for KindHelmChart — the single authoritative path that fetches a Helm chart (by name + version) from its backing HelmRepository.
Package helmchart implements the source.Fetcher for KindHelmChart — the single authoritative path that fetches a Helm chart (by name + version) from its backing HelmRepository.
source/oci
Package oci implements the source.Fetcher for KindOCIRepository via oras-go.
Package oci implements the source.Fetcher for KindOCIRepository via oras-go.
source/safepath
Package safepath provides a path-traversal guard used by the OCI and bucket source packages.
Package safepath provides a path-traversal guard used by the OCI and bucket source packages.
source/sourceignore
Package sourceignore builds the file-exclusion matcher Flux's source-controller applies when it packages a GitRepository/OCIRepository artifact: its default patterns (.git/, .github/, *.jpg/png/zip, .sops.yaml, .flux.yaml, .goreleaser.yml, …) plus any in-tree .sourceignore files plus caller-supplied spec.ignore patterns.
Package sourceignore builds the file-exclusion matcher Flux's source-controller applies when it packages a GitRepository/OCIRepository artifact: its default patterns (.git/, .github/, *.jpg/png/zip, .sops.yaml, .flux.yaml, .goreleaser.yml, …) plus any in-tree .sourceignore files plus caller-supplied spec.ignore patterns.
source/ssrfguard
Package ssrfguard is an opt-in SSRF egress guard for flate's outbound source fetches.
Package ssrfguard is an opt-in SSRF egress guard for flate's outbound source fetches.
store
Package store is the central, in-memory state container for the controller pipeline.
Package store is the central, in-memory state container for the controller pipeline.
task
Package task provides a lightweight goroutine lifecycle manager modeled on flux-local's TaskService.
Package task provides a lightweight goroutine lifecycle manager modeled on flux-local's TaskService.
values
Package values implements HelmRelease values resolution and Kustomization postBuild substitution.
Package values implements HelmRelease values resolution and Kustomization postBuild substitution.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL