Skip to content

Support for ExternalArtifact resources using as sourceRef for Flux Kustomization #848

Description

@ringods

What problem are you trying to solve?

My flux setup uses ArtifactGenerator to create ExternalArtifact resources. Here is my setup:

---
apiVersion: source.extensions.fluxcd.io/v1beta1
kind: ArtifactGenerator
metadata:
  name: flux-system
  namespace: flux-system
spec:
  sources:
    - alias: monorepo
      kind: GitRepository
      name: flux-system
  artifacts:
    - name: infrastructure
      originRevision: "@monorepo"
      copy:
        - from: "@monorepo/kubernetes/infrastructure/base/**"
          to: "@artifact/base/"
        - from: "@monorepo/kubernetes/infrastructure/desk8s/**"
          to: "@artifact/desk8s/"

I created this to have much shorter paths in all of my config files. Flux reconciles this to an ExternalArtifact within my cluster, for instance:

apiVersion: source.toolkit.fluxcd.io/v1
kind: ExternalArtifact
metadata:
  creationTimestamp: "2026-07-20T10:10:52Z"
  generation: 1
  labels:
    app.kubernetes.io/managed-by: source-watcher
    source.extensions.fluxcd.io/generator: b5062abe-a949-4f1d-9bbb-7ff8cb83112a
  name: infrastructure
  namespace: flux-system
  resourceVersion: "250754237"
  uid: e79f0af9-9ee3-49a5-b86a-0d6d2f7eb799
spec:
  sourceRef:
    apiVersion: source.extensions.fluxcd.io/v1beta1
    kind: ArtifactGenerator
    name: flux-system
    namespace: flux-system
status:
  artifact:
    digest: sha256:2352314c5452d7343f3dd1dc4d78a16ea0e72beb1e31c739681f642c4ade607a
    lastUpdateTime: "2026-07-21T13:16:08Z"
    metadata:
      org.opencontainers.image.revision: refs/heads/main@sha1:875be6e9a35743ad2d20f090cf01da9ac7ff07c8
    path: externalartifact/flux-system/infrastructure/3214410609.tar.gz
    revision: latest@sha256:2352314c5452d7343f3dd1dc4d78a16ea0e72beb1e31c739681f642c4ade607a
    size: 1926
    url: http://source-watcher.flux-system.svc.cluster.local./externalartifact/flux-system/infrastructure/3214410609.tar.gz
  conditions:
  - lastTransitionTime: "2026-07-21T13:16:08Z"
    message: Artifact is ready
    observedGeneration: 1
    reason: Succeeded
    status: "True"
    type: Ready

When using flate test, this ExternalArtifact resource is not available in the Git repository, so the validation ends pretty fast in my setup:

$ flate test all --path ./kubernetes

  ✓  HelmRelease    flux-system/flux-operator
  ✓  OCIRepository  flux-system/flux-operator
  ⊘  Kustomization  flux-system/infrastructure  blocked by flux-system/infrastructure (not found)
  ⊘  Kustomization  system-upgrade/tuppr  blocked by flux-system/infrastructure (not found)
  ⊘  Kustomization  system-upgrade/tuppr-upgrades  blocked by flux-system/infrastructure (not found)

  ✗ 2 passed · 3 blocked   1.8s

The blocked by errors refer to the non-existant ExternalArtifact.

Proposed solution

It would be nice if flate could "evaluate" the ArtifactGenerator and retain in-memory ExternalArtifact resources with local paths so flate test works.

Alternatives considered

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions