#
tokens: 49785/50000 88/898 files (page 2/126)
lines: on (toggle) GitHub
raw markdown copy reset
This is page 2 of 126. Use http://codebase.md/controlplaneio-fluxcd/flux-operator?lines=true&page={x} to view the full context.

# Directory Structure

```
├── .github
│   ├── actions
│   │   └── runner-cleanup
│   │       └── action.yml
│   ├── copilot-instructions.md
│   ├── dependabot.yaml
│   └── workflows
│       ├── actions-test.yaml
│       ├── e2e-olm.yaml
│       ├── preview.yaml
│       ├── push-manifests.yaml
│       ├── release.yaml
│       └── test.yaml
├── .gitignore
├── .golangci.yml
├── .goreleaser.yml
├── actions
│   └── setup
│       ├── action.yaml
│       └── README.md
├── AGENTS.md
├── api
│   └── v1
│       ├── common_types_test.go
│       ├── common_types.go
│       ├── fluxinstance_types.go
│       ├── fluxreport_types.go
│       ├── groupversion_info.go
│       ├── history_types_test.go
│       ├── history_types.go
│       ├── resourceset_types.go
│       ├── resourcesetinputprovider_types.go
│       ├── schedule_types.go
│       └── zz_generated.deepcopy.go
├── cmd
│   ├── cli
│   │   ├── build_instance.go
│   │   ├── build_resourceset_test.go
│   │   ├── build_resourceset.go
│   │   ├── build.go
│   │   ├── client.go
│   │   ├── completion_bash.go
│   │   ├── completion_fish.go
│   │   ├── completion_powershell.go
│   │   ├── completion_zsh.go
│   │   ├── completion.go
│   │   ├── create_secret_basicauth_test.go
│   │   ├── create_secret_basicauth.go
│   │   ├── create_secret_githubapp.go
│   │   ├── create_secret_proxy_test.go
│   │   ├── create_secret_proxy.go
│   │   ├── create_secret_registry_test.go
│   │   ├── create_secret_registry.go
│   │   ├── create_secret_sops_test.go
│   │   ├── create_secret_sops.go
│   │   ├── create_secret_ssh.go
│   │   ├── create_secret_tls.go
│   │   ├── create_secret.go
│   │   ├── create.go
│   │   ├── debug_web_cookie.go
│   │   ├── debug_web.go
│   │   ├── debug.go
│   │   ├── delete_inputprovider_test.go
│   │   ├── delete_inputprovider.go
│   │   ├── delete_instance_test.go
│   │   ├── delete_instance.go
│   │   ├── delete_resourceset_test.go
│   │   ├── delete_resourceset.go
│   │   ├── delete.go
│   │   ├── distro_decrypt_manifests_test.go
│   │   ├── distro_decrypt_manifests.go
│   │   ├── distro_decrypt_token_test.go
│   │   ├── distro_decrypt_token.go
│   │   ├── distro_decrypt.go
│   │   ├── distro_encrypt_manifests_test.go
│   │   ├── distro_encrypt_manifests.go
│   │   ├── distro_encrypt_token_test.go
│   │   ├── distro_encrypt_token.go
│   │   ├── distro_encrypt.go
│   │   ├── distro_keygen_enc_test.go
│   │   ├── distro_keygen_enc.go
│   │   ├── distro_keygen_sig_test.go
│   │   ├── distro_keygen_sig.go
│   │   ├── distro_keygen.go
│   │   ├── distro_revoke_license_key_test.go
│   │   ├── distro_revoke_license_key.go
│   │   ├── distro_revoke.go
│   │   ├── distro_sign_artifacts_test.go
│   │   ├── distro_sign_artifacts.go
│   │   ├── distro_sign_license_key_test.go
│   │   ├── distro_sign_license_key.go
│   │   ├── distro_sign_manifests_test.go
│   │   ├── distro_sign_manifests.go
│   │   ├── distro_sign.go
│   │   ├── distro_verify_artifacts_test.go
│   │   ├── distro_verify_artifacts.go
│   │   ├── distro_verify_license_key_test.go
│   │   ├── distro_verify_license_key.go
│   │   ├── distro_verify_manifests_test.go
│   │   ├── distro_verify_manifests.go
│   │   ├── distro_verify.go
│   │   ├── distro.go
│   │   ├── Dockerfile
│   │   ├── export_report_test.go
│   │   ├── export_report.go
│   │   ├── export_resource_test.go
│   │   ├── export_resource.go
│   │   ├── export.go
│   │   ├── get_inputprovider_test.go
│   │   ├── get_inputprovider.go
│   │   ├── get_instance.go
│   │   ├── get_resources.go
│   │   ├── get_resourceset_test.go
│   │   ├── get_resourceset.go
│   │   ├── get.go
│   │   ├── install.go
│   │   ├── main.go
│   │   ├── README.md
│   │   ├── reconcile_inputprovider.go
│   │   ├── reconcile_instance.go
│   │   ├── reconcile_resource.go
│   │   ├── reconcile_resources.go
│   │   ├── reconcile_resourceset.go
│   │   ├── reconcile.go
│   │   ├── resume_inputprovider.go
│   │   ├── resume_instance.go
│   │   ├── resume_resource.go
│   │   ├── resume_resourceset.go
│   │   ├── resume.go
│   │   ├── stats.go
│   │   ├── suite_test.go
│   │   ├── suspend_inputprovider.go
│   │   ├── suspend_instance.go
│   │   ├── suspend_resource.go
│   │   ├── suspend_resourceset.go
│   │   ├── suspend.go
│   │   ├── testdata
│   │   │   └── build_resourceset
│   │   │       ├── golden-labeled.yaml
│   │   │       ├── golden-named.yaml
│   │   │       ├── golden-permuted.yaml
│   │   │       ├── golden.yaml
│   │   │       ├── inputs.yaml
│   │   │       ├── rset-standalone.yaml
│   │   │       ├── rset-with-rsip-labeled.yaml
│   │   │       ├── rset-with-rsip-named.yaml
│   │   │       ├── rset-with-rsip-permuted.yaml
│   │   │       ├── rset-with-rsip.yaml
│   │   │       ├── rsip-labeled.yaml
│   │   │       ├── rsip-named.yaml
│   │   │       └── rsip.yaml
│   │   ├── trace_test.go
│   │   ├── trace_types.go
│   │   ├── trace.go
│   │   ├── tree_helmrelease.go
│   │   ├── tree_kustomization.go
│   │   ├── tree_resourceset_test.go
│   │   ├── tree_resourceset.go
│   │   ├── tree.go
│   │   ├── uninstall.go
│   │   ├── version_test.go
│   │   ├── version.go
│   │   ├── wait_inputprovider_test.go
│   │   ├── wait_inputprovider.go
│   │   ├── wait_instance_test.go
│   │   ├── wait_instance.go
│   │   ├── wait_resourceset_test.go
│   │   ├── wait_resourceset.go
│   │   └── wait.go
│   ├── mcp
│   │   ├── Dockerfile
│   │   ├── k8s
│   │   │   ├── actions_test.go
│   │   │   ├── actions.go
│   │   │   ├── client_test.go
│   │   │   ├── client.go
│   │   │   ├── config.go
│   │   │   ├── events_test.go
│   │   │   ├── events.go
│   │   │   ├── export_test.go
│   │   │   ├── export.go
│   │   │   ├── helm.go
│   │   │   ├── logs.go
│   │   │   ├── metrics.go
│   │   │   └── suite_test.go
│   │   ├── main.go
│   │   ├── prompter
│   │   │   ├── debug_helmrelease_test.go
│   │   │   ├── debug_helmrelease.go
│   │   │   ├── debug_kustomization_test.go
│   │   │   ├── debug_kustomization.go
│   │   │   ├── index.go
│   │   │   └── manager.go
│   │   ├── README.md
│   │   └── toolbox
│   │       ├── apply_manifest_test.go
│   │       ├── apply_manifest.go
│   │       ├── delete_resource_test.go
│   │       ├── delete_resource.go
│   │       ├── get_apis_test.go
│   │       ├── get_apis.go
│   │       ├── get_contexts_test.go
│   │       ├── get_contexts.go
│   │       ├── get_instance_test.go
│   │       ├── get_instance.go
│   │       ├── get_logs_test.go
│   │       ├── get_logs.go
│   │       ├── get_metrics_test.go
│   │       ├── get_metrics.go
│   │       ├── get_resource_test.go
│   │       ├── get_resource.go
│   │       ├── helpers.go
│   │       ├── indexer
│   │       │   └── main.go
│   │       ├── install_instance_test.go
│   │       ├── install_instance.go
│   │       ├── library
│   │       │   ├── bm25_test.go
│   │       │   ├── bm25.go
│   │       │   ├── index.go
│   │       │   ├── index.gob
│   │       │   ├── library.go
│   │       │   ├── search_test.go
│   │       │   ├── search.go
│   │       │   ├── tokenizer_test.go
│   │       │   └── tokenizer.go
│   │       ├── manager_test.go
│   │       ├── manager.go
│   │       ├── reconcile_helmrelease_test.go
│   │       ├── reconcile_helmrelease.go
│   │       ├── reconcile_kustomization_test.go
│   │       ├── reconcile_kustomization.go
│   │       ├── reconcile_resourceset_test.go
│   │       ├── reconcile_resourceset.go
│   │       ├── reconcile_source_test.go
│   │       ├── reconcile_source.go
│   │       ├── resume_reconciliation_test.go
│   │       ├── resume_reconciliation.go
│   │       ├── scopes_test.go
│   │       ├── scopes.go
│   │       ├── search_flux_docs_test.go
│   │       ├── search_flux_docs.go
│   │       ├── set_context_test.go
│   │       ├── set_context.go
│   │       ├── suspend_reconciliation_test.go
│   │       ├── suspend_reconciliation.go
│   │       └── testdata
│   │           ├── kubeconfig_golden.yaml
│   │           └── kubeconfig.yaml
│   └── operator
│       └── main.go
├── config
│   ├── crd
│   │   ├── bases
│   │   │   ├── fluxcd.controlplane.io_fluxinstances.yaml
│   │   │   ├── fluxcd.controlplane.io_fluxreports.yaml
│   │   │   ├── fluxcd.controlplane.io_resourcesetinputproviders.yaml
│   │   │   └── fluxcd.controlplane.io_resourcesets.yaml
│   │   ├── kustomization.yaml
│   │   └── kustomizeconfig.yaml
│   ├── data
│   │   ├── flux
│   │   │   ├── v2.2.3
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.3.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.4.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.5.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.5.1
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.1
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.2
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.3
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.4
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.7.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   ├── v2.7.1
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   ├── v2.7.2
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   ├── v2.7.3
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   ├── v2.7.4
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   └── v2.7.5
│   │   │       ├── helm-controller.yaml
│   │   │       ├── image-automation-controller.yaml
│   │   │       ├── image-reflector-controller.yaml
│   │   │       ├── kustomize-controller.yaml
│   │   │       ├── notification-controller.yaml
│   │   │       ├── policies.yaml
│   │   │       ├── rbac.yaml
│   │   │       ├── source-controller.yaml
│   │   │       └── source-watcher.yaml
│   │   ├── flux-images
│   │   │   ├── v2.2.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.2.1
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.2.2
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.2.3
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.3.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.4.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.5.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.5.1
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless-fips.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.6.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.6.1
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.6.2
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.6.3
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.6.4
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless-fips.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.0
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.1
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.2
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.3
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.4
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   ├── v2.7.5
│   │   │   │   ├── enterprise-alpine.yaml
│   │   │   │   ├── enterprise-distroless-fips.yaml
│   │   │   │   ├── enterprise-distroless.yaml
│   │   │   │   └── upstream-alpine.yaml
│   │   │   └── VERSION
│   │   └── flux-vex
│   │       ├── v2.2.json
│   │       ├── v2.3.json
│   │       ├── v2.4.json
│   │       ├── v2.5.json
│   │       ├── v2.6.json
│   │       └── v2.7.json
│   ├── default
│   │   ├── kustomization.yaml
│   │   ├── namespace.yaml
│   │   └── rbac.yaml
│   ├── manager
│   │   ├── account.yaml
│   │   ├── deployment.yaml
│   │   ├── kustomization.yaml
│   │   └── service.yaml
│   ├── mcp
│   │   ├── deployment.yaml
│   │   ├── kustomization.yaml
│   │   └── service.yaml
│   ├── monitoring
│   │   ├── dashboards
│   │   │   ├── flux-k8s-api-performance.json
│   │   │   └── flux-performance.json
│   │   ├── flux-controllers.yaml
│   │   ├── flux-operator.yaml
│   │   └── kustomization.yaml
│   ├── olm
│   │   ├── build
│   │   │   └── Dockerfile
│   │   ├── bundle
│   │   │   ├── manifests
│   │   │   │   ├── flux-operator.clusterserviceversion.yaml
│   │   │   │   ├── flux-operator.service.yaml
│   │   │   │   ├── fluxinstances.fluxcd.controlplane.io.crd.yaml
│   │   │   │   ├── fluxreports.fluxcd.controlplane.io.crd.yaml
│   │   │   │   ├── resourcesetinputproviders.fluxcd.controlplane.io.crd.yaml
│   │   │   │   └── resourcesets.fluxcd.controlplane.io.crd.yaml
│   │   │   ├── metadata
│   │   │   │   └── annotations.yaml
│   │   │   └── tests
│   │   │       └── scorecard
│   │   │           └── config.yaml
│   │   ├── ci.yaml
│   │   └── test
│   │       ├── bundle.Dockerfile
│   │       ├── olm.yaml
│   │       └── opm.Dockerfile
│   ├── rbac
│   │   ├── fluxinstance_editor_role.yaml
│   │   ├── fluxinstance_viewer_role.yaml
│   │   ├── fluxreport_editor_role.yaml
│   │   ├── fluxreport_viewer_role.yaml
│   │   ├── kustomization.yaml
│   │   ├── leader_election_role_binding.yaml
│   │   ├── leader_election_role.yaml
│   │   ├── resourceset_editor_role.yaml
│   │   ├── resourceset_viewer_role.yaml
│   │   ├── role_binding.yaml
│   │   ├── role.yaml
│   │   └── service_account.yaml
│   ├── samples
│   │   ├── fluxcd_v1_fluxinstance.yaml
│   │   ├── fluxcd_v1_fluxreport.yaml
│   │   ├── fluxcd_v1_resourceset.yaml
│   │   ├── fluxcd_v1_resourcesetinputprovider.yaml
│   │   └── kustomization.yaml
│   └── terraform
│       ├── main.tf
│       ├── outputs.tf
│       ├── providers.tf
│       ├── README.md
│       ├── values
│       │   └── components.yaml
│       ├── variables.tf
│       └── versions.tf
├── CONTRIBUTING.md
├── Dockerfile
├── docs
│   ├── api
│   │   └── v1
│   │       ├── fluxinstance.md
│   │       ├── fluxreport.md
│   │       ├── resourceset.md
│   │       └── resourcesetinputprovider.md
│   ├── dev
│   │   └── README.md
│   ├── guides
│   │   ├── instance
│   │   │   ├── instance-controllers.md
│   │   │   ├── instance-customization.md
│   │   │   ├── instance-monitoring.md
│   │   │   ├── instance-sharding.md
│   │   │   └── instance-sync.md
│   │   ├── operator
│   │   │   ├── operator-install.md
│   │   │   └── operator-migration.md
│   │   └── resourcesets
│   │       ├── rset-app-definition.md
│   │       ├── rset-github-pull-requests.md
│   │       ├── rset-gitlab-environments.md
│   │       ├── rset-gitlab-merge-requests.md
│   │       ├── rset-image-automation.md
│   │       ├── rset-introduction.md
│   │       └── rset-time-based-delivery.md
│   ├── lkm
│   │   └── README.md
│   ├── logo
│   │   ├── flux-operator-banner.png
│   │   ├── flux-operator-banner.svg
│   │   ├── flux-operator-icon.png
│   │   ├── flux-operator-icon.svg
│   │   ├── flux-operator-logo.png
│   │   └── flux-operator-logo.svg
│   ├── mcp
│   │   ├── instructions.md
│   │   ├── mcp-config.md
│   │   ├── mcp-install.md
│   │   ├── mcp-prompting.md
│   │   ├── prompts.md
│   │   └── tools.md
│   └── web
│       ├── web-config-api.md
│       ├── web-ingress.md
│       ├── web-sso-dex.md
│       ├── web-sso-keycloak.md
│       ├── web-sso-openshift.md
│       ├── web-standalone.md
│       └── web-user-management.md
├── go.mod
├── go.sum
├── hack
│   ├── boilerplate.go.txt
│   ├── build-dist-manifests.sh
│   ├── build-olm-images.sh
│   ├── build-olm-manifests.sh
│   ├── install-operator-sdk.sh
│   ├── prep-release.sh
│   ├── vendor-flux-manifests.sh
│   └── web-ui-load-test.sh
├── internal
│   ├── builder
│   │   ├── build_test.go
│   │   ├── build.go
│   │   ├── components.go
│   │   ├── digest.go
│   │   ├── images_test.go
│   │   ├── images.go
│   │   ├── options.go
│   │   ├── preflight_test.go
│   │   ├── preflight.go
│   │   ├── profiles.go
│   │   ├── pull.go
│   │   ├── resourceset_test.go
│   │   ├── resourceset.go
│   │   ├── result.go
│   │   ├── semver_test.go
│   │   ├── semver.go
│   │   ├── templates.go
│   │   ├── testdata
│   │   │   ├── flux
│   │   │   │   ├── v2.2.0
│   │   │   │   │   └── .gitkeep
│   │   │   │   ├── v2.2.1
│   │   │   │   │   └── .gitkeep
│   │   │   │   └── v2.3.0
│   │   │   │       └── .gitkeep
│   │   │   ├── flux-images
│   │   │   │   └── v2.3.0
│   │   │   │       ├── enterprise-alpine.yaml
│   │   │   │       ├── enterprise-distroless.yaml
│   │   │   │       └── upstream-alpine.yaml
│   │   │   ├── resourceset
│   │   │   │   ├── dedup.golden.yaml
│   │   │   │   ├── dedup.yaml
│   │   │   │   ├── empty.yaml
│   │   │   │   ├── exclude.golden.yaml
│   │   │   │   ├── exclude.yaml
│   │   │   │   ├── invalid-output.yaml
│   │   │   │   ├── missing-inputs.yaml
│   │   │   │   ├── multi-doc-template.golden.yaml
│   │   │   │   ├── multi-doc-template.yaml
│   │   │   │   ├── nestedinputs.golden.yaml
│   │   │   │   ├── nestedinputs.yaml
│   │   │   │   ├── noinputs.golden.yaml
│   │   │   │   ├── noinputs.yaml
│   │   │   │   ├── slugify.golden.yaml
│   │   │   │   └── slugify.yaml
│   │   │   ├── v2.3.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.3.0-golden
│   │   │   │   ├── default.kustomization.yaml
│   │   │   │   ├── patches.kustomization.yaml
│   │   │   │   ├── profiles.kustomization.yaml
│   │   │   │   ├── sharding.kustomization.yaml
│   │   │   │   ├── storage.kustomization.yaml
│   │   │   │   └── sync.kustomization.yaml
│   │   │   ├── v2.6.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   └── source-controller.yaml
│   │   │   ├── v2.6.0-golden
│   │   │   │   ├── shard1.kustomization.yaml
│   │   │   │   ├── shard2.kustomization.yaml
│   │   │   │   ├── sharding.kustomization.yaml
│   │   │   │   ├── size.large.kustomization.yaml
│   │   │   │   ├── size.medium.kustomization.yaml
│   │   │   │   └── size.small.kustomization.yaml
│   │   │   ├── v2.7.0
│   │   │   │   ├── helm-controller.yaml
│   │   │   │   ├── image-automation-controller.yaml
│   │   │   │   ├── image-reflector-controller.yaml
│   │   │   │   ├── kustomize-controller.yaml
│   │   │   │   ├── notification-controller.yaml
│   │   │   │   ├── policies.yaml
│   │   │   │   ├── rbac.yaml
│   │   │   │   ├── source-controller.yaml
│   │   │   │   └── source-watcher.yaml
│   │   │   └── v2.7.0-golden
│   │   │       └── source-watcher.kustomization.yaml
│   │   └── workload_identity.go
│   ├── controller
│   │   ├── common.go
│   │   ├── entitlement_controller_test.go
│   │   ├── entitlement_controller.go
│   │   ├── fluxinstance_artifact_controller_test.go
│   │   ├── fluxinstance_artifact_controller.go
│   │   ├── fluxinstance_artifact_manager_test.go
│   │   ├── fluxinstance_artifact_manager.go
│   │   ├── fluxinstance_controller_test.go
│   │   ├── fluxinstance_controller.go
│   │   ├── fluxinstance_manager.go
│   │   ├── fluxinstance_migrator.go
│   │   ├── fluxinstance_uninstaller.go
│   │   ├── fluxreport_controller_test.go
│   │   ├── fluxreport_controller.go
│   │   ├── resourceset_controller_test.go
│   │   ├── resourceset_controller.go
│   │   ├── resourceset_manager_test.go
│   │   ├── resourceset_manager.go
│   │   ├── resourcesetinputprovider_controller_git_test.go
│   │   ├── resourcesetinputprovider_controller_oci_test.go
│   │   ├── resourcesetinputprovider_controller_test.go
│   │   ├── resourcesetinputprovider_controller.go
│   │   ├── resourcesetinputprovider_manager.go
│   │   ├── suite_test.go
│   │   └── testdata
│   │       └── rsa-private-key.pem
│   ├── entitlement
│   │   ├── aws.go
│   │   ├── client_test.go
│   │   ├── client.go
│   │   ├── default_test.go
│   │   └── default.go
│   ├── filtering
│   │   ├── filters_test.go
│   │   └── filters.go
│   ├── gitprovider
│   │   ├── azuredevops_test.go
│   │   ├── azuredevops.go
│   │   ├── github_test.go
│   │   ├── github.go
│   │   ├── gitlab_test.go
│   │   ├── gitlab.go
│   │   ├── interface.go
│   │   ├── options.go
│   │   ├── result_test.go
│   │   └── result.go
│   ├── inputs
│   │   ├── combine_test.go
│   │   ├── combine.go
│   │   ├── flattener.go
│   │   ├── id.go
│   │   ├── json_test.go
│   │   ├── json.go
│   │   ├── keys_test.go
│   │   ├── keys.go
│   │   ├── permuter_test.go
│   │   ├── permuter.go
│   │   └── provider.go
│   ├── install
│   │   ├── autoupdate.go
│   │   ├── client.go
│   │   ├── credentials.go
│   │   ├── deploy.go
│   │   ├── download.go
│   │   ├── events.go
│   │   ├── installer.go
│   │   ├── options.go
│   │   └── uninstall.go
│   ├── inventory
│   │   ├── inventory_test.go
│   │   ├── inventory.go
│   │   ├── reader_test.go
│   │   ├── reader.go
│   │   └── testdata
│   │       ├── inventory1.yaml
│   │       └── inventory2.yaml
│   ├── lkm
│   │   ├── artifacts_attestation_test.go
│   │   ├── artifacts_attestation.go
│   │   ├── attestation_test.go
│   │   ├── attestation.go
│   │   ├── doc.go
│   │   ├── errors.go
│   │   ├── fetch_test.go
│   │   ├── fetch.go
│   │   ├── jwe_test.go
│   │   ├── jwe.go
│   │   ├── jwt_test.go
│   │   ├── jwt.go
│   │   ├── keygen_test.go
│   │   ├── keygen.go
│   │   ├── keyset_test.go
│   │   ├── keyset.go
│   │   ├── license_test.go
│   │   ├── license.go
│   │   ├── licensekey.go
│   │   ├── manifests_attestation_test.go
│   │   ├── manifests_attestation.go
│   │   ├── revocation_test.go
│   │   └── revocation.go
│   ├── notifier
│   │   └── notifier.go
│   ├── reporter
│   │   ├── cluster.go
│   │   ├── components.go
│   │   ├── crds.go
│   │   ├── distribution.go
│   │   ├── metrics_test.go
│   │   ├── metrics.go
│   │   ├── reconcilers.go
│   │   ├── reporter.go
│   │   └── sync.go
│   ├── schedule
│   │   ├── scheduler_test.go
│   │   └── scheduler.go
│   ├── tests
│   │   ├── fluxinstance
│   │   │   ├── health_check_test.go
│   │   │   └── suite_test.go
│   │   └── resourceset
│   │       ├── health_check_test.go
│   │       └── suite_test.go
│   ├── testutils
│   │   ├── log.go
│   │   └── time.go
│   └── web
│       ├── action_test.go
│       ├── action.go
│       ├── auth
│       │   ├── claims_test.go
│       │   ├── claims.go
│       │   ├── cookies_test.go
│       │   ├── cookies.go
│       │   ├── errors_test.go
│       │   ├── errors.go
│       │   ├── middlewares_test.go
│       │   ├── middlewares.go
│       │   ├── oauth2_test.go
│       │   ├── oauth2.go
│       │   └── oidc.go
│       ├── config
│       │   ├── authentication_types_test.go
│       │   ├── authentication_types.go
│       │   ├── config_types_test.go
│       │   ├── config_types.go
│       │   ├── groupversion_info.go
│       │   ├── loader_test.go
│       │   ├── loader.go
│       │   ├── user_actions_types_test.go
│       │   ├── user_actions_types.go
│       │   └── watcher.go
│       ├── events_test.go
│       ├── events.go
│       ├── favorites_test.go
│       ├── favorites.go
│       ├── fs.go
│       ├── handler.go
│       ├── inventory.go
│       ├── kubeclient
│       │   ├── client_test.go
│       │   ├── client.go
│       │   └── suite_test.go
│       ├── middlewares_test.go
│       ├── middlewares.go
│       ├── report_test.go
│       ├── report.go
│       ├── resource_test.go
│       ├── resource.go
│       ├── resources_test.go
│       ├── resources.go
│       ├── search_test.go
│       ├── search.go
│       ├── server_test.go
│       ├── server.go
│       ├── source.go
│       ├── suite_test.go
│       ├── user
│       │   ├── user_test.go
│       │   └── user.go
│       ├── workload_test.go
│       ├── workload.go
│       ├── workloads_test.go
│       └── workloads.go
├── LICENSE
├── Makefile
├── PROJECT
├── README.md
├── SECURITY.md
├── test
│   ├── e2e
│   │   ├── e2e_suite_test.go
│   │   ├── e2e_test.go
│   │   ├── instance_test.go
│   │   └── utils.go
│   └── olm
│       ├── e2e_suite_test.go
│       ├── e2e_test.go
│       ├── instance_test.go
│       └── scorecard_test.go
└── web
    ├── .gitignore
    ├── embed.go
    ├── eslint.config.js
    ├── index.html
    ├── package-lock.json
    ├── package.json
    ├── postcss.config.js
    ├── public
    │   ├── favicon.svg
    │   └── fonts
    │       └── inter.woff2
    ├── README.md
    ├── src
    │   ├── app.jsx
    │   ├── app.test.jsx
    │   ├── components
    │   │   ├── auth
    │   │   │   ├── LoginPage.jsx
    │   │   │   └── LoginPage.test.jsx
    │   │   ├── dashboards
    │   │   │   ├── cluster
    │   │   │   │   ├── ClusterPage.jsx
    │   │   │   │   ├── ClusterPage.test.jsx
    │   │   │   │   ├── ControllersPanel.jsx
    │   │   │   │   ├── ControllersPanel.test.jsx
    │   │   │   │   ├── InfoPanel.jsx
    │   │   │   │   ├── InfoPanel.test.jsx
    │   │   │   │   ├── OverallStatusPanel.jsx
    │   │   │   │   ├── OverallStatusPanel.test.jsx
    │   │   │   │   ├── ReconcilersPanel.jsx
    │   │   │   │   ├── ReconcilersPanel.test.jsx
    │   │   │   │   ├── SyncPanel.jsx
    │   │   │   │   └── SyncPanel.test.jsx
    │   │   │   ├── common
    │   │   │   │   ├── panel.jsx
    │   │   │   │   ├── panel.test.jsx
    │   │   │   │   ├── yaml.jsx
    │   │   │   │   └── yaml.test.jsx
    │   │   │   └── resource
    │   │   │       ├── ActionBar.jsx
    │   │   │       ├── ActionBar.test.jsx
    │   │   │       ├── ArtifactPanel.jsx
    │   │   │       ├── ArtifactPanel.test.jsx
    │   │   │       ├── ExportedInputsPanel.jsx
    │   │   │       ├── ExportedInputsPanel.test.jsx
    │   │   │       ├── GraphTabContent.jsx
    │   │   │       ├── GraphTabContent.test.jsx
    │   │   │       ├── HistoryTimeline.jsx
    │   │   │       ├── HistoryTimeline.test.jsx
    │   │   │       ├── InputsPanel.jsx
    │   │   │       ├── InputsPanel.test.jsx
    │   │   │       ├── InventoryPanel.jsx
    │   │   │       ├── InventoryPanel.test.jsx
    │   │   │       ├── ReconcilerPanel.jsx
    │   │   │       ├── ReconcilerPanel.test.jsx
    │   │   │       ├── ResourcePage.jsx
    │   │   │       ├── ResourcePage.test.jsx
    │   │   │       ├── SourcePanel.jsx
    │   │   │       ├── SourcePanel.test.jsx
    │   │   │       ├── WorkloadsTabContent.jsx
    │   │   │       └── WorkloadsTabContent.test.jsx
    │   │   ├── favorites
    │   │   │   ├── FavoriteCard.jsx
    │   │   │   ├── FavoriteCard.test.jsx
    │   │   │   ├── FavoritesHeader.jsx
    │   │   │   ├── FavoritesHeader.test.jsx
    │   │   │   ├── FavoritesPage.jsx
    │   │   │   ├── FavoritesPage.test.jsx
    │   │   │   ├── FavoritesSearch.jsx
    │   │   │   └── FavoritesSearch.test.jsx
    │   │   ├── layout
    │   │   │   ├── ConnectionStatus.jsx
    │   │   │   ├── ConnectionStatus.test.jsx
    │   │   │   ├── Footer.jsx
    │   │   │   ├── Footer.test.jsx
    │   │   │   ├── Header.jsx
    │   │   │   ├── Header.test.jsx
    │   │   │   ├── Icons.jsx
    │   │   │   ├── NotFoundPage.jsx
    │   │   │   ├── NotFoundPage.test.jsx
    │   │   │   ├── ThemeToggle.jsx
    │   │   │   ├── ThemeToggle.test.jsx
    │   │   │   ├── UserMenu.jsx
    │   │   │   └── UserMenu.test.jsx
    │   │   └── search
    │   │       ├── EventList.jsx
    │   │       ├── EventList.test.jsx
    │   │       ├── FilterForm.jsx
    │   │       ├── FilterForm.test.jsx
    │   │       ├── QuickSearch.jsx
    │   │       ├── QuickSearch.test.jsx
    │   │       ├── ResourceDetailsView.jsx
    │   │       ├── ResourceDetailsView.test.jsx
    │   │       ├── ResourceList.jsx
    │   │       ├── ResourceList.test.jsx
    │   │       ├── StatusChart.jsx
    │   │       └── StatusChart.test.jsx
    │   ├── index.css
    │   ├── main.jsx
    │   ├── mock
    │   │   ├── action.js
    │   │   ├── events.js
    │   │   ├── events.test.js
    │   │   ├── report.js
    │   │   ├── resource.js
    │   │   ├── resources.js
    │   │   ├── resources.test.js
    │   │   ├── workload.js
    │   │   └── workload.test.js
    │   └── utils
    │       ├── constants.js
    │       ├── cookies.js
    │       ├── cookies.test.js
    │       ├── favorites.js
    │       ├── favorites.test.js
    │       ├── fetch.js
    │       ├── fetch.test.js
    │       ├── hash.js
    │       ├── hash.test.js
    │       ├── meta.js
    │       ├── meta.test.js
    │       ├── navHistory.js
    │       ├── navHistory.test.js
    │       ├── routing.js
    │       ├── routing.test.js
    │       ├── scroll.js
    │       ├── scroll.test.js
    │       ├── status.js
    │       ├── status.test.js
    │       ├── theme.js
    │       ├── theme.test.js
    │       ├── time.js
    │       ├── time.test.js
    │       ├── version.js
    │       └── version.test.js
    ├── tailwind.config.js
    ├── vite.config.js
    └── vitest.setup.js
```

# Files

--------------------------------------------------------------------------------
/config/data/flux/v2.6.4/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.0/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.1/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.2/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.3/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.4/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/config/data/flux/v2.7.5/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/v2.3.0/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/v2.6.0/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/v2.7.0/policies.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: networking.k8s.io/v1
 2 | kind: NetworkPolicy
 3 | metadata:
 4 |   name: allow-egress
 5 | spec:
 6 |   egress:
 7 |   - {}
 8 |   ingress:
 9 |   - from:
10 |     - podSelector: {}
11 |   podSelector: {}
12 |   policyTypes:
13 |   - Ingress
14 |   - Egress
15 | ---
16 | apiVersion: networking.k8s.io/v1
17 | kind: NetworkPolicy
18 | metadata:
19 |   name: allow-scraping
20 | spec:
21 |   ingress:
22 |   - from:
23 |     - namespaceSelector: {}
24 |     ports:
25 |     - port: 8080
26 |       protocol: TCP
27 |   podSelector: {}
28 |   policyTypes:
29 |   - Ingress
30 | ---
31 | apiVersion: networking.k8s.io/v1
32 | kind: NetworkPolicy
33 | metadata:
34 |   name: allow-webhooks
35 | spec:
36 |   ingress:
37 |   - from:
38 |     - namespaceSelector: {}
39 |   podSelector:
40 |     matchLabels:
41 |       app: notification-controller
42 |   policyTypes:
43 |   - Ingress
44 | 
```

--------------------------------------------------------------------------------
/cmd/cli/completion_fish.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package main
 5 | 
 6 | import (
 7 | 	"os"
 8 | 
 9 | 	"github.com/spf13/cobra"
10 | )
11 | 
12 | var completionFishCmd = &cobra.Command{
13 | 	Use:   "fish",
14 | 	Short: "Generates fish completion scripts",
15 | 	Example: `To configure your fish shell to load completions for each session write this script to your completions dir:
16 | 
17 | flux-operator completion fish > ~/.config/fish/completions/flux-operator.fish
18 | 
19 | See http://fishshell.com/docs/current/index.html#completion-own for more details`,
20 | 	Run: func(cmd *cobra.Command, args []string) {
21 | 		rootCmd.GenFishCompletion(os.Stdout, true) //nolint:errcheck
22 | 	},
23 | }
24 | 
25 | func init() {
26 | 	completionCmd.AddCommand(completionFishCmd)
27 | }
28 | 
```

--------------------------------------------------------------------------------
/internal/builder/digest.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2024 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package builder
 5 | 
 6 | import (
 7 | 	"context"
 8 | 	"fmt"
 9 | 	"strings"
10 | 
11 | 	"github.com/google/go-containerregistry/pkg/authn"
12 | 	"github.com/google/go-containerregistry/pkg/crane"
13 | )
14 | 
15 | // GetArtifactDigest looks up an artifact from an OCI repository and returns the digest of the artifact.
16 | func GetArtifactDigest(ctx context.Context, ociURL string, keyChain authn.Keychain) (string, error) {
17 | 	digest, err := crane.Digest(strings.TrimPrefix(ociURL, "oci://"), crane.WithContext(ctx), crane.WithAuthFromKeychain(keyChain))
18 | 	if err != nil {
19 | 		return "", fmt.Errorf("fetching digest for artifact %s failed: %w", ociURL, err)
20 | 	}
21 | 	return digest, nil
22 | }
23 | 
```

--------------------------------------------------------------------------------
/cmd/mcp/toolbox/testdata/kubeconfig.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: v1
 2 | kind: Config
 3 | clusters:
 4 |   - cluster:
 5 |       certificate-authority-data: cGFzc3dvcmQ=
 6 |       server: https://127.0.0.1:57975
 7 |     name: kind-dev
 8 |   - cluster:
 9 |       certificate-authority-data: dGVzdDI=
10 |       server: https://127.0.0.1:57974
11 |     name: kind-staging
12 | contexts:
13 |   - context:
14 |       cluster: kind-dev
15 |       user: kind-dev
16 |     name: kind-dev
17 |   - context:
18 |       cluster: kind-staging
19 |       user: kind-staging
20 |     name: kind-staging
21 | current-context: kind-dev
22 | preferences: {}
23 | users:
24 |   - name: kind-dev
25 |     user:
26 |       client-certificate-data: cGFzc3dvcmQ=
27 |       client-key-data: test
28 |   - name: kind-staging
29 |     user:
30 |       client-certificate-data: dGVzdDI=
31 |       client-key-data: test
32 | 
```

--------------------------------------------------------------------------------
/internal/inputs/flattener.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package inputs
 5 | 
 6 | // Flattener is a strategy that flattens the inputs from multiple providers
 7 | // into a single list by concatenating them.
 8 | type Flattener struct {
 9 | 	combined Combined
10 | }
11 | 
12 | // NewFlattener returns a new initialized *Flattener.
13 | func NewFlattener() *Flattener {
14 | 	return &Flattener{}
15 | }
16 | 
17 | // AddProvider adds the inputs from a provider to the flattener.
18 | func (f *Flattener) AddProvider(name string, inputs []map[string]any) error {
19 | 	f.combined = append(f.combined, ToCombined(inputs)...)
20 | 	return nil
21 | }
22 | 
23 | // Combine returns the combined inputs as a single flattened list.
24 | func (f *Flattener) Combine() Combined {
25 | 	return f.combined
26 | }
27 | 
```

--------------------------------------------------------------------------------
/config/rbac/role.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | ---
 2 | apiVersion: rbac.authorization.k8s.io/v1
 3 | kind: ClusterRole
 4 | metadata:
 5 |   name: manager-role
 6 | rules:
 7 | - apiGroups:
 8 |   - fluxcd.controlplane.io
 9 |   resources:
10 |   - fluxinstances
11 |   - fluxreports
12 |   - resourcesetinputproviders
13 |   - resourcesets
14 |   verbs:
15 |   - create
16 |   - delete
17 |   - get
18 |   - list
19 |   - patch
20 |   - update
21 |   - watch
22 | - apiGroups:
23 |   - fluxcd.controlplane.io
24 |   resources:
25 |   - fluxinstances/finalizers
26 |   - fluxreports/finalizers
27 |   - resourcesetinputproviders/finalizers
28 |   - resourcesets/finalizers
29 |   verbs:
30 |   - update
31 | - apiGroups:
32 |   - fluxcd.controlplane.io
33 |   resources:
34 |   - fluxinstances/status
35 |   - fluxreports/status
36 |   - resourcesetinputproviders/status
37 |   - resourcesets/status
38 |   verbs:
39 |   - get
40 |   - patch
41 |   - update
42 | 
```

--------------------------------------------------------------------------------
/internal/entitlement/client_test.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2024 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package entitlement
 5 | 
 6 | import (
 7 | 	"testing"
 8 | 
 9 | 	. "github.com/onsi/gomega"
10 | )
11 | 
12 | func TestNewClient_DefaultVendor(t *testing.T) {
13 | 	g := NewWithT(t)
14 | 
15 | 	// Unset the environment variable
16 | 	t.Setenv(MarketplaceTypeEnvKey, "")
17 | 
18 | 	client, err := NewClient()
19 | 	g.Expect(err).ToNot(HaveOccurred())
20 | 	g.Expect(client).ToNot(BeNil())
21 | 	g.Expect(client.GetVendor()).To(Equal(DefaultVendor))
22 | }
23 | 
24 | func TestNewClient_UnsupportedVendor(t *testing.T) {
25 | 	g := NewWithT(t)
26 | 
27 | 	// Set the environment variable to an unsupported value
28 | 	t.Setenv(MarketplaceTypeEnvKey, "unsupported")
29 | 
30 | 	client, err := NewClient()
31 | 	g.Expect(err).To(HaveOccurred())
32 | 	g.Expect(client).To(BeNil())
33 | }
34 | 
```

--------------------------------------------------------------------------------
/api/v1/groupversion_info.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2024 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | // Package v1 contains API Schema definitions for the fluxcd v1 API group
 5 | // +kubebuilder:object:generate=true
 6 | // +groupName=fluxcd.controlplane.io
 7 | package v1
 8 | 
 9 | import (
10 | 	"k8s.io/apimachinery/pkg/runtime/schema"
11 | 	"sigs.k8s.io/controller-runtime/pkg/scheme"
12 | )
13 | 
14 | var (
15 | 	// GroupVersion is group version used to register these objects
16 | 	GroupVersion = schema.GroupVersion{Group: "fluxcd.controlplane.io", Version: "v1"}
17 | 
18 | 	// SchemeBuilder is used to add go types to the GroupVersionKind scheme
19 | 	SchemeBuilder = &scheme.Builder{GroupVersion: GroupVersion}
20 | 
21 | 	// AddToScheme adds the types in this group-version to the given scheme.
22 | 	AddToScheme = SchemeBuilder.AddToScheme
23 | )
24 | 
```

--------------------------------------------------------------------------------
/internal/gitprovider/interface.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2024 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package gitprovider
 5 | 
 6 | import (
 7 | 	"context"
 8 | )
 9 | 
10 | // Interface that all Git SaaS providers must implement.
11 | type Interface interface {
12 | 	// ListTags returns a list of tags that match the filters.
13 | 	ListTags(ctx context.Context, opts Options) ([]Result, error)
14 | 
15 | 	// ListBranches returns a list of branches that match the filters.
16 | 	ListBranches(ctx context.Context, opts Options) ([]Result, error)
17 | 
18 | 	// ListRequests returns a list of pull/merge requests that match the filters.
19 | 	ListRequests(ctx context.Context, opts Options) ([]Result, error)
20 | 
21 | 	// ListEnvironments returns a list of environments that match the filters.
22 | 	ListEnvironments(ctx context.Context, opts Options) ([]Result, error)
23 | }
24 | 
```

--------------------------------------------------------------------------------
/cmd/mcp/prompter/manager.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package prompter
 5 | 
 6 | import (
 7 | 	"github.com/modelcontextprotocol/go-sdk/mcp"
 8 | )
 9 | 
10 | type SystemPrompt struct {
11 | 	Prompt  *mcp.Prompt
12 | 	Handler mcp.PromptHandler
13 | }
14 | 
15 | // Manager represents an entity responsible for managing and
16 | // registering prompts and their handlers in a server.
17 | type Manager struct{}
18 | 
19 | // NewManager creates and returns a new instance of Manager
20 | // for managing and registering prompts and their handlers.
21 | func NewManager() *Manager {
22 | 	return &Manager{}
23 | }
24 | 
25 | // RegisterPrompts registers all prompts in the Manager's PromptSet with the provided server.
26 | func (m *Manager) RegisterPrompts(server *mcp.Server) {
27 | 	for _, p := range m.PromptSet() {
28 | 		server.AddPrompt(p.Prompt, p.Handler)
29 | 	}
30 | }
31 | 
```

--------------------------------------------------------------------------------
/internal/testutils/log.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package testutils
 5 | 
 6 | import (
 7 | 	"testing"
 8 | 
 9 | 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
10 | 	"k8s.io/apimachinery/pkg/runtime"
11 | 	"sigs.k8s.io/yaml"
12 | 
13 | 	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
14 | )
15 | 
16 | // LogObjectStatus logs the status fields of a FluxObject in YAML format.
17 | func LogObjectStatus(t *testing.T, obj fluxcdv1.FluxObject) {
18 | 	u, _ := runtime.DefaultUnstructuredConverter.ToUnstructured(obj)
19 | 	status, _, _ := unstructured.NestedFieldCopy(u, "status")
20 | 	sts, _ := yaml.Marshal(status)
21 | 	t.Log(obj.GetName(), "status:\n", string(sts))
22 | }
23 | 
24 | // LogObject logs the entire FluxObject in YAML format.
25 | func LogObject(t *testing.T, obj fluxcdv1.FluxObject) {
26 | 	sts, _ := yaml.Marshal(obj)
27 | 	t.Log("object:\n", string(sts))
28 | }
29 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/dedup.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: fluxcd.controlplane.io/v1
 2 | kind: ResourceSet
 3 | metadata:
 4 |   name: app1
 5 |   namespace: apps
 6 | spec:
 7 |   inputs:
 8 |     - tenant: team1
 9 |       replicas: "2"
10 |     - tenant: team2
11 |       replicas: "3"
12 |   resources:
13 |     - apiVersion: source.toolkit.fluxcd.io/v1beta2
14 |       kind: OCIRepository
15 |       metadata:
16 |         name: app1
17 |         namespace: apps
18 |       spec:
19 |         interval: 10m
20 |         url: oci://ghcr.io/org/charts/app1
21 |         ref:
22 |           semver: '*'
23 |     - apiVersion: helm.toolkit.fluxcd.io/v2
24 |       kind: HelmRelease
25 |       metadata:
26 |         name: app1-<< inputs.tenant >>
27 |         namespace: apps
28 |       spec:
29 |         interval: 1h
30 |         releaseName: app1-<< inputs.tenant >>
31 |         chartRef:
32 |           kind: OCIRepository
33 |           name: app1
34 |         values:
35 |           replicas: << inputs.replicas | int >>
36 | 
```

--------------------------------------------------------------------------------
/config/olm/test/olm.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: v1
 2 | kind: Namespace
 3 | metadata:
 4 |   name: flux-system
 5 | ---
 6 | apiVersion: operators.coreos.com/v1alpha1
 7 | kind: CatalogSource
 8 | metadata:
 9 |   name: custom
10 |   namespace: flux-system
11 | spec:
12 |   description: custom
13 |   displayName: custom
14 |   image: ghcr.io/controlplaneio-fluxcd/openshift-flux-operator-index:v${FLUX_OPERATOR_VERSION}
15 |   publisher: custom
16 |   sourceType: grpc
17 |   updateStrategy:
18 |     registryPoll:
19 |       interval: 30m
20 | ---
21 | apiVersion: operators.coreos.com/v1alpha1
22 | kind: Subscription
23 | metadata:
24 |   name: flux-subscription
25 |   namespace: flux-system
26 | spec:
27 |   channel: stable
28 |   name: flux-operator
29 |   source: custom
30 |   sourceNamespace: flux-system
31 |   startingCSV: flux-operator.v${FLUX_OPERATOR_VERSION}
32 | ---
33 | apiVersion: operators.coreos.com/v1alpha2
34 | kind: OperatorGroup
35 | metadata:
36 |   name: flux-system-group
37 |   namespace: flux-system
38 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/invalid-output.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: fluxcd.controlplane.io/v1
 2 | kind: ResourceSet
 3 | metadata:
 4 |   name: app1
 5 |   namespace: apps
 6 | spec:
 7 |   inputs:
 8 |     - tenant: team1
 9 |       semver: ">=1.0.0-rc.0"
10 |     - tenant: team2
11 |       semver: ">=1.0.0-rc.0"
12 |   resources:
13 |     - apiVersion: source.toolkit.fluxcd.io/v1beta2
14 |       kind: OCIRepository
15 |       metadata:
16 |         name: app1-<< inputs.tenant >>
17 |         namespace: apps
18 |       spec:
19 |         interval: 10m
20 |         url: oci://ghcr.io/org/charts/app1
21 |         ref:
22 |           semver: << inputs.semver >>
23 |     - apiVersion: helm.toolkit.fluxcd.io/v2
24 |       kind: HelmRelease
25 |       metadata:
26 |         name: app1-<< inputs.tenant >>
27 |         namespace: apps
28 |       spec:
29 |         interval: 1h
30 |         releaseName: app1-<< inputs.tenant >>
31 |         chartRef:
32 |           kind: OCIRepository
33 |           name: app1-<< inputs.tenant >>
34 | 
```

--------------------------------------------------------------------------------
/cmd/cli/get.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package main
 5 | 
 6 | import (
 7 | 	"io"
 8 | 
 9 | 	"github.com/olekukonko/tablewriter"
10 | 	"github.com/spf13/cobra"
11 | )
12 | 
13 | var getCmd = &cobra.Command{
14 | 	Use:   "get",
15 | 	Short: "List Flux Operator resources",
16 | }
17 | 
18 | func init() {
19 | 	rootCmd.AddCommand(getCmd)
20 | }
21 | 
22 | func printTable(writer io.Writer, header []string, rows [][]string) {
23 | 	table := tablewriter.NewWriter(writer)
24 | 	table.SetHeader(header)
25 | 	table.SetAutoWrapText(false)
26 | 	table.SetAutoFormatHeaders(true)
27 | 	table.SetHeaderAlignment(tablewriter.ALIGN_LEFT)
28 | 	table.SetAlignment(tablewriter.ALIGN_LEFT)
29 | 	table.SetCenterSeparator("")
30 | 	table.SetColumnSeparator("")
31 | 	table.SetRowSeparator("")
32 | 	table.SetHeaderLine(false)
33 | 	table.SetBorder(false)
34 | 	table.SetTablePadding("\t")
35 | 	table.SetNoWhiteSpace(true)
36 | 	table.AppendBulk(rows)
37 | 	table.Render()
38 | }
39 | 
```

--------------------------------------------------------------------------------
/web/vite.config.js:
--------------------------------------------------------------------------------

```javascript
 1 | import { defineConfig } from 'vite'
 2 | import preact from '@preact/preset-vite'
 3 | 
 4 | export default defineConfig(() => {
 5 |   const useMockData = process.env.VITE_USE_MOCK_DATA === 'true'
 6 | 
 7 |   return {
 8 |     plugins: [preact()],
 9 |     test: {
10 |       globals: true,
11 |       environment: 'jsdom',
12 |       setupFiles: './vitest.setup.js',
13 |       env: {
14 |         MODE: 'test',
15 |         VITE_USE_MOCK_DATA: 'false'
16 |       }
17 |     },
18 |     build: {
19 |       outDir: 'dist',
20 |       emptyOutDir: true,
21 |       assetsDir: 'assets',
22 |       rollupOptions: {
23 |         output: {
24 |           manualChunks: undefined,
25 |         },
26 |       },
27 |     },
28 |     // API proxy for development server (disabled when using mock data)
29 |     server: useMockData ? {} : {
30 |       proxy: {
31 |         '/api': {
32 |           target: 'http://localhost:9080',
33 |           changeOrigin: true,
34 |         },
35 |       },
36 |     },
37 |   }
38 | })
39 | 
```

--------------------------------------------------------------------------------
/cmd/cli/testdata/build_resourceset/rset-with-rsip-named.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: fluxcd.controlplane.io/v1
 2 | kind: ResourceSet
 3 | metadata:
 4 |   name: app1
 5 |   namespace: apps
 6 | spec:
 7 |   inputsFrom:
 8 |     - name: app1-tenant1
 9 |     - name: app1-tenant2
10 |   resources:
11 |     - apiVersion: source.toolkit.fluxcd.io/v1
12 |       kind: OCIRepository
13 |       metadata:
14 |         name: app1-<< inputs.tenant >>
15 |         namespace: apps
16 |       spec:
17 |         interval: 10m
18 |         url: oci://my.registry/org/charts/app1
19 |         ref:
20 |           semver: << inputs.app.version | quote >>
21 |     - apiVersion: helm.toolkit.fluxcd.io/v2
22 |       kind: HelmRelease
23 |       metadata:
24 |         name: app1-<< inputs.tenant >>
25 |         namespace: apps
26 |       spec:
27 |         interval: 1h
28 |         releaseName: app1-<< inputs.tenant >>
29 |         chartRef:
30 |           kind: OCIRepository
31 |           name: app1-<< inputs.tenant >>
32 |         values:
33 |           replicaCount: << inputs.app.replicas | int >>
```

--------------------------------------------------------------------------------
/config/rbac/kustomization.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | resources:
 2 | # All RBAC will be applied under this service account in
 3 | # the deployment namespace. You may comment out this resource
 4 | # if your manager will use a service account that exists at
 5 | # runtime. Be sure to update RoleBinding and ClusterRoleBinding
 6 | # subjects if changing service account names.
 7 | - service_account.yaml
 8 | - role.yaml
 9 | - role_binding.yaml
10 | - leader_election_role.yaml
11 | - leader_election_role_binding.yaml
12 | # For each CRD, "Editor" and "Viewer" roles are scaffolded by
13 | # default, aiding admins in cluster management. Those roles are
14 | # not used by the Project itself. You can comment the following lines
15 | # if you do not want those helpers be installed with your Project.
16 | - fluxreport_editor_role.yaml
17 | - fluxreport_viewer_role.yaml
18 | - fluxinstance_editor_role.yaml
19 | - fluxinstance_viewer_role.yaml
20 | - resourceset_editor_role.yaml
21 | - resourceset_viewer_role.yaml
22 | 
23 | 
```

--------------------------------------------------------------------------------
/cmd/cli/completion_powershell.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package main
 5 | 
 6 | import (
 7 | 	"os"
 8 | 
 9 | 	"github.com/spf13/cobra"
10 | )
11 | 
12 | var completionPowerShellCmd = &cobra.Command{
13 | 	Use:   "powershell",
14 | 	Short: "Generates powershell completion scripts",
15 | 	Example: `To load completion run
16 | 
17 | . <(flux-operator completion powershell)
18 | 
19 | To configure your powershell shell to load completions for each session add to your powershell profile
20 | 
21 | Windows:
22 | 
23 | cd "$env:USERPROFILE\Documents\WindowsPowerShell\Modules"
24 | flux-operator completion >> flux-operator-completion.ps1
25 | 
26 | Linux:
27 | 
28 | cd "${XDG_CONFIG_HOME:-"$HOME/.config/"}/powershell/modules"
29 | flux-operator completion >> flux-operator-completions.ps1`,
30 | 	Run: func(cmd *cobra.Command, args []string) {
31 | 		rootCmd.GenPowerShellCompletion(os.Stdout) //nolint:errcheck
32 | 	},
33 | }
34 | 
35 | func init() {
36 | 	completionCmd.AddCommand(completionPowerShellCmd)
37 | }
38 | 
```

--------------------------------------------------------------------------------
/config/olm/bundle/metadata/annotations.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | annotations:
 2 |   # Core bundle annotations.
 3 |   operators.operatorframework.io.bundle.channels.v1: stable
 4 |   operators.operatorframework.io.bundle.channel.default.v1: stable
 5 |   operators.operatorframework.io.bundle.manifests.v1: manifests/
 6 |   operators.operatorframework.io.bundle.mediatype.v1: registry+v1
 7 |   operators.operatorframework.io.bundle.metadata.v1: metadata/
 8 |   operators.operatorframework.io.bundle.package.v1: flux-operator
 9 |   operators.operatorframework.io.metrics.builder: operator-sdk-v1.41.0
10 |   operators.operatorframework.io.metrics.mediatype.v1: metrics+v1
11 |   operators.operatorframework.io.metrics.project_layout: go.kubebuilder.io/v4
12 | 
13 |   # Annotations for testing.
14 |   operators.operatorframework.io.test.mediatype.v1: scorecard+v1
15 |   operators.operatorframework.io.test.config.v1: tests/scorecard/
16 | 
17 |   # OpenShift specific annotations
18 |   com.redhat.openshift.versions: "v4.12-v4.19"
19 | 
```

--------------------------------------------------------------------------------
/web/package.json:
--------------------------------------------------------------------------------

```json
 1 | {
 2 |   "name": "flux-status-page",
 3 |   "version": "0.0.1",
 4 |   "type": "module",
 5 |   "scripts": {
 6 |     "dev": "vite",
 7 |     "build": "vite build",
 8 |     "preview": "vite preview",
 9 |     "lint": "eslint src --ext .jsx",
10 |     "lint:fix": "eslint src --ext .jsx --fix",
11 |     "test": "vitest --run"
12 |   },
13 |   "dependencies": {
14 |     "@preact/signals": "^2.5.1",
15 |     "js-yaml": "^4.1.1",
16 |     "preact": "^10.28.2",
17 |     "preact-iso": "^2.11.1",
18 |     "prismjs": "^1.30.0"
19 |   },
20 |   "devDependencies": {
21 |     "@eslint/js": "^9.39.0",
22 |     "@preact/preset-vite": "^2.10.2",
23 |     "@testing-library/jest-dom": "^6.9.1",
24 |     "@testing-library/preact": "^3.2.4",
25 |     "@testing-library/user-event": "^14.6.1",
26 |     "@vitest/coverage-v8": "^4.0.16",
27 |     "autoprefixer": "^10.4.23",
28 |     "eslint": "^9.39.2",
29 |     "jsdom": "^27.4.0",
30 |     "postcss": "^8.5.6",
31 |     "tailwindcss": "^3.4.19",
32 |     "vite": "^7.3.1",
33 |     "vitest": "^4.0.9"
34 |   }
35 | }
36 | 
```

--------------------------------------------------------------------------------
/cmd/mcp/Dockerfile:
--------------------------------------------------------------------------------

```dockerfile
 1 | # Build the Flux MCP server binary using Docker's Debian image.
 2 | FROM --platform=${BUILDPLATFORM} golang:1.25 AS builder
 3 | ARG TARGETOS
 4 | ARG TARGETARCH
 5 | ARG VERSION
 6 | WORKDIR /workspace
 7 | 
 8 | # Copy the Go Modules manifests.
 9 | COPY go.mod go.mod
10 | COPY go.sum go.sum
11 | 
12 | # Cache the Go Modules
13 | RUN go mod download
14 | 
15 | # Copy the Go sources.
16 | COPY cmd/mcp/ cmd/mcp/
17 | COPY api/ api/
18 | COPY internal/ internal/
19 | 
20 | # Build the server binary.
21 | RUN CGO_ENABLED=0 GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \
22 |     go build -ldflags="-s -w -X main.VERSION=${VERSION}" -a -o flux-operator-mcp ./cmd/mcp/
23 | 
24 | # Run the server binary using Google's Distroless image.
25 | FROM gcr.io/distroless/static:nonroot
26 | WORKDIR /
27 | 
28 | # Copy the license.
29 | COPY LICENSE /licenses/LICENSE
30 | 
31 | # Copy the server binary.
32 | COPY --from=builder /workspace/flux-operator-mcp .
33 | 
34 | # Run the server under a non-root user.
35 | USER 65532:65532
36 | ENTRYPOINT ["/flux-operator-mcp"]
37 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:a67a037faa850220ff94d8090253732079589ad9ff10b6ddf294f3b7cd0f3424
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:c0fab940c7e578ea519097d36c040238b0cc039ce366fdb753947428bbf0c3d6
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:aed795c7a8b85bca93f6d199d5a14bbefaf925ad5aa5316b32a716cfa4070d0b
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:ab5097213194f3cd9f0e68d8a937d94c4fc7e821f6544453211e94815b282aa2
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.4.1
 4 |     digest: sha256:3c5f0f022f990ffc0daf00e5b199548fc0fa6e7119e972318f0267081a332963
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.4.0
 7 |     digest: sha256:e3b0cf847e9cdf47b19af0fbcfe22786b80b598e0caeea8b6d2a5f9c26a48a24
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.1.0
10 |     digest: sha256:4c75ca6c24ceb1f1bd7e935d9287a93e4f925c512f206763ec5a47de3ef3ff48
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.4.0
13 |     digest: sha256:425309a159b15e07f7d97622effc79bc432a37ed55289dd465d37fa217a92a7d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.33.0
16 |     digest: sha256:c6864684f96cfbb3a91c816084032bb019b302af8b63b0e06b12b4018a9a8242
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.39.0
19 |     digest: sha256:5b6c2e97055cfe69fe8996f48b53db039c136210dbc98c5631864a9e573d0e20
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:00cd9316a3790f3e212132f38c849f87d6e6eeca6272ec9557387be3cec054be
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.5.0
 7 |     digest: sha256:590deed942202f1e4097b9996a4d2892995605af94f730635169c7f15f9e79e3
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:62eaa9c9a9296a22684f9a77befa4f7fbf850fc314da47b3d6c28ad2e34ba965
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:9fe4b5fb312eace22e43969975938deca08d64282c9a1e2783afe91be3da2869
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:d002d16ab3bd4b370b23d989525182c19a068d5c1d63764acb14e43709d1949b
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:8c9de4b247271d6b02293f0cbc901e79b14b57b7ef0d8989dfdf3ec6151df8d5
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:00cd9316a3790f3e212132f38c849f87d6e6eeca6272ec9557387be3cec054be
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.5.1
 7 |     digest: sha256:b89935f9428764c389c5192fdb8f6c53b66e365fa09ac8cec597e82273e9f518
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:62eaa9c9a9296a22684f9a77befa4f7fbf850fc314da47b3d6c28ad2e34ba965
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:9fe4b5fb312eace22e43969975938deca08d64282c9a1e2783afe91be3da2869
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:d002d16ab3bd4b370b23d989525182c19a068d5c1d63764acb14e43709d1949b
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:8c9de4b247271d6b02293f0cbc901e79b14b57b7ef0d8989dfdf3ec6151df8d5
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:44ea51a40e4da2c0f19427df3219f29b86c8fce38539d227f6ffc2bdc944036f
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.35.0
16 |     digest: sha256:dcfb9bfd6dea79f608788dc1e9821f297cf62c053bb51b482fcaf5b674a3198a
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:868010070f063758282bf0c64cf17c6150b51d6eee49d40647706ccbd93c109d
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:44ea51a40e4da2c0f19427df3219f29b86c8fce38539d227f6ffc2bdc944036f
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.35.1
16 |     digest: sha256:65e68ed78cac29a9f42b83098ec8fa1e40a6ef554f89303da1520cff68ec5a05
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:868010070f063758282bf0c64cf17c6150b51d6eee49d40647706ccbd93c109d
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.6.1
 4 |     digest: sha256:a9dbd7872344ceadea48a89ea24c8a761a2a1008a2cdbbc1ffa3ed95dd2a00ce
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.41.1
19 |     digest: sha256:b622ed93cddf31ac4086e7f6847cafc990ba363f8f4af49d3217313b50582282
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.6.1
 7 |     digest: sha256:1a50730537bafb7827365b9af95c4eb71ca3d9b0bed9bc9bc765880e976972ef
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4
20 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:a67a037faa850220ff94d8090253732079589ad9ff10b6ddf294f3b7cd0f3424
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:c0fab940c7e578ea519097d36c040238b0cc039ce366fdb753947428bbf0c3d6
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:aed795c7a8b85bca93f6d199d5a14bbefaf925ad5aa5316b32a716cfa4070d0b
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:ab5097213194f3cd9f0e68d8a937d94c4fc7e821f6544453211e94815b282aa2
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.2.2
 4 |     digest: sha256:b4baf93ab71c47f139723856991d71f61a408cf3894caf71f14bb997568faa35
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.2.0
 7 |     digest: sha256:bdda2e77e84225be33f673cdbdeb868932edc1a4fb76d028084bbb9951ae51fa
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v0.37.0
10 |     digest: sha256:a5af89c471285a569e9e27c81b5b2fb771f7a4110ef9da1cda53c89d24b536eb
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.2.2
13 |     digest: sha256:226f92f9dbcf82d9bdc907dd80521c43c34dbca2c893995c7334c80320faea2f
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v0.37.1
10 |     digest: sha256:6b28d0c8aadcb811474d1f4bcc11b7fec2c807d4d059a9b36a485a6ea2cb54d9
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v0.37.2
10 |     digest: sha256:09fcd4c4c6460e439d60be07f4e2d4a86a61fc655ed20280bba28eca257109a5
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.2.4
 4 |     digest: sha256:34106b52d88d67d2889fabd2df19682dda30f32030488c9ae5c72e26239080fb
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.2.2
 7 |     digest: sha256:2df190255fc09131412472b900524c5c72a43464b3c2e99163c1ee143c5c2e22
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v0.37.4
10 |     digest: sha256:6280691e55935f0f72cce166c63c0bc1208e68e1e048cf086a2e03d2ed6e2637
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.2.4
13 |     digest: sha256:3e1292b9e8bab71c248307a0611bacfa1fd804231c99c79f113809436566fc3b
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v0.31.2
16 |     digest: sha256:561c17eec9d4afe54be775d5e221e53d9955d0a1ba43b7fdcf365fa562baf273
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v0.37.1
19 |     digest: sha256:97a8895cab8594af7509a5f2bc5495c03b7346722afc4e1e70bf6e445b7e575d
20 | 
```

--------------------------------------------------------------------------------
/internal/entitlement/default.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2024 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package entitlement
 5 | 
 6 | import (
 7 | 	"context"
 8 | 	"fmt"
 9 | 
10 | 	"github.com/opencontainers/go-digest"
11 | )
12 | 
13 | // DefaultClient is an offline entitlement client.
14 | // This client uses a SHA256 digest to generate and verify tokens.
15 | type DefaultClient struct {
16 | 	Vendor string
17 | }
18 | 
19 | // RegisterUsage registers the usage with the default entitlement client.
20 | func (c *DefaultClient) RegisterUsage(ctx context.Context, id string) (string, error) {
21 | 	d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
22 | 	return d.Encoded(), nil
23 | }
24 | 
25 | // Verify verifies the token matches the SHA256 digest of the vendor id.
26 | func (c *DefaultClient) Verify(token, id string) (bool, error) {
27 | 	d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
28 | 	return token == d.Encoded(), nil
29 | }
30 | 
31 | // GetVendor returns the vendor name.
32 | func (c *DefaultClient) GetVendor() string {
33 | 	return c.Vendor
34 | }
35 | 
```

--------------------------------------------------------------------------------
/hack/install-operator-sdk.sh:
--------------------------------------------------------------------------------

```bash
 1 | #!/usr/bin/env bash
 2 | 
 3 | # Copyright 2025 Stefan Prodan.
 4 | # SPDX-License-Identifier: AGPL-3.0
 5 | 
 6 | set -euo pipefail
 7 | 
 8 | VERSION=$1
 9 | REPOSITORY_ROOT=$(git rev-parse --show-toplevel)
10 | DEST_DIR="${REPOSITORY_ROOT}/bin"
11 | 
12 | info() {
13 |     echo '[INFO] ' "$@"
14 | }
15 | 
16 | fatal() {
17 |     echo '[ERROR] ' "$@" >&2
18 |     exit 1
19 | }
20 | 
21 | OS=$(echo "${RUNNER_OS}" | tr '[:upper:]' '[:lower:]')
22 | if [[ "$OS" == "macos" ]]; then
23 |   OS="darwin"
24 | fi
25 | 
26 | ARCH=$(echo "${RUNNER_ARCH}" | tr '[:upper:]' '[:lower:]')
27 | if [[ "$ARCH" == "x64" ]]; then
28 |   ARCH="amd64"
29 | elif [[ "$ARCH" == "x86" ]]; then
30 |   ARCH="386"
31 | fi
32 | 
33 | mkdir -p "${DEST_DIR}"
34 | 
35 | DOWNLOAD_URL="https://github.com/operator-framework/operator-sdk/releases/download/${VERSION}/operator-sdk_${OS}_${ARCH}"
36 | EXEC_FILE="operator-sdk-${VERSION}"
37 | 
38 | info "Downloading operator-sdk ${VERSION} for ${OS}/${ARCH}..."
39 | curl -sL "${DOWNLOAD_URL}" -o "${DEST_DIR}/${EXEC_FILE}"
40 | chmod +x "${DEST_DIR}/${EXEC_FILE}"
41 | 
42 | ${DEST_DIR}/${EXEC_FILE} version
43 | 
```

--------------------------------------------------------------------------------
/config/olm/test/bundle.Dockerfile:
--------------------------------------------------------------------------------

```dockerfile
 1 | FROM scratch
 2 | 
 3 | # Core bundle labels.
 4 | LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1
 5 | LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/
 6 | LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/
 7 | LABEL operators.operatorframework.io.bundle.package.v1=flux-operator
 8 | LABEL operators.operatorframework.io.bundle.channels.v1=stable
 9 | LABEL operators.operatorframework.io.bundle.channel.default.v1=stable
10 | LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.29.0
11 | LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1
12 | LABEL operators.operatorframework.io.metrics.project_layout=unknown
13 | 
14 | # Labels for testing.
15 | LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1
16 | LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/
17 | 
18 | # Copy files to locations specified by labels.
19 | COPY manifests /manifests/
20 | COPY metadata /metadata/
21 | COPY tests/scorecard /tests/scorecard/
22 | 
```

--------------------------------------------------------------------------------
/docs/mcp/prompts.md:
--------------------------------------------------------------------------------

```markdown
 1 | ---
 2 | title: Flux MCP Server Prompts
 3 | description: MCP Server predefined prompts for troubleshooting FluxCD
 4 | ---
 5 | 
 6 | # Flux MCP Server Prompts
 7 | 
 8 | The Flux MCP Server comes with a set of predefined prompts that instruct the AI assistant
 9 | to perform complex tasks by chaining together multiple MCP [tools](tools.md).
10 | 
11 | ## Debugging Prompts
12 | 
13 | These prompts are designed to help you quickly identify and resolve issues with your GitOps pipeline.
14 | 
15 | ### debug_flux_kustomization
16 | 
17 | Troubleshoot a Flux Kustomization and provide root cause analysis for any issues.
18 | 
19 | **Parameters:**
20 | 
21 | - `name` (required): The name of the Kustomization
22 | - `namespace` (required): The namespace of the Kustomization
23 | - `cluster` (optional): The cluster context to use
24 | 
25 | ### debug_flux_helmrelease
26 | 
27 | Troubleshoot a Flux HelmRelease and provide root cause analysis for any issues.
28 | 
29 | **Parameters:**
30 | 
31 | - `name` (required): The name of the HelmRelease
32 | - `namespace` (required): The namespace of the HelmRelease
33 | - `cluster` (optional): The cluster context to use
34 | 
```

--------------------------------------------------------------------------------
/cmd/cli/testdata/build_resourceset/rset-with-rsip-labeled.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: fluxcd.controlplane.io/v1
 2 | kind: ResourceSet
 3 | metadata:
 4 |   name: app1
 5 |   namespace: apps
 6 | spec:
 7 |   inputsFrom:
 8 |     - selector:
 9 |         matchLabels:
10 |           some: label
11 |         matchExpressions:
12 |           - key: anotherLabel
13 |             operator: In
14 |             values:
15 |               - value1
16 |               - value2
17 |   resources:
18 |     - apiVersion: source.toolkit.fluxcd.io/v1
19 |       kind: OCIRepository
20 |       metadata:
21 |         name: app1-<< inputs.tenant >>
22 |         namespace: apps
23 |       spec:
24 |         interval: 10m
25 |         url: oci://my.registry/org/charts/app1
26 |         ref:
27 |           semver: << inputs.app.version | quote >>
28 |     - apiVersion: helm.toolkit.fluxcd.io/v2
29 |       kind: HelmRelease
30 |       metadata:
31 |         name: app1-<< inputs.tenant >>
32 |         namespace: apps
33 |       spec:
34 |         interval: 1h
35 |         releaseName: app1-<< inputs.tenant >>
36 |         chartRef:
37 |           kind: OCIRepository
38 |           name: app1-<< inputs.tenant >>
39 |         values:
40 |           replicaCount: << inputs.app.replicas | int >>
```

--------------------------------------------------------------------------------
/cmd/cli/completion_zsh.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package main
 5 | 
 6 | import (
 7 | 	"os"
 8 | 
 9 | 	"github.com/spf13/cobra"
10 | )
11 | 
12 | var completionZshCmd = &cobra.Command{
13 | 	Use:   "zsh",
14 | 	Short: "Generates zsh completion scripts",
15 | 	Example: `To load completion run
16 | 
17 | . <(flux-operator completion zsh) && compdef _flux-operator flux-operator
18 | 
19 | To configure your zsh shell to load completions for each session add to your zshrc
20 | 
21 | # ~/.zshrc or ~/.profile
22 | command -v flux-operator >/dev/null && . <(flux-operator completion zsh) && compdef _flux-operator flux-operator
23 | 
24 | or write a cached file in one of the completion directories in your ${fpath}:
25 | 
26 | echo "${fpath// /\n}" | grep -i completion
27 | flux-operator completion zsh > _flux-operator
28 | 
29 | mv _flux-operator ~/.oh-my-zsh/completions  # oh-my-zsh
30 | mv _flux-operator ~/.zprezto/modules/completion/external/src/  # zprezto`,
31 | 	Run: func(cmd *cobra.Command, args []string) {
32 | 		rootCmd.GenZshCompletion(os.Stdout) //nolint:errcheck
33 | 	},
34 | }
35 | 
36 | func init() {
37 | 	completionCmd.AddCommand(completionZshCmd)
38 | }
39 | 
```

--------------------------------------------------------------------------------
/internal/web/config/loader.go:
--------------------------------------------------------------------------------

```go
 1 | // Copyright 2025 Stefan Prodan.
 2 | // SPDX-License-Identifier: AGPL-3.0
 3 | 
 4 | package config
 5 | 
 6 | import (
 7 | 	"fmt"
 8 | 	"os"
 9 | 
10 | 	"sigs.k8s.io/yaml"
11 | )
12 | 
13 | // Load reads, validates, and applies default values to missing fields in the configuration
14 | // for the Flux Status Page. If the filename is empty it returns the configuration object
15 | // with default values applied.
16 | func Load(filename string) (*ConfigSpec, error) {
17 | 	if filename == "" {
18 | 		var confSpec ConfigSpec
19 | 		confSpec.ApplyDefaults()
20 | 		confSpec.Version = "no-config"
21 | 		return &confSpec, nil
22 | 	}
23 | 	b, err := os.ReadFile(filename)
24 | 	if err != nil {
25 | 		return nil, err
26 | 	}
27 | 	conf, err := parse(b)
28 | 	if err != nil {
29 | 		return nil, fmt.Errorf("invalid configuration in web config file '%s': %w", filename, err)
30 | 	}
31 | 	conf.Version = "static-file"
32 | 	return conf, nil
33 | }
34 | 
35 | func parse(b []byte) (*ConfigSpec, error) {
36 | 	var conf Config
37 | 	if err := yaml.Unmarshal(b, &conf); err != nil {
38 | 		return nil, err
39 | 	}
40 | 	if err := conf.Validate(); err != nil {
41 | 		return nil, err
42 | 	}
43 | 	conf.Spec.ApplyDefaults()
44 | 	return &conf.Spec, nil
45 | }
46 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:d7b88dd6c361814bfaa92598b9dfe433adec40311008b96a54f3b23c91607ad1
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:6e2ded196361b01a78faec9f56650e52aa70896b808d677998602c509aa3612c
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:0db04c673d4c5729cb7d05e4a510bc36ec18277d6cbb62c4011b3a732c243c47
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:f2c2f31e1ace6c1166a2052bf725ef23169571d59ddff111a8256b739df0846b
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:93c40116ac639a7024dd08d5a95a83410b6d16b2bedcf1bc21c5ca3a27806894
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:5181afb652ac1c395ab7ec808341ba73c64ccc86eaf3df929aba1c1a091872cd
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.4.1
 4 |     digest: sha256:0b7285c0ccdc77d5a5d71158ccc1c42549ea2d9cf9f19dde923ac0f6ee1b3b5e
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.4.0
 7 |     digest: sha256:715b1021699ed73aaf357d9306856b67640cabc1b6a147b9abdcd0e474212531
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.1.0
10 |     digest: sha256:3bb1264b2ab406bf3cb7e692c9008a44e5b8fcc8e6509eb5bea8122b671ca3ab
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.4.0
13 |     digest: sha256:da02cf19d2b8ea95d43d396b72ada6cee23244f7b7262617b5fc211553f96899
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.33.0
16 |     digest: sha256:97d6b0e2ff42dfd2c8a47a7a1ee3a9da160dd4c40bb5ef2beab0ad94db962574
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.39.0
19 |     digest: sha256:50e30c406eb430e3515c1c160c2e965ac13fbec5300af2b0539604c1c0e5e3eb
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:2cd04d22a5663daa6cc271762fc957bf27f113c32dbf7ab9a8e032524c8ff110
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.5.0
 7 |     digest: sha256:3ebf0d3a1086f9e683b3848b2d7db86ba564287ba0c3f417dc4c0a1c1bc9d16f
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:ddd037b807669353cf151a08e5651004c1037c867e7136abdd5285af3399a963
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:52deb7d41feae67005eff5a93b907935a296a6deff181ca039a3c6d6f8f3e227
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:e6901a8e28a3a70eeb3617235181a6dbc723a2fb4e9e532c3505f285815ab8ef
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:314869bb326aab8fe0b39d43e3f91b80d4bd910f52901747a267224e78fed8f9
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:a4cb0fe178e92c4a8320dfe8fbf2558686fae8f9097591ad5e244cca378cc462
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.5.1
 7 |     digest: sha256:d4dfb88e079eb462124b50124c9c5929252d79237d1266a54b288202f3f2f174
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:1f543c220e0e7350dcbacff11364a4d83cb489d43415d89a9d817b72305bf3ea
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:cc477dd3bafbc16253b5f27fb5e9170a8946a967bf3f8d3203896deeae98ddef
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:93945f2214ebd879c6f7734cd7a2a4a454bfac74f98c6eb872ba84d299aac05d
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:9d4dfe44ac3bbd1b5c10ac2156ed7c385709c994bf45f37707ed06e86aff3edb
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:1beb043682143a4b58711df0d33512b13f25fff2b5d5144cfb5b6252933501ed
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:57ce01d5cb12d0d543798a235c280d44a0386449182878919187fd133f1c1d25
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:bb9c842ba900d74f27916b114af4aced9ece6520dea3750ff6eae864cb14fa07
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:beffbf4a50302b457d34e60526f5a87a157c49ba2c0e47edaa3b28d6393b4094
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.35.0
16 |     digest: sha256:f7596097a87ab8782e0373366f108eb46fe45a2becb3008de3270d82158c70d8
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:78fa6c3fdb0e1393611b55be7d099ed500aa6d4770d8ad6f9f389e1dbecb600e
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:bb8e0b78c25a6f64e8e975037255d31e746ae3c657517e2177286c71f3104159
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:394638bb89b473e0b71c14f6f3e3bf9787a86aabfaacb37163d5336cddd590b2
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:6cba5b83dc31f307af5925aaa83d6c7b57fd8f184baba83545eb72a47d1f2fc7
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:97eade442516bce76e33697f70714bff087387a5d5793ca0975d44f3d2470d52
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.35.1
16 |     digest: sha256:51b8f1e8867525e9e06ce45a5fca0903eb0889530d6534ac5858338b201fb30f
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:effc7ab7998bd57475ee489d09f740259c1a5500b6e2d1a015ce47085f5144f5
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.6.1
 4 |     digest: sha256:51a189335ffd0bde011f904617983bef9b9088fb5a920fa486999617be6ff39f
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:01acf7e24781e34a1fe6f449760337828223a300a10a7af89b7f1a4e512c9bed
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:ce7e3e59f1e6ec115177e4bd858b9802074acb4a6dc74af35e997e973e27876d
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:08b0902e29ebfc5cdadfbebcda5effb5b988b2605b1352ddd48049f9cca2b807
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:6791d2a5465a04fbd666b6e75ff109fa943f1350e0d2e3a138108a6625ba4073
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.41.1
19 |     digest: sha256:0c4eef4b90742c319f936959f1318280d6469c5077b98cc2e2a5595399f16c08
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:aae7abbe6e600e82d762ecd201324071d68bdded94007d6269500bc680081763
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:484a5a6827a7ab98070cd705bce2842a9a8cbf26f770f0dc3c5af510dc340e7c
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:094ba4a64987efa3c9131217be472f71f36bfc2cfa90e2eaf317f830d7267c88
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:e9024b81cdb6ef91ff969617ac060b35f580f5d2277a01db7bd96c1dc8ced36a
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:940fc335448bc8dfab37864e1a7fd86b7116a9a9dbba6124433c46818cf9aabd
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:71877b9853f8cd96eff8989dda5744d3ab02cb41a026af8c0250922a33f9740c
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:55cda38118483790ff90f1b530aee30d5e319fc752945661008da5de58340613
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.6.1
 7 |     digest: sha256:ee402a9504361a69b6a91efb559598da1a3e3a40013a6b1df8f3e0df98217745
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:1019bd5a7c5951e4b8f2c04dee462fd968f6bc5ded987a59cb3177c209129073
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:78f497c34b40a55066515062010f2886eba2907896613ac6317e77206682f76d
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:3d9463e07223f033731972c833b08cb9891a705c22d630968276f5e131bd6708
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:58edb789cf293023c1cb3df2ce140583d98b6db7d5906a63f3b6127a6762ee71
20 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:20dd417c31decab169fe1384a52e122aceb14061ff61f8bf59324b7808326ca5
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:f86abc81aee1ed60b18ae137bec23d3f63b30b303fb926fc4b61643c63734c28
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:88672f9d1f73a84c14d2dcc9373f264abc7589ec304b72b322c5dfe78643a3d9
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:9894577d753297d03c288a9ae0149168a6b6cfd07e89bed3d2747c03639379ba
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:4b80a314ef52af28809020ea2c1ae30c23ceafe65a871cb1d005b01681cd22a7
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:64e31d9eec9c1aec025d49ff6af1a72352ebbbd6a37b5490e18153a4cbc0f709
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.2.2
 4 |     digest: sha256:8d64e373389ec4a742855f54b169e39eae6057d5dc062373f2866dff15b4f025
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.2.0
 7 |     digest: sha256:c8d2b1ab76d15705b9db9f61a093c0c4cc7986346f8a9d47141bfc6433731f52
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v0.37.0
10 |     digest: sha256:5d4b3484817f80ca9f2efc448f3a74f33f58251d2053ae7d06494dd75ca9a86c
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.2.2
13 |     digest: sha256:ab7cea5ce2de7c32853f21eaee532cfcc8b9257b7bcd1c336b00e0b955650159
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v0.37.1
10 |     digest: sha256:8646eab771b51d617f6f3997aae29bbc28e4ae8c511249518d315e59cef0e6f7
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v0.37.2
10 |     digest: sha256:cbf37cb6abca25ba4fee15a14ba144b38529a37804b60bc13bdc769cbd532914
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/enterprise-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
 3 |     newTag: v1.2.5
 4 |     digest: sha256:911c127af3a893dc1ecb77d755cfaf4a4f209045767ccfd0c5f0615c56f710fa
 5 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
 6 |     newTag: v1.2.2
 7 |     digest: sha256:8f67cbbe09fb352475794c54f94091256b24da754b7f5416a7a2b9fb0ce359dc
 8 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
 9 |     newTag: v0.37.4
10 |     digest: sha256:75eed87984074d54acdb34e30e79e70876ea0ee1887b52a0c0d93b99af5bbfc0
11 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
12 |     newTag: v1.2.4
13 |     digest: sha256:4f53a854780cc1658b202b896cd7d8c6195aab63603f402ebfe67945956fb251
14 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
15 |     newTag: v0.31.2
16 |     digest: sha256:38708963d37c27738865334c36b0548619810365adba6c08a71ead609f21ca2d
17 |   - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
18 |     newTag: v0.37.1
19 |     digest: sha256:63dc5e97e671b2ddbf0105d2039d448d12dc4a49dadec3b6e4e5f4c4eefb7bc6
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.0/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.0
 4 |     digest: sha256:233e0a1e842cab6ad7d2ed876d39c03d80ba727f78a8b6f159f8b471eb31c1a4
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.0
 7 |     digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.0
10 |     digest: sha256:b7af2ce32c3869fe59ffbda8fb32e9e60e2581f19af043a32105404a517a6d7b
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.1
13 |     digest: sha256:85f916e125b8dde26c70423025dab0523fe43219cf743f493722fee5c7f62208
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.1
16 |     digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.1
19 |     digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.1
22 |     digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.1/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.1
 4 |     digest: sha256:85a1d3844c22def063b9d4924a4539ef2d5d850a97be7e8b6cd3f62c5f80708a
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.0
 7 |     digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.1
10 |     digest: sha256:f52777118d3c21e745520ce9e8e8dbab086dd019311f7822f3ee36083af29b5a
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.2
13 |     digest: sha256:3a5e67e69ee79a71206d076951046ec41f7c6d0f0ab6a9e65b7c0b387f0e4d98
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.1
16 |     digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.1
19 |     digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.1
22 |     digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.2
 4 |     digest: sha256:030e258b636fede22a41bcaea3ea4542035cc280b0c740f641c4c5efb904b980
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.1
 7 |     digest: sha256:2b51e7a48594263ece5d86636a9b95381b19fc3091e7341a88802f4557b35a53
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.2
10 |     digest: sha256:32dd3ec7a138245ff4cd755439099c544f4ce3a55f95aa69a97106c05a661def
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.3
13 |     digest: sha256:55813e89e49509e5a312682759b7a4d5235ecc2e13a1eb70f917faf769596b07
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.2
16 |     digest: sha256:a2dba78aa10c1a3905652f6cea39c4fc9c9688755e63dc1f38a0a0306bda54ce
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.2
19 |     digest: sha256:a28eccd31409191131377ecf888a168c59e9a72578e71139b81b146d813c8335
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.2
22 |     digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.3/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.3
 4 |     digest: sha256:5be9b7257270fa1a98c3c42af2f254a35bd64375e719090fe2ffc24915d8be06
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.2
 7 |     digest: sha256:477b4290a2fa2489bf87668bd7dcb77f0ae19bf944fef955600acbcde465ad98
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.3
10 |     digest: sha256:d741dffd2a552b31cf215a1fcf1367ec7bc4dd3609b90e87595ae362d05d022c
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.4
13 |     digest: sha256:350600b64cecb6cc10366c2bc41ec032fd604c81862298d02c303556a2fa6461
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.3
16 |     digest: sha256:a5c718caddfae3022c109a6ef0eb6772a3cc6211aab39feca7c668dfeb151a2e
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.3
19 |     digest: sha256:2577ace8d1660b77df5297db239e9cf30520b336f9a74c3b4174d2773211319d
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.2
22 |     digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.4/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.4
 4 |     digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.3
 7 |     digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.4
10 |     digest: sha256:5eae73909e1471c0cd01bb23d87c9d4219a4f645134a23629c8708c72635398d
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.5
13 |     digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.4
16 |     digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.4
19 |     digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.3
22 |     digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.7.5/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/fluxcd/source-controller
 3 |     newTag: v1.7.4
 4 |     digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
 5 |   - name: ghcr.io/fluxcd/kustomize-controller
 6 |     newTag: v1.7.3
 7 |     digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
 8 |   - name: ghcr.io/fluxcd/helm-controller
 9 |     newTag: v1.4.5
10 |     digest: sha256:d8d8fc2fb46c554e28071f1e4879be33491e71fdd3e0e41f61bb494a72c6dffc
11 |   - name: ghcr.io/fluxcd/notification-controller
12 |     newTag: v1.7.5
13 |     digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
14 |   - name: ghcr.io/fluxcd/image-reflector-controller
15 |     newTag: v1.0.4
16 |     digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
17 |   - name: ghcr.io/fluxcd/image-automation-controller
18 |     newTag: v1.0.4
19 |     digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
20 |   - name: ghcr.io/fluxcd/source-watcher
21 |     newTag: v2.0.3
22 |     digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9
23 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.3.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:d07ffa2b751e072f39bbd9039de10a4c2311ac123615345d04748b1bed6f45dc
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:59a85ef8cba0243ea0ddf25a469d31b1c62b6cdf952a96827f7937114a444c86
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:80d454d29f88e7e8c4f73690c93b20cb51cc640d7de8c132bb9cf0f1ad7e067b
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:83c9604e0461bed335d33238b74cd02ec51fbcfdfc4ea66c62d83709e47598be
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:2afab1c81b844bfc826c17dc8053ac23a62213635806d86c3ed5fbfb9c325372
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:d520a53f7ebe5070db85d1cc3641d336f1b8b1fad04772e750b4e844ad233aa4
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.4.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.4.1
 4 |     digest: sha256:f385f5d4cfc29219a014e213f3c45029c4c24dba60877a0e6265af70a4b5563b
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.4.0
 7 |     digest: sha256:c4322184920e16486aba2d5079d1075efbdea7ce6cf0bb9fec6f3d77f88408c2
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.1.0
10 |     digest: sha256:998e71394d84c833c20c7c9b3f544ca137356418bc24ec39a364d57a0e192f23
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.4.0
13 |     digest: sha256:0ac293f38255555a9abf6db5788974cae9ad5aadaa9cb0fe5b3ed41481ad1e8b
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.33.0
16 |     digest: sha256:c8178d21346a347ad1d818439953d7ca5dfe9cf68cc4223598cd8ad490906f3e
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.39.0
19 |     digest: sha256:c1f00e389f09ecced775c0f57544cd65938b3ed31d08d7ee8999ffa8b652b43b
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:aafb79af6cd4236ee4644981c2bac6ba1061f945527da45ed93cebe75b14b626
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.5.0
 7 |     digest: sha256:5bfab74bb9216763aae812910b8d01deaf79495f6d992cf8e6d48178da6c9ae9
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:398756f9c0949a6f338bbd028950a4a526806f5fc35f8f26ac2bf7283bf702f6
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:99a27271d7d11615474d7636df1e30adf2c193cb02c67a1fa5c94d296d056aa4
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:83e9f7963b7723bc4501739369b5a762a838a5af4dcf8eb01b523c08730958a6
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:a5b29af6e3bb36791fe44ceedf461d7e3570a5dbc14a69acae7169d454f87ccd
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.5.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.5.0
 4 |     digest: sha256:dcaccbce45744551dd4687b4741f99514357dce6407b522725ef481a78d3f914
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.5.1
 7 |     digest: sha256:22aad603278482cc636464b93ed1a4227cb00a386134eded3c81a2c6d7a7650e
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.2.0
10 |     digest: sha256:24bc08d733e1b809396e4cca776c083902a5d3252ace7f318ff8c6e4ddb4bf1b
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.5.0
13 |     digest: sha256:efeafc03d5911270eb48dedee692bfdcd9a174b3b68a56cf01e10b194e32ec94
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.34.0
16 |     digest: sha256:f53a7e4d0dd7b34983b5f8e36ac9c627e2565d48a649543d859031532000be38
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.40.0
19 |     digest: sha256:a60a43ef23e37bca2786b70529e735cac78f27657c46d04918ec66895ddfe7e0
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:878d33009f083786f49277ec099574cdc9cfe2dc7c90ad7f3e21d85eadfb15a0
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:5a19ac1f83432324dcd72a2bb3f495c6705b1a36459411f7f48cc663541d7f45
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:ad1c8b8940e9bfcc0423c1cbc69fc5c86fcf28b8ffebf87f33ec1863e2017862
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:09e39990d635255f5ceba130b0c7feaf2b0c1e59d7c961f88012d0edb7d81c5c
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.35.0
16 |     digest: sha256:76bf83b61e66693b1b63e68b5a6d8ea64e361096535f12124bb5ffd86d004e44
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:26c95d9b8949d940f2558aef716b1f0f6de451c81684214a35141c340243bfbd
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.6.0
 4 |     digest: sha256:eb77b798abdd86bac53e3be11c8d2c34a23993b7b563c295f73e34bdef3c17bb
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:75fd952c2d82627d7bbda8094b8e17e432d377786de3750bb5f49ce1936ae50a
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:fb1cd8986b48de2e47210d6f089682c839dd691bbdd35ad7c04b6e77ea720fbb
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:bc4dfe33ce96cb648b8bd3100f6f8029448baa0f8ada303dbe816960db3ff4ef
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.35.1
16 |     digest: sha256:4b521aa9cbb0b9bf4d3c97c6bf2555a0da3ea0b372a6c805bd7762b04d1b5f5c
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.41.0
19 |     digest: sha256:0288741240fe3930570e788f0b550c199f5d2ba98d48945c72fcc2946dfee7af
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.2/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.6.1
 4 |     digest: sha256:080a6ade134115787c6a680869820d9c09db29c281b0127020d5cb19e061cbee
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:9e0ba7efc1f8951657226a8522009f44cb31bfb8012c504a885a1a4c638fdc5a
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:826719c659d9f916f0e81c608da5b20a346beb08a8b67b9f8822b105bc7331ca
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:9343c0ccd294c28313d38fbcf1b33cfe8a8d1dd6e7f1afdc86015b46b6a0b70d
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:dfd1dcddbfc31a19d03042f6127af733dc8cae3ad028ec05ab50bfc1f33cf630
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.41.1
19 |     digest: sha256:475462b5a1490685c71735855ec10869f02e5cbbd58035e23718b465a86f1a38
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.3/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:9dacaa28d126306a2ac43baca52ec391ed80cf079d4c353c0f84f7ee9fe0f5de
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.6.0
 7 |     digest: sha256:e12ad8aaefe74a22dea930e1f0193ff3c7568ad3047a18f208d58422b2a1d772
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:6939c8d6b2663e4789477b6966368412a5a4b514582d76bcfb862f90a75d4fee
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:28f66ade1d08a87e31af9cbc91f435f75fe0666e9b19698e878b73e92519d281
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:b10cd6b78469a9aba4e7756db9297b862bad537922edddd708b16e5db1b3d80e
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:2cc8b4e965ea0a089f84adfbc457c72e7f319647fd1ae241e550ad422eb62c4e
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.6.4/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.6.2
 4 |     digest: sha256:0f9dfb90c0af3948ebe133222a425050421e54fa8a130c80e4b54dd1da493479
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.6.1
 7 |     digest: sha256:3a3dd8711f38d08e271c579793ed70e0bfb8cd1d6acf003c3bb23aa921a9e6b0
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.3.0
10 |     digest: sha256:44944017c7344cccf516c2ece54a672c566c4dfb520f240d7cfe650b92a7d595
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.6.0
13 |     digest: sha256:8ed70694184364d1780685d0544c76d1afd5d8916f4420996015af3eed83500c
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.35.2
16 |     digest: sha256:0bbddcbd6008f963b52538cb8403cf290fa9c38bc9effc33f23e7662fa85f0c0
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.41.2
19 |     digest: sha256:63c8c9ee5ca1233d7c1bd9b2bad1c7b87d0e82c3c97ca7ce0e73581f8794330c
20 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/flux-images/v2.3.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.3.0
 4 |     digest: sha256:3b34a63a635779b2b3ea67ec02f5925704dc93d39efc4b92243e2170907615af
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.3.0
 7 |     digest: sha256:d9facae045d079175245f6e596e3d614c71f4b3420e3e9b486ae99cb62549d27
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v1.0.1
10 |     digest: sha256:54235750a3fd73836413eee0408fa7ab3b7546ed53ea5dc418780a40687af710
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.3.0
13 |     digest: sha256:c1fcf015dcb9ace4f958fdf6fa11e8c05d896ed02fff1a8b138f3285bc9121d2
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.32.0
16 |     digest: sha256:5c535a22048a277f160639ff34ddafa60093a09ee344684abfc5c16d041188f5
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.38.0
19 |     digest: sha256:9da97e7b8b5d6d83ed0e0382387d0d7664f55673af98c80f85a0e37590991ce1
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.0/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.2.2
 4 |     digest: sha256:747a50ab2d4e580391c17ed6ab2c0ebbcb76961f797a32e4fd59ab8f019ad049
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.2.0
 7 |     digest: sha256:a61dd20d2166b220bb13969b203784f614d19a309ef05882458a1f8ddf858738
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v0.37.0
10 |     digest: sha256:2b72f51583dccf7a094610dc31d775849370ae9252dc05b2c69470af04777564
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.2.2
13 |     digest: sha256:71bd2d46a4ca1615e6c4075f044aaa0949174d63d640c95f5c08e89f389310b0
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.1/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v0.37.1
10 |     digest: sha256:27d7d508de86cc287a7de853f21b5fb1744c6632f7035edd8c5e5b062ed7fee7
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.2/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.2.3
 4 |     digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.2.1
 7 |     digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v0.37.2
10 |     digest: sha256:2bd468e5384babd9c0b2b96402cd6f4516f5c105cf35a948df2dda069301f3df
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.2.3
13 |     digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.31.1
16 |     digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.37.0
19 |     digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27
20 | 
```

--------------------------------------------------------------------------------
/config/data/flux-images/v2.2.3/enterprise-distroless.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | images:
 2 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
 3 |     newTag: v1.2.5
 4 |     digest: sha256:afd50536255535b6d35d788b1f89d75c94425d50a11e66c15682bede7daf6cb7
 5 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
 6 |     newTag: v1.2.2
 7 |     digest: sha256:1fce72172b5ef7b31c5b26bdcc146c3b45281b93a43c5b2cbec4729e1f1622fb
 8 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
 9 |     newTag: v0.37.4
10 |     digest: sha256:2ed8583845d069de4eee96eb3f3346ff414fd6554d80029da4c382d144255276
11 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
12 |     newTag: v1.2.4
13 |     digest: sha256:ef79170e2fa9be550b6e39ea95121058dfea47b36274a46165f7543890620ab2
14 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
15 |     newTag: v0.31.2
16 |     digest: sha256:813c3ec28a8bee973964c3ebe4e9f26e3de62ab153b1d03b39270d6efc031f57
17 |   - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
18 |     newTag: v0.37.1
19 |     digest: sha256:36164f29b1e8ede8bd9ee45ddc494e5dabda1f5ab4d48ec72928a28e25292fac
20 | 
```

--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------

```dockerfile
 1 | # Build the operator binary using the Docker's Debian image.
 2 | FROM --platform=${BUILDPLATFORM} golang:1.25 AS builder
 3 | ARG VERSION
 4 | ARG TARGETOS
 5 | ARG TARGETARCH
 6 | WORKDIR /workspace
 7 | 
 8 | # Copy the Go Modules manifests.
 9 | COPY go.mod go.mod
10 | COPY go.sum go.sum
11 | 
12 | # Cache the Go Modules
13 | RUN go mod download
14 | 
15 | # Copy the Go sources.
16 | COPY cmd/operator/main.go cmd/operator/main.go
17 | COPY api/ api/
18 | COPY internal/ internal/
19 | COPY web/embed.go web/embed.go
20 | 
21 | # Copy web assets.
22 | COPY web/dist/ web/dist/
23 | 
24 | # Build the operator binary.
25 | RUN CGO_ENABLED=0 GOFIPS140=latest GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \
26 |     go build -ldflags="-s -w -X main.VERSION=${VERSION}" -trimpath -a -o flux-operator cmd/operator/main.go
27 | 
28 | # Run the operator binary using Google's Distroless image.
29 | FROM gcr.io/distroless/static:nonroot
30 | WORKDIR /
31 | 
32 | # Copy the license.
33 | COPY LICENSE /licenses/LICENSE
34 | 
35 | # Copy the manifests data.
36 | COPY config/data/ /data/
37 | 
38 | # Copy the operator binary.
39 | COPY --from=builder /workspace/flux-operator .
40 | 
41 | # Run the operator as a non-root user.
42 | USER 65532:65532
43 | ENTRYPOINT ["/flux-operator"]
44 | 
```

--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/exclude.golden.yaml:
--------------------------------------------------------------------------------

```yaml
 1 | apiVersion: v1
 2 | kind: Namespace
 3 | metadata:
 4 |   name: sre
 5 | ---
 6 | apiVersion: v1
 7 | kind: Namespace
 8 | metadata:
 9 |   name: dev
10 | ---
11 | apiVersion: v1
12 | kind: ServiceAccount
13 | metadata:
14 |   name: flux
15 |   namespace: sre
16 | ---
17 | apiVersion: v1
18 | kind: ServiceAccount
19 | metadata:
20 |   name: flux
21 |   namespace: dev
22 | ---
23 | apiVersion: rbac.authorization.k8s.io/v1
24 | kind: RoleBinding
25 | metadata:
26 |   name: flux
27 |   namespace: sre
28 | roleRef:
29 |   apiGroup: rbac.authorization.k8s.io
30 |   kind: ClusterRole
31 |   name: admin
32 | subjects:
33 | - kind: ServiceAccount
34 |   name: flux
35 |   namespace: sre
36 | ---
37 | apiVersion: rbac.authorization.k8s.io/v1
38 | kind: RoleBinding
39 | metadata:
40 |   name: flux
41 |   namespace: dev
42 | roleRef:
43 |   apiGroup: rbac.authorization.k8s.io
44 |   kind: ClusterRole
45 |   name: admin
46 | subjects:
47 | - kind: ServiceAccount
48 |   name: flux
49 |   namespace: dev
50 | ---
51 | apiVersion: rbac.authorization.k8s.io/v1
52 | kind: ClusterRoleBinding
53 | metadata:
54 |   annotations:
55 |     fluxcd.controlplane.io/reconcile: enabled
56 |   name: flux-sre
57 | roleRef:
58 |   apiGroup: rbac.authorization.k8s.io
59 |   kind: ClusterRole
60 |   name: cluster-admin
61 | subjects:
62 | - kind: ServiceAccount
63 |   name: flux
64 |   namespace: sre
65 | ---
66 | 
```
Page 2/126FirstPrevNextLast