#
tokens: 49644/50000 88/898 files (page 2/97)
lines: off (toggle) GitHub
raw markdown copy
This is page 2 of 97. Use http://codebase.md/controlplaneio-fluxcd/flux-operator?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-images/v2.6.2/upstream-alpine.yaml:
--------------------------------------------------------------------------------

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.6.1
    digest: sha256:a9dbd7872344ceadea48a89ea24c8a761a2a1008a2cdbbc1ffa3ed95dd2a00ce
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.6.0
    digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.3.0
    digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.6.0
    digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.41.1
    digest: sha256:b622ed93cddf31ac4086e7f6847cafc990ba363f8f4af49d3217313b50582282

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.6.2
    digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.6.0
    digest: sha256:d8c5445003196791441354f2d549e96cc6e69bb9ef6c5a7e440918dab0503776
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.3.0
    digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.6.0
    digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.41.2
    digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.6.2
    digest: sha256:11c8e14df885eff86586533d9941293ec8a1e9fff71bacf119edc79fdf3c63e3
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.6.1
    digest: sha256:1a50730537bafb7827365b9af95c4eb71ca3d9b0bed9bc9bc765880e976972ef
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.3.0
    digest: sha256:db55d9d9f9b5106acd8c21da6916b8e285fcfc5572f214361ececd1a8571a4f0
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.6.0
    digest: sha256:80174ff676407af7a6feff67b0c2f100de9f7f89df4c26fc871e4d4c4006544d
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:4df89798b23a1ba7ec86bab327dcb50417af1517fe7986e511e28f62f40b8f61
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.41.2
    digest: sha256:e5b90e065e0d91690dbcd83dab3d03207ed030b068e26e9dac88c8d7b4fdfbe4

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.3.0
    digest: sha256:161da425b16b64dda4b3cec2ba0f8d7442973aba29bb446db3b340626181a0bc
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.3.0
    digest: sha256:48a032574dd45c39750ba0f1488e6f1ae36756a38f40976a6b7a588d83acefc1
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.0.1
    digest: sha256:a67a037faa850220ff94d8090253732079589ad9ff10b6ddf294f3b7cd0f3424
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.3.0
    digest: sha256:c0fab940c7e578ea519097d36c040238b0cc039ce366fdb753947428bbf0c3d6
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.32.0
    digest: sha256:aed795c7a8b85bca93f6d199d5a14bbefaf925ad5aa5316b32a716cfa4070d0b
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.38.0
    digest: sha256:ab5097213194f3cd9f0e68d8a937d94c4fc7e821f6544453211e94815b282aa2

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.2.2
    digest: sha256:b4baf93ab71c47f139723856991d71f61a408cf3894caf71f14bb997568faa35
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.2.0
    digest: sha256:bdda2e77e84225be33f673cdbdeb868932edc1a4fb76d028084bbb9951ae51fa
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v0.37.0
    digest: sha256:a5af89c471285a569e9e27c81b5b2fb771f7a4110ef9da1cda53c89d24b536eb
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.2.2
    digest: sha256:226f92f9dbcf82d9bdc907dd80521c43c34dbca2c893995c7334c80320faea2f
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.37.0
    digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.2.3
    digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.2.1
    digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v0.37.1
    digest: sha256:6b28d0c8aadcb811474d1f4bcc11b7fec2c807d4d059a9b36a485a6ea2cb54d9
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.2.3
    digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.37.0
    digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.2.3
    digest: sha256:e84056875b43d7bdf76e8ac97515d4c631f4bc739c01a7d9e35423682438de9f
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.2.1
    digest: sha256:c03819bcf5235384c008c0f70a3ce15d91c0683045d09b2bc7d769fafcba6691
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v0.37.2
    digest: sha256:09fcd4c4c6460e439d60be07f4e2d4a86a61fc655ed20280bba28eca257109a5
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.2.3
    digest: sha256:b2a6d66fed996522ef7af2885a7da4aa558c0fcc9f0a56644ca5f165c406ff39
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:f13e83876e349b6429b8700424c26d1dfa1a3779ad7a9d385990be1a7a0a4e31
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.37.0
    digest: sha256:ff00a016cbb81b724add28d7d46ae9114592fd8c484473c0ec76ce1c5875ac91

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.2.4
    digest: sha256:34106b52d88d67d2889fabd2df19682dda30f32030488c9ae5c72e26239080fb
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.2.2
    digest: sha256:2df190255fc09131412472b900524c5c72a43464b3c2e99163c1ee143c5c2e22
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v0.37.4
    digest: sha256:6280691e55935f0f72cce166c63c0bc1208e68e1e048cf086a2e03d2ed6e2637
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.2.4
    digest: sha256:3e1292b9e8bab71c248307a0611bacfa1fd804231c99c79f113809436566fc3b
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v0.31.2
    digest: sha256:561c17eec9d4afe54be775d5e221e53d9955d0a1ba43b7fdcf365fa562baf273
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v0.37.1
    digest: sha256:97a8895cab8594af7509a5f2bc5495c03b7346722afc4e1e70bf6e445b7e575d

```

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

```go
// Copyright 2024 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package entitlement

import (
	"context"
	"fmt"

	"github.com/opencontainers/go-digest"
)

// DefaultClient is an offline entitlement client.
// This client uses a SHA256 digest to generate and verify tokens.
type DefaultClient struct {
	Vendor string
}

// RegisterUsage registers the usage with the default entitlement client.
func (c *DefaultClient) RegisterUsage(ctx context.Context, id string) (string, error) {
	d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
	return d.Encoded(), nil
}

// Verify verifies the token matches the SHA256 digest of the vendor id.
func (c *DefaultClient) Verify(token, id string) (bool, error) {
	d := digest.FromString(fmt.Sprintf("%s-%s", c.Vendor, id))
	return token == d.Encoded(), nil
}

// GetVendor returns the vendor name.
func (c *DefaultClient) GetVendor() string {
	return c.Vendor
}

```

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

```bash
#!/usr/bin/env bash

# Copyright 2025 Stefan Prodan.
# SPDX-License-Identifier: AGPL-3.0

set -euo pipefail

VERSION=$1
REPOSITORY_ROOT=$(git rev-parse --show-toplevel)
DEST_DIR="${REPOSITORY_ROOT}/bin"

info() {
    echo '[INFO] ' "$@"
}

fatal() {
    echo '[ERROR] ' "$@" >&2
    exit 1
}

OS=$(echo "${RUNNER_OS}" | tr '[:upper:]' '[:lower:]')
if [[ "$OS" == "macos" ]]; then
  OS="darwin"
fi

ARCH=$(echo "${RUNNER_ARCH}" | tr '[:upper:]' '[:lower:]')
if [[ "$ARCH" == "x64" ]]; then
  ARCH="amd64"
elif [[ "$ARCH" == "x86" ]]; then
  ARCH="386"
fi

mkdir -p "${DEST_DIR}"

DOWNLOAD_URL="https://github.com/operator-framework/operator-sdk/releases/download/${VERSION}/operator-sdk_${OS}_${ARCH}"
EXEC_FILE="operator-sdk-${VERSION}"

info "Downloading operator-sdk ${VERSION} for ${OS}/${ARCH}..."
curl -sL "${DOWNLOAD_URL}" -o "${DEST_DIR}/${EXEC_FILE}"
chmod +x "${DEST_DIR}/${EXEC_FILE}"

${DEST_DIR}/${EXEC_FILE} version

```

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

```dockerfile
FROM scratch

# Core bundle labels.
LABEL operators.operatorframework.io.bundle.mediatype.v1=registry+v1
LABEL operators.operatorframework.io.bundle.manifests.v1=manifests/
LABEL operators.operatorframework.io.bundle.metadata.v1=metadata/
LABEL operators.operatorframework.io.bundle.package.v1=flux-operator
LABEL operators.operatorframework.io.bundle.channels.v1=stable
LABEL operators.operatorframework.io.bundle.channel.default.v1=stable
LABEL operators.operatorframework.io.metrics.builder=operator-sdk-v1.29.0
LABEL operators.operatorframework.io.metrics.mediatype.v1=metrics+v1
LABEL operators.operatorframework.io.metrics.project_layout=unknown

# Labels for testing.
LABEL operators.operatorframework.io.test.mediatype.v1=scorecard+v1
LABEL operators.operatorframework.io.test.config.v1=tests/scorecard/

# Copy files to locations specified by labels.
COPY manifests /manifests/
COPY metadata /metadata/
COPY tests/scorecard /tests/scorecard/

```

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

```markdown
---
title: Flux MCP Server Prompts
description: MCP Server predefined prompts for troubleshooting FluxCD
---

# Flux MCP Server Prompts

The Flux MCP Server comes with a set of predefined prompts that instruct the AI assistant
to perform complex tasks by chaining together multiple MCP [tools](tools.md).

## Debugging Prompts

These prompts are designed to help you quickly identify and resolve issues with your GitOps pipeline.

### debug_flux_kustomization

Troubleshoot a Flux Kustomization and provide root cause analysis for any issues.

**Parameters:**

- `name` (required): The name of the Kustomization
- `namespace` (required): The namespace of the Kustomization
- `cluster` (optional): The cluster context to use

### debug_flux_helmrelease

Troubleshoot a Flux HelmRelease and provide root cause analysis for any issues.

**Parameters:**

- `name` (required): The name of the HelmRelease
- `namespace` (required): The namespace of the HelmRelease
- `cluster` (optional): The cluster context to use

```

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

```yaml
apiVersion: fluxcd.controlplane.io/v1
kind: ResourceSet
metadata:
  name: app1
  namespace: apps
spec:
  inputsFrom:
    - selector:
        matchLabels:
          some: label
        matchExpressions:
          - key: anotherLabel
            operator: In
            values:
              - value1
              - value2
  resources:
    - apiVersion: source.toolkit.fluxcd.io/v1
      kind: OCIRepository
      metadata:
        name: app1-<< inputs.tenant >>
        namespace: apps
      spec:
        interval: 10m
        url: oci://my.registry/org/charts/app1
        ref:
          semver: << inputs.app.version | quote >>
    - apiVersion: helm.toolkit.fluxcd.io/v2
      kind: HelmRelease
      metadata:
        name: app1-<< inputs.tenant >>
        namespace: apps
      spec:
        interval: 1h
        releaseName: app1-<< inputs.tenant >>
        chartRef:
          kind: OCIRepository
          name: app1-<< inputs.tenant >>
        values:
          replicaCount: << inputs.app.replicas | int >>
```

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

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package main

import (
	"os"

	"github.com/spf13/cobra"
)

var completionZshCmd = &cobra.Command{
	Use:   "zsh",
	Short: "Generates zsh completion scripts",
	Example: `To load completion run

. <(flux-operator completion zsh) && compdef _flux-operator flux-operator

To configure your zsh shell to load completions for each session add to your zshrc

# ~/.zshrc or ~/.profile
command -v flux-operator >/dev/null && . <(flux-operator completion zsh) && compdef _flux-operator flux-operator

or write a cached file in one of the completion directories in your ${fpath}:

echo "${fpath// /\n}" | grep -i completion
flux-operator completion zsh > _flux-operator

mv _flux-operator ~/.oh-my-zsh/completions  # oh-my-zsh
mv _flux-operator ~/.zprezto/modules/completion/external/src/  # zprezto`,
	Run: func(cmd *cobra.Command, args []string) {
		rootCmd.GenZshCompletion(os.Stdout) //nolint:errcheck
	},
}

func init() {
	completionCmd.AddCommand(completionZshCmd)
}

```

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

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package config

import (
	"fmt"
	"os"

	"sigs.k8s.io/yaml"
)

// Load reads, validates, and applies default values to missing fields in the configuration
// for the Flux Status Page. If the filename is empty it returns the configuration object
// with default values applied.
func Load(filename string) (*ConfigSpec, error) {
	if filename == "" {
		var confSpec ConfigSpec
		confSpec.ApplyDefaults()
		confSpec.Version = "no-config"
		return &confSpec, nil
	}
	b, err := os.ReadFile(filename)
	if err != nil {
		return nil, err
	}
	conf, err := parse(b)
	if err != nil {
		return nil, fmt.Errorf("invalid configuration in web config file '%s': %w", filename, err)
	}
	conf.Version = "static-file"
	return conf, nil
}

func parse(b []byte) (*ConfigSpec, error) {
	var conf Config
	if err := yaml.Unmarshal(b, &conf); err != nil {
		return nil, err
	}
	if err := conf.Validate(); err != nil {
		return nil, err
	}
	conf.Spec.ApplyDefaults()
	return &conf.Spec, nil
}

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.3.0
    digest: sha256:d7b88dd6c361814bfaa92598b9dfe433adec40311008b96a54f3b23c91607ad1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.3.0
    digest: sha256:6e2ded196361b01a78faec9f56650e52aa70896b808d677998602c509aa3612c
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.0.1
    digest: sha256:0db04c673d4c5729cb7d05e4a510bc36ec18277d6cbb62c4011b3a732c243c47
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.3.0
    digest: sha256:f2c2f31e1ace6c1166a2052bf725ef23169571d59ddff111a8256b739df0846b
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.32.0
    digest: sha256:93c40116ac639a7024dd08d5a95a83410b6d16b2bedcf1bc21c5ca3a27806894
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.38.0
    digest: sha256:5181afb652ac1c395ab7ec808341ba73c64ccc86eaf3df929aba1c1a091872cd

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.4.1
    digest: sha256:0b7285c0ccdc77d5a5d71158ccc1c42549ea2d9cf9f19dde923ac0f6ee1b3b5e
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.4.0
    digest: sha256:715b1021699ed73aaf357d9306856b67640cabc1b6a147b9abdcd0e474212531
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.1.0
    digest: sha256:3bb1264b2ab406bf3cb7e692c9008a44e5b8fcc8e6509eb5bea8122b671ca3ab
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.4.0
    digest: sha256:da02cf19d2b8ea95d43d396b72ada6cee23244f7b7262617b5fc211553f96899
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.33.0
    digest: sha256:97d6b0e2ff42dfd2c8a47a7a1ee3a9da160dd4c40bb5ef2beab0ad94db962574
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.39.0
    digest: sha256:50e30c406eb430e3515c1c160c2e965ac13fbec5300af2b0539604c1c0e5e3eb

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.5.0
    digest: sha256:2cd04d22a5663daa6cc271762fc957bf27f113c32dbf7ab9a8e032524c8ff110
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.5.0
    digest: sha256:3ebf0d3a1086f9e683b3848b2d7db86ba564287ba0c3f417dc4c0a1c1bc9d16f
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.2.0
    digest: sha256:ddd037b807669353cf151a08e5651004c1037c867e7136abdd5285af3399a963
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.5.0
    digest: sha256:52deb7d41feae67005eff5a93b907935a296a6deff181ca039a3c6d6f8f3e227
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.34.0
    digest: sha256:e6901a8e28a3a70eeb3617235181a6dbc723a2fb4e9e532c3505f285815ab8ef
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.40.0
    digest: sha256:314869bb326aab8fe0b39d43e3f91b80d4bd910f52901747a267224e78fed8f9

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.5.0
    digest: sha256:a4cb0fe178e92c4a8320dfe8fbf2558686fae8f9097591ad5e244cca378cc462
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.5.1
    digest: sha256:d4dfb88e079eb462124b50124c9c5929252d79237d1266a54b288202f3f2f174
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.2.0
    digest: sha256:1f543c220e0e7350dcbacff11364a4d83cb489d43415d89a9d817b72305bf3ea
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.5.0
    digest: sha256:cc477dd3bafbc16253b5f27fb5e9170a8946a967bf3f8d3203896deeae98ddef
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.34.0
    digest: sha256:93945f2214ebd879c6f7734cd7a2a4a454bfac74f98c6eb872ba84d299aac05d
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.40.0
    digest: sha256:9d4dfe44ac3bbd1b5c10ac2156ed7c385709c994bf45f37707ed06e86aff3edb

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.6.0
    digest: sha256:1beb043682143a4b58711df0d33512b13f25fff2b5d5144cfb5b6252933501ed
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.6.0
    digest: sha256:57ce01d5cb12d0d543798a235c280d44a0386449182878919187fd133f1c1d25
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.3.0
    digest: sha256:bb9c842ba900d74f27916b114af4aced9ece6520dea3750ff6eae864cb14fa07
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.6.0
    digest: sha256:beffbf4a50302b457d34e60526f5a87a157c49ba2c0e47edaa3b28d6393b4094
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.35.0
    digest: sha256:f7596097a87ab8782e0373366f108eb46fe45a2becb3008de3270d82158c70d8
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.41.0
    digest: sha256:78fa6c3fdb0e1393611b55be7d099ed500aa6d4770d8ad6f9f389e1dbecb600e

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.6.0
    digest: sha256:bb8e0b78c25a6f64e8e975037255d31e746ae3c657517e2177286c71f3104159
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.6.0
    digest: sha256:394638bb89b473e0b71c14f6f3e3bf9787a86aabfaacb37163d5336cddd590b2
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.3.0
    digest: sha256:6cba5b83dc31f307af5925aaa83d6c7b57fd8f184baba83545eb72a47d1f2fc7
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.6.0
    digest: sha256:97eade442516bce76e33697f70714bff087387a5d5793ca0975d44f3d2470d52
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.35.1
    digest: sha256:51b8f1e8867525e9e06ce45a5fca0903eb0889530d6534ac5858338b201fb30f
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.41.0
    digest: sha256:effc7ab7998bd57475ee489d09f740259c1a5500b6e2d1a015ce47085f5144f5

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.6.1
    digest: sha256:51a189335ffd0bde011f904617983bef9b9088fb5a920fa486999617be6ff39f
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.6.0
    digest: sha256:01acf7e24781e34a1fe6f449760337828223a300a10a7af89b7f1a4e512c9bed
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.3.0
    digest: sha256:ce7e3e59f1e6ec115177e4bd858b9802074acb4a6dc74af35e997e973e27876d
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.6.0
    digest: sha256:08b0902e29ebfc5cdadfbebcda5effb5b988b2605b1352ddd48049f9cca2b807
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:6791d2a5465a04fbd666b6e75ff109fa943f1350e0d2e3a138108a6625ba4073
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.41.1
    digest: sha256:0c4eef4b90742c319f936959f1318280d6469c5077b98cc2e2a5595399f16c08

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.6.2
    digest: sha256:aae7abbe6e600e82d762ecd201324071d68bdded94007d6269500bc680081763
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.6.0
    digest: sha256:484a5a6827a7ab98070cd705bce2842a9a8cbf26f770f0dc3c5af510dc340e7c
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.3.0
    digest: sha256:094ba4a64987efa3c9131217be472f71f36bfc2cfa90e2eaf317f830d7267c88
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.6.0
    digest: sha256:e9024b81cdb6ef91ff969617ac060b35f580f5d2277a01db7bd96c1dc8ced36a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:940fc335448bc8dfab37864e1a7fd86b7116a9a9dbba6124433c46818cf9aabd
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.41.2
    digest: sha256:71877b9853f8cd96eff8989dda5744d3ab02cb41a026af8c0250922a33f9740c

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.6.2
    digest: sha256:55cda38118483790ff90f1b530aee30d5e319fc752945661008da5de58340613
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.6.1
    digest: sha256:ee402a9504361a69b6a91efb559598da1a3e3a40013a6b1df8f3e0df98217745
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.3.0
    digest: sha256:1019bd5a7c5951e4b8f2c04dee462fd968f6bc5ded987a59cb3177c209129073
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.6.0
    digest: sha256:78f497c34b40a55066515062010f2886eba2907896613ac6317e77206682f76d
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:3d9463e07223f033731972c833b08cb9891a705c22d630968276f5e131bd6708
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.41.2
    digest: sha256:58edb789cf293023c1cb3df2ce140583d98b6db7d5906a63f3b6127a6762ee71

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.3.0
    digest: sha256:20dd417c31decab169fe1384a52e122aceb14061ff61f8bf59324b7808326ca5
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.3.0
    digest: sha256:f86abc81aee1ed60b18ae137bec23d3f63b30b303fb926fc4b61643c63734c28
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.0.1
    digest: sha256:88672f9d1f73a84c14d2dcc9373f264abc7589ec304b72b322c5dfe78643a3d9
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.3.0
    digest: sha256:9894577d753297d03c288a9ae0149168a6b6cfd07e89bed3d2747c03639379ba
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.32.0
    digest: sha256:4b80a314ef52af28809020ea2c1ae30c23ceafe65a871cb1d005b01681cd22a7
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.38.0
    digest: sha256:64e31d9eec9c1aec025d49ff6af1a72352ebbbd6a37b5490e18153a4cbc0f709

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.2.2
    digest: sha256:8d64e373389ec4a742855f54b169e39eae6057d5dc062373f2866dff15b4f025
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.2.0
    digest: sha256:c8d2b1ab76d15705b9db9f61a093c0c4cc7986346f8a9d47141bfc6433731f52
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v0.37.0
    digest: sha256:5d4b3484817f80ca9f2efc448f3a74f33f58251d2053ae7d06494dd75ca9a86c
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.2.2
    digest: sha256:ab7cea5ce2de7c32853f21eaee532cfcc8b9257b7bcd1c336b00e0b955650159
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.37.0
    digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.2.3
    digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.2.1
    digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v0.37.1
    digest: sha256:8646eab771b51d617f6f3997aae29bbc28e4ae8c511249518d315e59cef0e6f7
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.2.3
    digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.37.0
    digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.2.3
    digest: sha256:370f4e5377fdde1cb4f72c40d8b568c45c0c37097e5d54f57051b468d36d82ed
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.2.1
    digest: sha256:575ac353151a8c31645872cf591e5d964da1b01ed1dbd2dc98bd67ec1f9d1a6a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v0.37.2
    digest: sha256:cbf37cb6abca25ba4fee15a14ba144b38529a37804b60bc13bdc769cbd532914
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.2.3
    digest: sha256:e3b76c93948ff5cace407d7ebb70c582489764e74f5830f44b8b5714bc9e59f1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:b0ff686cfe83c384514058c9c3399ded6f8ac0b16989f460ba6c9bb329316df1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.37.0
    digest: sha256:98106c7a399f4a1d31ce19d623f1980c14035659b1ccc9e88e9832a98153e57e

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.2.5
    digest: sha256:911c127af3a893dc1ecb77d755cfaf4a4f209045767ccfd0c5f0615c56f710fa
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.2.2
    digest: sha256:8f67cbbe09fb352475794c54f94091256b24da754b7f5416a7a2b9fb0ce359dc
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v0.37.4
    digest: sha256:75eed87984074d54acdb34e30e79e70876ea0ee1887b52a0c0d93b99af5bbfc0
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.2.4
    digest: sha256:4f53a854780cc1658b202b896cd7d8c6195aab63603f402ebfe67945956fb251
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v0.31.2
    digest: sha256:38708963d37c27738865334c36b0548619810365adba6c08a71ead609f21ca2d
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v0.37.1
    digest: sha256:63dc5e97e671b2ddbf0105d2039d448d12dc4a49dadec3b6e4e5f4c4eefb7bc6

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.0
    digest: sha256:233e0a1e842cab6ad7d2ed876d39c03d80ba727f78a8b6f159f8b471eb31c1a4
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.0
    digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.0
    digest: sha256:b7af2ce32c3869fe59ffbda8fb32e9e60e2581f19af043a32105404a517a6d7b
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.1
    digest: sha256:85f916e125b8dde26c70423025dab0523fe43219cf743f493722fee5c7f62208
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.1
    digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.1
    digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.1
    digest: sha256:85a1d3844c22def063b9d4924a4539ef2d5d850a97be7e8b6cd3f62c5f80708a
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.0
    digest: sha256:0bd84aad45def5b8c5e1459835573d0d00b622cc611e301aaf910386de5fd82f
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.1
    digest: sha256:f52777118d3c21e745520ce9e8e8dbab086dd019311f7822f3ee36083af29b5a
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.2
    digest: sha256:3a5e67e69ee79a71206d076951046ec41f7c6d0f0ab6a9e65b7c0b387f0e4d98
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:5c72668cc9248883391218f3b329f08cfece2bcd570e1ac47fac62bfac153ec8
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.1
    digest: sha256:efbc480151bb1a853b35091131484c62c99fea40654c4e1e3cd7f2eab6c0d69c
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.1
    digest: sha256:a601e4e1a4e4b21b469544bc083126c681e43e61822f8ca9d5b0ab89b06d2438

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.2
    digest: sha256:030e258b636fede22a41bcaea3ea4542035cc280b0c740f641c4c5efb904b980
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.1
    digest: sha256:2b51e7a48594263ece5d86636a9b95381b19fc3091e7341a88802f4557b35a53
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.2
    digest: sha256:32dd3ec7a138245ff4cd755439099c544f4ce3a55f95aa69a97106c05a661def
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.3
    digest: sha256:55813e89e49509e5a312682759b7a4d5235ecc2e13a1eb70f917faf769596b07
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.2
    digest: sha256:a2dba78aa10c1a3905652f6cea39c4fc9c9688755e63dc1f38a0a0306bda54ce
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.2
    digest: sha256:a28eccd31409191131377ecf888a168c59e9a72578e71139b81b146d813c8335
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.2
    digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.3
    digest: sha256:5be9b7257270fa1a98c3c42af2f254a35bd64375e719090fe2ffc24915d8be06
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.2
    digest: sha256:477b4290a2fa2489bf87668bd7dcb77f0ae19bf944fef955600acbcde465ad98
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.3
    digest: sha256:d741dffd2a552b31cf215a1fcf1367ec7bc4dd3609b90e87595ae362d05d022c
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.4
    digest: sha256:350600b64cecb6cc10366c2bc41ec032fd604c81862298d02c303556a2fa6461
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.3
    digest: sha256:a5c718caddfae3022c109a6ef0eb6772a3cc6211aab39feca7c668dfeb151a2e
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.3
    digest: sha256:2577ace8d1660b77df5297db239e9cf30520b336f9a74c3b4174d2773211319d
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.2
    digest: sha256:188a1adb89a16f7fcdd4ed79855301ec71950dcc833b6e0b3d0a053743ecac85

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.4
    digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.3
    digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.4
    digest: sha256:5eae73909e1471c0cd01bb23d87c9d4219a4f645134a23629c8708c72635398d
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.5
    digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.4
    digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.3
    digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9

```

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

```yaml
images:
  - name: ghcr.io/fluxcd/source-controller
    newTag: v1.7.4
    digest: sha256:16f21ac1795528df80ddef51ccbb14a57b78ea26e66dc8551636ef9a3cec71b3
  - name: ghcr.io/fluxcd/kustomize-controller
    newTag: v1.7.3
    digest: sha256:e8ca82d66dafdd8ef77e0917f4adec53478075130ac61264dc0f91eb0f8cb6ce
  - name: ghcr.io/fluxcd/helm-controller
    newTag: v1.4.5
    digest: sha256:d8d8fc2fb46c554e28071f1e4879be33491e71fdd3e0e41f61bb494a72c6dffc
  - name: ghcr.io/fluxcd/notification-controller
    newTag: v1.7.5
    digest: sha256:ba723a55f7c7c7feedd50bb5db0ff2dd9a3b0ae85b50f61a0457184025b38c54
  - name: ghcr.io/fluxcd/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:0bdc30aea2b7cdfea02d0f6d53c06b9df0ea1c6516b85ed523792e222329c039
  - name: ghcr.io/fluxcd/image-automation-controller
    newTag: v1.0.4
    digest: sha256:f9383dccb80ec65e274648941af623ce74084d25026e14389111c14b630efece
  - name: ghcr.io/fluxcd/source-watcher
    newTag: v2.0.3
    digest: sha256:9cd46c3c958dcfcd8a3c857fa09989f9df5d8396eae165f219cbb472343371a9

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.3.0
    digest: sha256:d07ffa2b751e072f39bbd9039de10a4c2311ac123615345d04748b1bed6f45dc
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.3.0
    digest: sha256:59a85ef8cba0243ea0ddf25a469d31b1c62b6cdf952a96827f7937114a444c86
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.0.1
    digest: sha256:80d454d29f88e7e8c4f73690c93b20cb51cc640d7de8c132bb9cf0f1ad7e067b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.3.0
    digest: sha256:83c9604e0461bed335d33238b74cd02ec51fbcfdfc4ea66c62d83709e47598be
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.32.0
    digest: sha256:2afab1c81b844bfc826c17dc8053ac23a62213635806d86c3ed5fbfb9c325372
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.38.0
    digest: sha256:d520a53f7ebe5070db85d1cc3641d336f1b8b1fad04772e750b4e844ad233aa4

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.4.1
    digest: sha256:f385f5d4cfc29219a014e213f3c45029c4c24dba60877a0e6265af70a4b5563b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.4.0
    digest: sha256:c4322184920e16486aba2d5079d1075efbdea7ce6cf0bb9fec6f3d77f88408c2
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.1.0
    digest: sha256:998e71394d84c833c20c7c9b3f544ca137356418bc24ec39a364d57a0e192f23
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.4.0
    digest: sha256:0ac293f38255555a9abf6db5788974cae9ad5aadaa9cb0fe5b3ed41481ad1e8b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.33.0
    digest: sha256:c8178d21346a347ad1d818439953d7ca5dfe9cf68cc4223598cd8ad490906f3e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.39.0
    digest: sha256:c1f00e389f09ecced775c0f57544cd65938b3ed31d08d7ee8999ffa8b652b43b

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.5.0
    digest: sha256:aafb79af6cd4236ee4644981c2bac6ba1061f945527da45ed93cebe75b14b626
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.5.0
    digest: sha256:5bfab74bb9216763aae812910b8d01deaf79495f6d992cf8e6d48178da6c9ae9
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.2.0
    digest: sha256:398756f9c0949a6f338bbd028950a4a526806f5fc35f8f26ac2bf7283bf702f6
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.5.0
    digest: sha256:99a27271d7d11615474d7636df1e30adf2c193cb02c67a1fa5c94d296d056aa4
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.34.0
    digest: sha256:83e9f7963b7723bc4501739369b5a762a838a5af4dcf8eb01b523c08730958a6
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.40.0
    digest: sha256:a5b29af6e3bb36791fe44ceedf461d7e3570a5dbc14a69acae7169d454f87ccd

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.5.0
    digest: sha256:dcaccbce45744551dd4687b4741f99514357dce6407b522725ef481a78d3f914
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.5.1
    digest: sha256:22aad603278482cc636464b93ed1a4227cb00a386134eded3c81a2c6d7a7650e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.2.0
    digest: sha256:24bc08d733e1b809396e4cca776c083902a5d3252ace7f318ff8c6e4ddb4bf1b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.5.0
    digest: sha256:efeafc03d5911270eb48dedee692bfdcd9a174b3b68a56cf01e10b194e32ec94
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.34.0
    digest: sha256:f53a7e4d0dd7b34983b5f8e36ac9c627e2565d48a649543d859031532000be38
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.40.0
    digest: sha256:a60a43ef23e37bca2786b70529e735cac78f27657c46d04918ec66895ddfe7e0

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.6.0
    digest: sha256:878d33009f083786f49277ec099574cdc9cfe2dc7c90ad7f3e21d85eadfb15a0
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.6.0
    digest: sha256:5a19ac1f83432324dcd72a2bb3f495c6705b1a36459411f7f48cc663541d7f45
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.3.0
    digest: sha256:ad1c8b8940e9bfcc0423c1cbc69fc5c86fcf28b8ffebf87f33ec1863e2017862
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.6.0
    digest: sha256:09e39990d635255f5ceba130b0c7feaf2b0c1e59d7c961f88012d0edb7d81c5c
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.35.0
    digest: sha256:76bf83b61e66693b1b63e68b5a6d8ea64e361096535f12124bb5ffd86d004e44
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.41.0
    digest: sha256:26c95d9b8949d940f2558aef716b1f0f6de451c81684214a35141c340243bfbd

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.6.0
    digest: sha256:eb77b798abdd86bac53e3be11c8d2c34a23993b7b563c295f73e34bdef3c17bb
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.6.0
    digest: sha256:75fd952c2d82627d7bbda8094b8e17e432d377786de3750bb5f49ce1936ae50a
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.3.0
    digest: sha256:fb1cd8986b48de2e47210d6f089682c839dd691bbdd35ad7c04b6e77ea720fbb
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.6.0
    digest: sha256:bc4dfe33ce96cb648b8bd3100f6f8029448baa0f8ada303dbe816960db3ff4ef
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.35.1
    digest: sha256:4b521aa9cbb0b9bf4d3c97c6bf2555a0da3ea0b372a6c805bd7762b04d1b5f5c
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.41.0
    digest: sha256:0288741240fe3930570e788f0b550c199f5d2ba98d48945c72fcc2946dfee7af

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.6.1
    digest: sha256:080a6ade134115787c6a680869820d9c09db29c281b0127020d5cb19e061cbee
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.6.0
    digest: sha256:9e0ba7efc1f8951657226a8522009f44cb31bfb8012c504a885a1a4c638fdc5a
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.3.0
    digest: sha256:826719c659d9f916f0e81c608da5b20a346beb08a8b67b9f8822b105bc7331ca
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.6.0
    digest: sha256:9343c0ccd294c28313d38fbcf1b33cfe8a8d1dd6e7f1afdc86015b46b6a0b70d
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:dfd1dcddbfc31a19d03042f6127af733dc8cae3ad028ec05ab50bfc1f33cf630
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.41.1
    digest: sha256:475462b5a1490685c71735855ec10869f02e5cbbd58035e23718b465a86f1a38

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.6.2
    digest: sha256:9dacaa28d126306a2ac43baca52ec391ed80cf079d4c353c0f84f7ee9fe0f5de
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.6.0
    digest: sha256:e12ad8aaefe74a22dea930e1f0193ff3c7568ad3047a18f208d58422b2a1d772
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.3.0
    digest: sha256:6939c8d6b2663e4789477b6966368412a5a4b514582d76bcfb862f90a75d4fee
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.6.0
    digest: sha256:28f66ade1d08a87e31af9cbc91f435f75fe0666e9b19698e878b73e92519d281
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:b10cd6b78469a9aba4e7756db9297b862bad537922edddd708b16e5db1b3d80e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.41.2
    digest: sha256:2cc8b4e965ea0a089f84adfbc457c72e7f319647fd1ae241e550ad422eb62c4e

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.6.2
    digest: sha256:0f9dfb90c0af3948ebe133222a425050421e54fa8a130c80e4b54dd1da493479
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.6.1
    digest: sha256:3a3dd8711f38d08e271c579793ed70e0bfb8cd1d6acf003c3bb23aa921a9e6b0
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.3.0
    digest: sha256:44944017c7344cccf516c2ece54a672c566c4dfb520f240d7cfe650b92a7d595
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.6.0
    digest: sha256:8ed70694184364d1780685d0544c76d1afd5d8916f4420996015af3eed83500c
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:0bbddcbd6008f963b52538cb8403cf290fa9c38bc9effc33f23e7662fa85f0c0
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.41.2
    digest: sha256:63c8c9ee5ca1233d7c1bd9b2bad1c7b87d0e82c3c97ca7ce0e73581f8794330c

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.3.0
    digest: sha256:3b34a63a635779b2b3ea67ec02f5925704dc93d39efc4b92243e2170907615af
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.3.0
    digest: sha256:d9facae045d079175245f6e596e3d614c71f4b3420e3e9b486ae99cb62549d27
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.0.1
    digest: sha256:54235750a3fd73836413eee0408fa7ab3b7546ed53ea5dc418780a40687af710
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.3.0
    digest: sha256:c1fcf015dcb9ace4f958fdf6fa11e8c05d896ed02fff1a8b138f3285bc9121d2
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.32.0
    digest: sha256:5c535a22048a277f160639ff34ddafa60093a09ee344684abfc5c16d041188f5
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.38.0
    digest: sha256:9da97e7b8b5d6d83ed0e0382387d0d7664f55673af98c80f85a0e37590991ce1

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.2.2
    digest: sha256:747a50ab2d4e580391c17ed6ab2c0ebbcb76961f797a32e4fd59ab8f019ad049
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.2.0
    digest: sha256:a61dd20d2166b220bb13969b203784f614d19a309ef05882458a1f8ddf858738
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v0.37.0
    digest: sha256:2b72f51583dccf7a094610dc31d775849370ae9252dc05b2c69470af04777564
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.2.2
    digest: sha256:71bd2d46a4ca1615e6c4075f044aaa0949174d63d640c95f5c08e89f389310b0
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.37.0
    digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.2.3
    digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.2.1
    digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v0.37.1
    digest: sha256:27d7d508de86cc287a7de853f21b5fb1744c6632f7035edd8c5e5b062ed7fee7
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.2.3
    digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.37.0
    digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.2.3
    digest: sha256:7e30fdd3ea42ca2c62802a9573dc414042bbf44edc9d1c3d7498f2312427251b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.2.1
    digest: sha256:fba9f78a65373a9c1d28394920893b495c5497d6aa108514f1fb9c34e3a08179
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v0.37.2
    digest: sha256:2bd468e5384babd9c0b2b96402cd6f4516f5c105cf35a948df2dda069301f3df
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.2.3
    digest: sha256:ce281c9b14cf73123ec5c6bf75d0b38691ecc5490df207b4c4677403c6792b20
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.31.1
    digest: sha256:403f3a9d572036ed250e936b77edd1ba74abad6f4b1baff96c5cbe13b3f40e3d
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.37.0
    digest: sha256:d67d37242fa3e2136c2578ec6e8cf5962209f66190f6240aef42e42f13f87d27

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.2.5
    digest: sha256:afd50536255535b6d35d788b1f89d75c94425d50a11e66c15682bede7daf6cb7
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.2.2
    digest: sha256:1fce72172b5ef7b31c5b26bdcc146c3b45281b93a43c5b2cbec4729e1f1622fb
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v0.37.4
    digest: sha256:2ed8583845d069de4eee96eb3f3346ff414fd6554d80029da4c382d144255276
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.2.4
    digest: sha256:ef79170e2fa9be550b6e39ea95121058dfea47b36274a46165f7543890620ab2
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v0.31.2
    digest: sha256:813c3ec28a8bee973964c3ebe4e9f26e3de62ab153b1d03b39270d6efc031f57
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v0.37.1
    digest: sha256:36164f29b1e8ede8bd9ee45ddc494e5dabda1f5ab4d48ec72928a28e25292fac

```

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

```dockerfile
# Build the operator binary using the Docker's Debian image.
FROM --platform=${BUILDPLATFORM} golang:1.25 AS builder
ARG VERSION
ARG TARGETOS
ARG TARGETARCH
WORKDIR /workspace

# Copy the Go Modules manifests.
COPY go.mod go.mod
COPY go.sum go.sum

# Cache the Go Modules
RUN go mod download

# Copy the Go sources.
COPY cmd/operator/main.go cmd/operator/main.go
COPY api/ api/
COPY internal/ internal/
COPY web/embed.go web/embed.go

# Copy web assets.
COPY web/dist/ web/dist/

# Build the operator binary.
RUN CGO_ENABLED=0 GOFIPS140=latest GOOS=${TARGETOS:-linux} GOARCH=${TARGETARCH} \
    go build -ldflags="-s -w -X main.VERSION=${VERSION}" -trimpath -a -o flux-operator cmd/operator/main.go

# Run the operator binary using Google's Distroless image.
FROM gcr.io/distroless/static:nonroot
WORKDIR /

# Copy the license.
COPY LICENSE /licenses/LICENSE

# Copy the manifests data.
COPY config/data/ /data/

# Copy the operator binary.
COPY --from=builder /workspace/flux-operator .

# Run the operator as a non-root user.
USER 65532:65532
ENTRYPOINT ["/flux-operator"]

```

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

```yaml
apiVersion: v1
kind: Namespace
metadata:
  name: sre
---
apiVersion: v1
kind: Namespace
metadata:
  name: dev
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flux
  namespace: sre
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: flux
  namespace: dev
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: flux
  namespace: sre
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- kind: ServiceAccount
  name: flux
  namespace: sre
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: flux
  namespace: dev
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: admin
subjects:
- kind: ServiceAccount
  name: flux
  namespace: dev
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  annotations:
    fluxcd.controlplane.io/reconcile: enabled
  name: flux-sre
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
- kind: ServiceAccount
  name: flux
  namespace: sre
---

```

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

```yaml
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
  labels:
    app.kubernetes.io/semver: 1-0-0-rc-0
  name: team1-app1
  namespace: apps
spec:
  interval: 10m
  ref:
    semver: '>=1.0.0-rc.0'
  url: oci://ghcr.io/org/charts/app1
---
apiVersion: source.toolkit.fluxcd.io/v1beta2
kind: OCIRepository
metadata:
  labels:
    app.kubernetes.io/semver: 1-0-0
  name: team2-app1
  namespace: apps
spec:
  interval: 10m
  ref:
    semver: '>=1.0.0'
  url: oci://ghcr.io/org/charts/app1
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  labels:
    replicas: "2"
  name: team1-app1
  namespace: apps
spec:
  chartRef:
    kind: OCIRepository
    name: team1-app1
  interval: 1h
  releaseName: team1-app1
  values:
    domain: t1.example.com
    replicas: 2
---
apiVersion: helm.toolkit.fluxcd.io/v2
kind: HelmRelease
metadata:
  labels:
    replicas: "3"
  name: team2-app1
  namespace: apps
spec:
  chartRef:
    kind: OCIRepository
    name: team2-app1
  interval: 1h
  releaseName: team2-app1
  values:
    domain: t2.example.com
    replicas: 3
---

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/source-controller
    newTag: v1.5.0
    digest: sha256:0c99727da7ed40ca0ce180dc4ff3ee8eba24b49afb8083adde091dffc8045231
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/kustomize-controller
    newTag: v1.5.1
    digest: sha256:ceadae54d6c78fa26009f6a4709da06ef9bb23176c119bb0623da4dd2dae2a54
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/helm-controller
    newTag: v1.2.0
    digest: sha256:cdbcb851cbee811787df2c6df822f044418245c7635ee2f6138d69737837cec6
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/notification-controller
    newTag: v1.5.0
    digest: sha256:e7f42e34cdffb65f0b42c6b64d80bc55a3975403b0673fc53c926f93072b65cf
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-reflector-controller
    newTag: v0.34.0
    digest: sha256:08416bfab878a3f6c1b99ac1e7229c1abb2c71ddf347f4b05334b22afb00d738
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-automation-controller
    newTag: v0.40.0
    digest: sha256:c1612f87d85ea5c77bebd894b56fe5f52e66ad4c0848014c8c22ad8f2308d75d

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/source-controller
    newTag: v1.6.2
    digest: sha256:9689a297295ca2d312ddfe3b8abea64497bed40914a85a53abb76c430ca80df0
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/kustomize-controller
    newTag: v1.6.1
    digest: sha256:68b7d0c900bc6c48a000c8a6014867640a2e7ff9e2228c0338462a8f36659559
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/helm-controller
    newTag: v1.3.0
    digest: sha256:98d24bcc5509542b3e38f9966d411f72547d69f6696e19419146ce61fb45c5e3
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/notification-controller
    newTag: v1.6.0
    digest: sha256:09827eab87f9e6f39182513429da268ab294d7e7d823d2d60236bb05d2499922
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-reflector-controller
    newTag: v0.35.2
    digest: sha256:8120009a3afab2ccf97aeec6d0950ad2b48798b7eb5ab27798fe4ab8d4d093d6
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-automation-controller
    newTag: v0.41.2
    digest: sha256:98827ce06ef92904e0aea38c3c91de0fcf7940831bf53fa8bb7a11b11108df4c

```

--------------------------------------------------------------------------------
/cmd/mcp/toolbox/get_contexts.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package toolbox

import (
	"context"

	"github.com/modelcontextprotocol/go-sdk/mcp"
	"sigs.k8s.io/yaml"
)

const (
	// ToolGetKubeConfigContexts is the name of the get_kubeconfig_contexts tool.
	ToolGetKubeConfigContexts = "get_kubeconfig_contexts"
)

func init() {
	systemTools[ToolGetKubeConfigContexts] = systemTool{
		readOnly:  true,
		inCluster: false,
	}
}

// HandleGetKubeconfigContexts is the handler function for the get_kubeconfig_contexts tool.
func (m *Manager) HandleGetKubeconfigContexts(ctx context.Context, request *mcp.CallToolRequest, input struct{}) (*mcp.CallToolResult, any, error) {
	if err := CheckScopes(ctx, ToolGetKubeConfigContexts, m.readOnly); err != nil {
		return NewToolResultError(err.Error())
	}

	err := m.kubeconfig.Load()
	if err != nil {
		return NewToolResultErrorFromErr("Failed to read kubeconfig", err)
	}

	data, err := yaml.Marshal(m.kubeconfig.Contexts())
	if err != nil {
		return NewToolResultErrorFromErr("Failed marshalling data", err)
	}

	return NewToolResultText(string(data))
}

```

--------------------------------------------------------------------------------
/cmd/cli/suspend_instance.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package main

import (
	"context"
	"fmt"

	"github.com/spf13/cobra"

	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
)

var suspendInstanceCmd = &cobra.Command{
	Use:               "instance [name]",
	Short:             "Suspend FluxInstance reconciliation",
	Args:              cobra.ExactArgs(1),
	RunE:              suspendInstanceCmdRun,
	ValidArgsFunction: resourceNamesCompletionFunc(fluxcdv1.GroupVersion.WithKind(fluxcdv1.FluxInstanceKind)),
}

func init() {
	suspendCmd.AddCommand(suspendInstanceCmd)
}

func suspendInstanceCmdRun(cmd *cobra.Command, args []string) error {
	if len(args) != 1 {
		return fmt.Errorf("name is required")
	}

	name := args[0]
	now := timeNow()
	gvk := fluxcdv1.GroupVersion.WithKind(fluxcdv1.FluxInstanceKind)

	ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout)
	defer cancel()

	err := toggleSuspension(ctx, gvk, name, *kubeconfigArgs.Namespace, now, true)
	if err != nil {
		return err
	}

	rootCmd.Println(`✔`, "Reconciliation suspended")
	return nil
}

```

--------------------------------------------------------------------------------
/internal/web/fs.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package web

import (
	"io/fs"
	"path/filepath"
	"strings"
)

// FileSystem wraps an embedded filesystem to handle SPA routing.
// It serves index.html for all non-existent file requests (404s).
type FileSystem struct {
	fs fs.FS
}

// NewFileSystem creates a new filesystem handler for SPA routing.
func NewFileSystem(efs fs.FS) *FileSystem {
	return &FileSystem{fs: efs}
}

// Open implements fs.FS interface for SPA routing.
func (w *FileSystem) Open(name string) (fs.File, error) {
	// Normalize path
	name = strings.TrimPrefix(name, "/")

	// Try to open the requested file
	f, err := w.fs.Open(filepath.Join("dist", name))
	if err == nil {
		// File exists, return it
		return f, nil
	}

	// If it's not a directory request and the file doesn't exist,
	// serve index.html for SPA routing
	if !strings.HasSuffix(name, "/") {
		indexPath := filepath.Join("dist", "index.html")
		f, err := w.fs.Open(indexPath)
		if err == nil {
			return f, nil
		}
	}

	// Return original error if we can't fall back to index.html
	return nil, err
}

```

--------------------------------------------------------------------------------
/internal/builder/testdata/resourceset/multi-doc-template.yaml:
--------------------------------------------------------------------------------

```yaml
apiVersion: fluxcd.controlplane.io/v1
kind: ResourceSet
metadata:
  name: bundles
  namespace: flux-system
spec:
  inputs:
    - bundle: addons
      decryption: false
      apps:
        - ingress-nginx
        - cert-manager
    - bundle: apps
      decryption: true
      apps:
        - frontend
        - backend
  resourcesTemplate: |
    ---
    apiVersion: source.toolkit.fluxcd.io/v1beta2
    kind: OCIRepository
    metadata:
      name: << inputs.bundle >>
      namespace: flux-system
    spec:
      interval: 10m
      url: oci://registry.example.com/<< inputs.bundle >>
      ref:
        tag: latest
    <<- range $app := inputs.apps >>
    ---
    apiVersion: kustomize.toolkit.fluxcd.io/v1
    kind: Kustomization
    metadata:
      name: << $app >>
      namespace: flux-system
    spec:
      interval: 10m
      prune: true
      <<- if inputs.decryption >>
      decryption:
        provider: sops
        secretRef:
          name: << inputs.bundle >>-sops
      <<- end >>
      sourceRef:
        kind: OCIRepository
        name: << inputs.bundle >>
      path: ./<< $app >>
    <<- end >>

```

--------------------------------------------------------------------------------
/internal/entitlement/default_test.go:
--------------------------------------------------------------------------------

```go
// Copyright 2024 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package entitlement

import (
	"context"
	"testing"

	. "github.com/onsi/gomega"
	"github.com/opencontainers/go-digest"
)

func TestRegisterUsage(t *testing.T) {
	g := NewWithT(t)
	client := DefaultClient{Vendor: "testVendor"}
	ctx := context.Background()
	id := "testID"

	token, err := client.RegisterUsage(ctx, id)
	g.Expect(err).ToNot(HaveOccurred())

	expectedDigest := digest.FromString("testVendor-testID").Encoded()
	g.Expect(token).To(Equal(expectedDigest))
}

func TestVerify(t *testing.T) {
	g := NewWithT(t)
	client := DefaultClient{Vendor: "testVendor"}
	id := "testID"
	token := digest.FromString("testVendor-testID").Encoded()

	valid, err := client.Verify(token, id)
	g.Expect(err).ToNot(HaveOccurred())
	g.Expect(valid).To(BeTrue())

	invalidToken := "invalidToken"
	valid, err = client.Verify(invalidToken, id)
	g.Expect(err).ToNot(HaveOccurred())
	g.Expect(valid).To(BeFalse())
}

func TestGetVendor(t *testing.T) {
	g := NewWithT(t)
	client := DefaultClient{Vendor: "testVendor"}
	vendor := client.GetVendor()
	g.Expect(vendor).To(Equal("testVendor"))
}

```

--------------------------------------------------------------------------------
/internal/controller/resourcesetinputprovider_manager.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package controller

import (
	"k8s.io/client-go/util/workqueue"
	ctrl "sigs.k8s.io/controller-runtime"
	"sigs.k8s.io/controller-runtime/pkg/builder"
	"sigs.k8s.io/controller-runtime/pkg/controller"
	"sigs.k8s.io/controller-runtime/pkg/predicate"
	"sigs.k8s.io/controller-runtime/pkg/reconcile"

	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
)

// ResourceSetInputProviderReconcilerOptions contains options for the reconciler.
type ResourceSetInputProviderReconcilerOptions struct {
	RateLimiter workqueue.TypedRateLimiter[reconcile.Request]
}

// SetupWithManager sets up the controller with the Manager.
func (r *ResourceSetInputProviderReconciler) SetupWithManager(mgr ctrl.Manager, opts ResourceSetInputProviderReconcilerOptions) error {
	return ctrl.NewControllerManagedBy(mgr).
		For(&fluxcdv1.ResourceSetInputProvider{},
			builder.WithPredicates(
				predicate.Or(
					predicate.GenerationChangedPredicate{},
					predicate.AnnotationChangedPredicate{},
				),
			)).
		WithOptions(controller.Options{
			RateLimiter: opts.RateLimiter,
		}).Complete(r)
}

```

--------------------------------------------------------------------------------
/cmd/cli/suspend_resourceset.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package main

import (
	"context"
	"fmt"

	"github.com/spf13/cobra"

	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
)

var suspendResourceSetCmd = &cobra.Command{
	Use:               "resourceset [name]",
	Aliases:           []string{"rset"},
	Short:             "Suspend ResourceSet reconciliation",
	Args:              cobra.ExactArgs(1),
	RunE:              suspendResourceSetCmdRun,
	ValidArgsFunction: resourceNamesCompletionFunc(fluxcdv1.GroupVersion.WithKind(fluxcdv1.ResourceSetKind)),
}

func init() {
	suspendCmd.AddCommand(suspendResourceSetCmd)
}

func suspendResourceSetCmdRun(cmd *cobra.Command, args []string) error {
	if len(args) != 1 {
		return fmt.Errorf("name is required")
	}

	name := args[0]
	now := timeNow()
	gvk := fluxcdv1.GroupVersion.WithKind(fluxcdv1.ResourceSetKind)

	ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout)
	defer cancel()

	err := toggleSuspension(ctx, gvk, name, *kubeconfigArgs.Namespace, now, true)
	if err != nil {
		return err
	}

	rootCmd.Println(`✔`, "Reconciliation suspended")
	return nil
}

```

--------------------------------------------------------------------------------
/internal/reporter/cluster.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package reporter

import (
	"context"
	"fmt"

	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
	"k8s.io/apimachinery/pkg/runtime/schema"
	"k8s.io/client-go/kubernetes"
	"sigs.k8s.io/controller-runtime/pkg/client/config"

	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
)

func (r *FluxStatusReporter) getClusterInfo(ctx context.Context) (*fluxcdv1.ClusterInfo, error) {
	restConfig, err := config.GetConfig()
	if err != nil {
		return nil, err
	}

	clientSet, err := kubernetes.NewForConfig(restConfig)
	if err != nil {
		return nil, err
	}

	sv, err := clientSet.Discovery().ServerVersion()
	if err != nil {
		return nil, fmt.Errorf("failed to get server version: %w", err)
	}

	nodes := &metav1.PartialObjectMetadataList{}
	nodes.SetGroupVersionKind(schema.GroupVersionKind{
		Group:   "",
		Version: "v1",
		Kind:    "NodeList",
	})
	if err := r.List(ctx, nodes); err != nil {
		return nil, fmt.Errorf("failed to list nodes: %w", err)
	}

	return &fluxcdv1.ClusterInfo{
		ServerVersion: sv.String(),
		Platform:      sv.Platform,
		Nodes:         len(nodes.Items),
	}, nil
}

```

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

```yaml
apiVersion: fluxcd.controlplane.io/v1
kind: ResourceSet
metadata:
  name: app1
  namespace: apps
spec:
  inputs:
    - tenant: team1
      domain: t1.example.com
      semver: ">=1.0.0-rc.0"
      replicas: "2"
    - tenant: team2
      domain: t2.example.com
      semver: ">=1.0.0"
      replicas: "3"
  resources:
    - apiVersion: source.toolkit.fluxcd.io/v1beta2
      kind: OCIRepository
      metadata:
        name: << inputs.tenant >>-app1
        namespace: apps
        labels:
          app.kubernetes.io/semver: << inputs.semver | slugify >>
      spec:
        interval: 10m
        url: oci://ghcr.io/org/charts/app1
        ref:
          semver: << inputs.semver | quote >>
    - apiVersion: helm.toolkit.fluxcd.io/v2
      kind: HelmRelease
      metadata:
        name: << inputs.tenant >>-app1
        namespace: apps
        labels:
          replicas: << inputs.replicas | quote >>
      spec:
        interval: 1h
        releaseName: << inputs.tenant >>-app1
        chartRef:
          kind: OCIRepository
          name: << inputs.tenant >>-app1
        values:
          domain: << inputs.domain >>
          replicas: << inputs.replicas | int >>

```

--------------------------------------------------------------------------------
/config/default/rbac.yaml:
--------------------------------------------------------------------------------

```yaml
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRoleBinding
metadata:
  name: flux-operator-cluster-admin
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: cluster-admin
subjects:
  - kind: ServiceAccount
    name: flux-operator
    namespace: flux-system
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: flux-operator-edit
  labels:
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
rules:
  - apiGroups:
      - fluxcd.controlplane.io
    resources:
      - resourcesets
      - resourcesetinputproviders
    verbs:
      - create
      - delete
      - deletecollection
      - patch
      - update
---
apiVersion: rbac.authorization.k8s.io/v1
kind: ClusterRole
metadata:
  name: flux-operator-view
  labels:
    rbac.authorization.k8s.io/aggregate-to-admin: "true"
    rbac.authorization.k8s.io/aggregate-to-edit: "true"
    rbac.authorization.k8s.io/aggregate-to-view: "true"
rules:
  - apiGroups:
      - fluxcd.controlplane.io
    resources:
      - resourcesets
      - resourcesetinputproviders
    verbs:
      - get
      - list
      - watch

```

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

```yaml
---
apiVersion: fluxcd.controlplane.io/v1
kind: ResourceSet
metadata:
  name: apps
  namespace: test
spec:
  inputsFrom:
    - selector:
        matchLabels:
          fluxcd.controlplane.io/role: provisioning
  resourcesTemplate: |
    <<- $id := inputs.id >>
    <<- $tenant := inputs.tenantName >>
    <<- range $app := inputs.applications >>
    <<- $appName := $app.name >>
    <<- range $env := $app.envs >>
    ---
    apiVersion: source.toolkit.fluxcd.io/v1
    kind: OCIRepository
    metadata:
      name: << $appName >>
      namespace: << $tenant >>-<< $env.name >>
      annotations:
        fluxcd.controlplane.io/id: << $id | quote >>
    spec:
      interval: 10m
      url: oci://registry.example.com/<< $appName >>
      ref:
        tag: << $env.version >>
    ---
    apiVersion: kustomize.toolkit.fluxcd.io/v1
    kind: Kustomization
    metadata:
      name: << $appName >>
      namespace: << $tenant >>-<< $env.name >>
      annotations:
        fluxcd.controlplane.io/id: << $id | quote >>
    spec:
      interval: 1h
      prune: true
      sourceRef:
        kind: OCIRepository
        name: << $appName >>
      path: ./
    <<- end >>
    <<- end >>

```

--------------------------------------------------------------------------------
/cmd/mcp/toolbox/get_apis.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package toolbox

import (
	"context"

	"github.com/modelcontextprotocol/go-sdk/mcp"
)

const (
	// ToolGetKubernetesAPIVersions is the name of the get_kubernetes_api_versions tool.
	ToolGetKubernetesAPIVersions = "get_kubernetes_api_versions"
)

func init() {
	systemTools[ToolGetKubernetesAPIVersions] = systemTool{
		readOnly:  true,
		inCluster: true,
	}
}

// HandleGetAPIVersions is the handler function for the get_kubernetes_api_versions tool.
func (m *Manager) HandleGetAPIVersions(ctx context.Context, request *mcp.CallToolRequest, input struct{}) (*mcp.CallToolResult, any, error) {
	if err := CheckScopes(ctx, ToolGetKubernetesAPIVersions, m.readOnly); err != nil {
		return NewToolResultError(err.Error())
	}

	ctx, cancel := context.WithTimeout(ctx, m.timeout)
	defer cancel()

	kubeClient, err := m.kubeClient.GetClient(ctx)
	if err != nil {
		return NewToolResultErrorFromErr("Failed to get Kubernetes client", err)
	}

	result, err := kubeClient.ExportAPIs(ctx)
	if err != nil {
		return NewToolResultErrorFromErr("Failed to export Kubernetes APIs", err)
	}

	return NewToolResultText(result)
}

```

--------------------------------------------------------------------------------
/api/v1/schedule_types.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package v1

import metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"

const (
	ReasonInvalidSchedule      = "InvalidSchedule"
	ReasonSkippedDueToSchedule = "SkippedDueToSchedule"
)

// Schedule defines a schedule for something to run.
type Schedule struct {
	// Cron specifies the cron expression for the schedule.
	// +required
	Cron string `json:"cron"`

	// TimeZone specifies the time zone for the cron schedule. Defaults to UTC.
	// +kubebuilder:default:="UTC"
	// +optional
	TimeZone string `json:"timeZone,omitempty"`

	// Window defines the time window during which the execution is allowed.
	// Defaults to 0s, meaning no window is applied.
	// +kubebuilder:validation:Type=string
	// +kubebuilder:validation:Pattern="^([0-9]+(\\.[0-9]+)?(ms|s|m|h))+$"
	// +kubebuilder:default:="0s"
	// +optional
	Window metav1.Duration `json:"window"`
}

// NextSchedule defines the next time a schedule will run.
type NextSchedule struct {
	// Schedule has the configuration of the next schedule.
	Schedule `json:",inline"`

	// When is the next time the schedule will run.
	// +required
	When metav1.Time `json:"when"`
}

```

--------------------------------------------------------------------------------
/cmd/mcp/toolbox/get_contexts_test.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package toolbox

import (
	"context"
	"os"
	"testing"

	"github.com/modelcontextprotocol/go-sdk/mcp"
	. "github.com/onsi/gomega"
	cli "k8s.io/cli-runtime/pkg/genericclioptions"

	"github.com/controlplaneio-fluxcd/flux-operator/cmd/mcp/k8s"
)

func TestManager_HandleGetKubeconfigContexts(t *testing.T) {
	g := NewWithT(t)

	configFile := "testdata/kubeconfig.yaml"
	goldenFile := "testdata/kubeconfig_golden.yaml"
	t.Setenv("KUBECONFIG", configFile)

	m := &Manager{
		kubeconfig: k8s.NewKubeConfig(),
		kubeClient: k8s.NewClientFactory(cli.NewConfigFlags(false)),
	}

	request := &mcp.CallToolRequest{
		Params: &mcp.CallToolParamsRaw{
			Name: "get_kubeconfig_contexts",
		},
	}

	result, _, err := m.HandleGetKubeconfigContexts(context.Background(), request, struct{}{})
	g.Expect(err).ToNot(HaveOccurred())
	g.Expect(result).ToNot(BeNil())
	g.Expect(result.Content).ToNot(BeEmpty())

	goldenContent, err := os.ReadFile(goldenFile)
	g.Expect(err).ToNot(HaveOccurred())

	textContent, ok := result.Content[0].(*mcp.TextContent)
	g.Expect(ok).To(BeTrue())
	g.Expect(textContent.Text).To(MatchYAML(string(goldenContent)))
}

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.0
    digest: sha256:e6eb74be173cdc7247ae3d6cc23b7d8389bb61b7cebaf63caee9f19814b2d796
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.0
    digest: sha256:52dbb5be888c8e68df554bf84f4b809cc503d064eb0dc97cfb168d10a817138a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.0
    digest: sha256:7cd42255075dff8a9cab32ad524e699dc970fd73f74cb3c8ca1554c5808f7f86
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.1
    digest: sha256:852a2675ac1cb014fc7b5f72f8c7ecc600398866b0b23409a0a71fa8d5f8465a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:fbb855dc322ab2358e837fbf68c02a58e961f9077ce8de9ab9a3dc34930c580e
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.1
    digest: sha256:2e6b1fde971901c27df79942b9a637c3fb8300eac3545ddbbbc02d8fee21e3f1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.1
    digest: sha256:9b3c2a45d6cec611254bd6305caec2b15d6fa85f55527750aa4e4c270d33bfff

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.1
    digest: sha256:4babcdd5933ea86257a33f5c4e96a686842be584f8c909c26dde059aabcba0ce
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.0
    digest: sha256:52dbb5be888c8e68df554bf84f4b809cc503d064eb0dc97cfb168d10a817138a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.1
    digest: sha256:3d0cb07ec58bad707de14e67de1a0e498b357210d57153150e5183698d108257
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.2
    digest: sha256:25e4a0a3b4cf8a6c96b3863e877ce7a7735dc3ea16c30722f8598dd08448112a
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:fbb855dc322ab2358e837fbf68c02a58e961f9077ce8de9ab9a3dc34930c580e
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.1
    digest: sha256:2e6b1fde971901c27df79942b9a637c3fb8300eac3545ddbbbc02d8fee21e3f1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.1
    digest: sha256:9b3c2a45d6cec611254bd6305caec2b15d6fa85f55527750aa4e4c270d33bfff

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.2
    digest: sha256:51ad5e23a0795f16c04ef9ab3c558ad8855d10a06ec27a42f1bc5902c8f84399
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.1
    digest: sha256:85fa71d01229c91e17b31ee119bb9b08f2a80758bb07bc19348a43dee5172d08
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.2
    digest: sha256:18e2b1aed49041fe86c151e830c3bb0c6a1e8c44a1962c29c02f7730027b1c90
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.3
    digest: sha256:c2e25a5cac4b53255b9dffa24ab0b780b29308fec8a3e27924723e0185c8a9ba
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.2
    digest: sha256:7bc19a6c2b49dc77608734539419b1a678f65c43922aa3dc59408d8eed40c073
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.2
    digest: sha256:1a482ff3457d5489f180a5aea958032ebb09c22709696a4be535fb4928a8a765
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.2
    digest: sha256:578c80d01aba477c961b531299e5c6d98497f8c50fd8a0deda14c78543b754b1

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.3
    digest: sha256:68ccb51a9dc79c7a9433a0767256a641200982b776865fffad27b3e12232affb
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.2
    digest: sha256:255bdeed339c33f4efcacc7a2c0aeeba70d359f61dbbac4a3a5cb259759192c3
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.3
    digest: sha256:69c775beb8c5a3016319a2f4e0956995dba2f40eff3cd9e79379911caf9de78d
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.4
    digest: sha256:a76ae274c1a05ba4f9df0b56f70ae804c9d5f309d30ce4ab1ba5d7c668f9d33f
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.3
    digest: sha256:68c8317c97816e3c75ee369c7c743ee6ede9368c1ae9cefe74584b459a3c7df5
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.3
    digest: sha256:f78186e2adaa3445dec769da248a103d3d35fbe6bfc706f309c0f018a384d189
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.2
    digest: sha256:a90b234933be65a632c39dcf61e9cd7edd0b26791c82b30c3e6d621a5aef084a

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.4
    digest: sha256:10fe0db20abde0ecd2c6d73d28fe1b6da18f7291b80f311d8a2329ba234af0de
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.3
    digest: sha256:162179b9678ea4759ed623e273faef3184b1744b5dda7c2cda828016b76497d8
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.4
    digest: sha256:d2b3347621fa0edd6a1a4817f37d92df561bb75ee3b0c18930d30e0f6ad0562c
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.5
    digest: sha256:292880d055ccc111796d746c58e03d9c96e119380b7e3fb9c94bb540c582f48c
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:58c5ca0821c7e3cb26b120bebfd8e8a3bf2bc236f71aef63318634c202d845ab
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.4
    digest: sha256:3a00b11e03e443cea76ebf54ca148cbf045ed3d3d2d4b539ff192a99c227b5ff
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.3
    digest: sha256:0e8ea6d213dc292eaf6cb1bb6cde5fbda7d0f66f60db49e9337079d79c0089b9

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-controller
    newTag: v1.7.4
    digest: sha256:ab1747b1dab33c83014d84f70b35cbdc530b50841d7d7aec56e5802188749bde
  - name: ghcr.io/controlplaneio-fluxcd/alpine/kustomize-controller
    newTag: v1.7.3
    digest: sha256:fae42429c9a2709099f2781d88286e44fbec9defca03d98dc0692d22b942bed1
  - name: ghcr.io/controlplaneio-fluxcd/alpine/helm-controller
    newTag: v1.4.5
    digest: sha256:d5d1640d82c427ea19e343563735d82bcaa2412489770ec982a522209808cf23
  - name: ghcr.io/controlplaneio-fluxcd/alpine/notification-controller
    newTag: v1.7.5
    digest: sha256:61c2957bde56c97a944bfe7bafa7bb837a2f2ba1e3f1828e3801d3febb02c7c9
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:950eeda2a0d7ccfcad5bda64f181f1b99b9bf4d9581d950d7127c7a1c268e880
  - name: ghcr.io/controlplaneio-fluxcd/alpine/image-automation-controller
    newTag: v1.0.4
    digest: sha256:9c97d7d0818308fbc89860470890ebb1f24de4345bd5013824d10fef81f620ec
  - name: ghcr.io/controlplaneio-fluxcd/alpine/source-watcher
    newTag: v2.0.3
    digest: sha256:ae219de6b17a1e1c848f5953ed1a49f40fa2da60bb3d262e18743c2b1eed3199

```

--------------------------------------------------------------------------------
/config/samples/fluxcd_v1_fluxinstance.yaml:
--------------------------------------------------------------------------------

```yaml
apiVersion: fluxcd.controlplane.io/v1
kind: FluxInstance
metadata:
  name: flux
spec:
  distribution:
    version: "2.x"
    registry: "ghcr.io/fluxcd"
    artifact: "oci://ghcr.io/controlplaneio-fluxcd/flux-operator-manifests:latest"
  components:
    - source-controller
    - kustomize-controller
    - helm-controller
    - notification-controller
    - image-reflector-controller
    - image-automation-controller
  cluster:
    type: openshift
    multitenant: false
    networkPolicy: true
    domain: "cluster.local"
  storage:
    class: "standard"
    size: "1Gi"
  sharding:
    shards: [ "shard1" ]
    storage: persistent
  sync:
    kind: GitRepository
    url: "https://github.com/controlplaneio-fluxcd/distribution.git"
    ref: "refs/heads/main"
    path: "tests/v2.3/sources"
  kustomize:
    patches:
      - target:
          kind: Deployment
          labelSelector: "app.kubernetes.io/component in (kustomize-controller, helm-controller)"
        patch: |
          - op: add
            path: /spec/template/spec/containers/0/args/-
            value: --concurrent=10
          - op: add
            path: /spec/template/spec/containers/0/args/-
            value: --requeue-dependency=10s

```

--------------------------------------------------------------------------------
/hack/vendor-flux-manifests.sh:
--------------------------------------------------------------------------------

```bash
#!/usr/bin/env bash

# Copyright 2024 Stefan Prodan.
# SPDX-License-Identifier: AGPL-3.0

set -euo pipefail

REPOSITORY_ROOT=$(git rev-parse --show-toplevel)
DEST_DIR="${REPOSITORY_ROOT}/config/data/flux"
IMG_DIR="${REPOSITORY_ROOT}/config/data/flux-images"
VEX_DIR="${REPOSITORY_ROOT}/config/data/flux-vex"

info() {
    echo '[INFO] ' "$@"
}

fatal() {
    echo '[ERROR] ' "$@" >&2
    exit 1
}

vendor() {
  info "extracting manifests for Flux ${1}"
  curl -sLO https://github.com/fluxcd/flux2/releases/download/${1}/manifests.tar.gz
  mkdir -p "${DEST_DIR}/${1}"
  tar xzf manifests.tar.gz -C "${DEST_DIR}/${1}"
  rm -rf manifests.tar.gz
}

for var in "$@"
do
    vendor "$var"
done

info "downloading distro repository"
curl -sLO https://github.com/controlplaneio-fluxcd/distribution/archive/refs/heads/main.tar.gz
tar xzf main.tar.gz -C "${DEST_DIR}"

mkdir -p "${IMG_DIR}"
cp -rf ${DEST_DIR}/distribution-main/images/* ${IMG_DIR}/
info "flux image manifests copied to flux-images"
mkdir -p "${VEX_DIR}"
cp -rf ${DEST_DIR}/distribution-main/vex/* ${VEX_DIR}/
info "flux OpenVEX documents copied to flux-vex"
rm -rf ${DEST_DIR}/distribution-main
rm -rf main.tar.gz

info "all manifests extracted to ${DEST_DIR}"

```

--------------------------------------------------------------------------------
/internal/inputs/keys.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package inputs

import (
	"strings"
	"unicode"
)

// NormalizedKey is a type alias for string that represents
// a normalized key for use in templates.
type NormalizedKey string

// NormalizeKeyForTemplate normalizes the given string
// to a consistent format for use as a key in maps fed
// to Go templates.
//
// We convert uppercase letters to lowercase, replace
// spaces and punctuation with '_', and remove any
// characters not in [a-z0-9_]. Then we split the
// words by '_' and join only the resulting non-empty
// words back together with '_'.
func NormalizeKeyForTemplate(key string) NormalizedKey {
	// Map characters according to the rules above.
	key = strings.Map(func(r rune) rune {
		r = unicode.ToLower(r)
		if unicode.IsSpace(r) || unicode.IsPunct(r) {
			return '_'
		}
		if ('a' <= r && r <= 'z') || ('0' <= r && r <= '9') {
			return r
		}
		return -1
	}, key)

	// Split by '_' and rejoin non-empty words with '_'.
	var nonEmptyWords []string
	for word := range strings.SplitSeq(key, "_") {
		if word != "" {
			nonEmptyWords = append(nonEmptyWords, word)
		}
	}
	key = strings.Join(nonEmptyWords, "_")

	return NormalizedKey(key)
}

```

--------------------------------------------------------------------------------
/internal/web/kubeclient/suite_test.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package kubeclient_test

import (
	"context"
	"testing"

	authzv1 "k8s.io/api/authorization/v1"
	corev1 "k8s.io/api/core/v1"
	rbacv1 "k8s.io/api/rbac/v1"
	"k8s.io/apimachinery/pkg/runtime"
	utilruntime "k8s.io/apimachinery/pkg/util/runtime"
	"k8s.io/client-go/rest"
	ctrl "sigs.k8s.io/controller-runtime"
	"sigs.k8s.io/controller-runtime/pkg/client"
	"sigs.k8s.io/controller-runtime/pkg/envtest"
)

var (
	ctx         context.Context
	cancel      context.CancelFunc
	testEnv     = &envtest.Environment{}
	testEnvConf *rest.Config
	testScheme  *runtime.Scheme
	testClient  client.Client
)

func init() {
	testScheme = runtime.NewScheme()
	utilruntime.Must(corev1.AddToScheme(testScheme))
	utilruntime.Must(rbacv1.AddToScheme(testScheme))
	utilruntime.Must(authzv1.AddToScheme(testScheme))
}

func TestMain(m *testing.M) {
	ctx, cancel = context.WithCancel(ctrl.SetupSignalHandler())

	var err error
	testEnvConf, err = testEnv.Start()
	if err != nil {
		panic(err)
	}

	testClient, err = client.New(testEnvConf, client.Options{Scheme: testScheme})
	if err != nil {
		panic(err)
	}

	m.Run()

	cancel()
	err = testEnv.Stop()
	if err != nil {
		panic(err)
	}
}

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.0
    digest: sha256:4b9352ef6068529cea3ac18b40daad2963ee02bc38a5b360f43bc35893e7f991
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.0
    digest: sha256:4b6829a666bc19f732101b3f1e7c548e61f19d3e7c9c16b8fb7cace741861bbc
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.0
    digest: sha256:1c4fdf9193348afe5f3a358f6aa1920afa34435746e983f2c2f2c8d1b6a7cfaf
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.1
    digest: sha256:9059043f21cb1a8dfe236eef18031c6d5869b2c482b7f3954976d81a833ed772
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:fbe17f6a304f32a1a518c6ee411bcdb57be1bc140670d44fc442334bcbc6bae6
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.1
    digest: sha256:148ce85e42191d216dbb3118b290cf0be3d926196e687dcb9655a66ca54214f2
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.1
    digest: sha256:67a5f6225f369bba4b211e5bd4642177ef2ac1d2ae3d988aaace3f90e081cc38

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.1
    digest: sha256:487ad9d4f2c99fe3e70686b146bb61e40fddec32862c42e2dc1d3b0e144aca13
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.0
    digest: sha256:4b6829a666bc19f732101b3f1e7c548e61f19d3e7c9c16b8fb7cace741861bbc
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.1
    digest: sha256:4266b34c51627784e61bfd622fee375ed87f2f17148a4bb0931155182ca94af5
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.2
    digest: sha256:1d46aab370cdb5cf20242eeff76add133b78e0f7730d8346997432620e4c4266
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.1
    digest: sha256:fbe17f6a304f32a1a518c6ee411bcdb57be1bc140670d44fc442334bcbc6bae6
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.1
    digest: sha256:148ce85e42191d216dbb3118b290cf0be3d926196e687dcb9655a66ca54214f2
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.1
    digest: sha256:67a5f6225f369bba4b211e5bd4642177ef2ac1d2ae3d988aaace3f90e081cc38

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.2
    digest: sha256:caa418fa715d0a68f2fa38017a2979bd98b789e98c57e21237ec3f308079702e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.1
    digest: sha256:457477ebb8c8c2bc44063c2b5684d1c82047cbda03fa1bd55e9465341cd8ee38
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.2
    digest: sha256:006fc8803a6efdcc175ac62cfd8574b14fd108c75b6dd5ca73f26fdc08f74d0e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.3
    digest: sha256:c2f67cd68af7f0a9e5b5a50c68991b68c51f2d1aeb8b38e9fd4c40ed05b5f50a
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.2
    digest: sha256:83f9c5025de4275b245217a8d5291292134332ac617bb2ba3f458b292285484d
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.2
    digest: sha256:1df274310a0fe7b5858ec737803c522e02935071b9aa69e0112f222d9e89858b
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.2
    digest: sha256:0b115ba1f9979ca9fcdc0940f8ee5d317513dd1143f19651462f99aa6159111b

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.3
    digest: sha256:1eae8f938d1b62e9b43c5d714b833619737e5f400ab8fdcab3e22516448a1324
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.2
    digest: sha256:5d92fc3276326078bb6fc2928ed1ab66f4b6b14c6a35f62ce693212c9a091777
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.3
    digest: sha256:8bbe14a7bcfd4bcfa1d987f222044ddb8e309fe79e5beefee8063a3fe9e19dfc
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.4
    digest: sha256:aab6f2451f51e3fe83ea15d83d03923aef40ea4e997e16e24dd5db6f5b770ac9
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.3
    digest: sha256:f152d228d6052c0a7cbf23ce1422d575c44afcaca9cbd4607aaedfc9508d7afa
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.3
    digest: sha256:58c31306303795ba3ad104d87fdc17e60f4cb62925ad6b8dde02c965882c7aeb
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.2
    digest: sha256:1ccf7dcfc63a42ea298b2667ea764e56def20912d9f53e03449f57bae1ba4be0

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.4
    digest: sha256:246e64b5950d686bba9dcc524f2381eb62d9be7c274db507769787dd0caaa149
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.3
    digest: sha256:b63036a6c75c34575f71d9bd5e20617c5e8b66aea9e4d56e39e76899f541c1cf
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.4
    digest: sha256:eeb31b9cd64208a39094e3f85fe93ed3a985cbc00159b27dd13f21f70d734efa
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.5
    digest: sha256:9c4ce4620a8fdaf0ef943a07177bbf464b06ba436fc2f6efd083680b73aa24cf
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:e7bf730ebb063eb73cac51e09adbb2c88bd3a5589cb4d635a1844c0606653cb9
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.4
    digest: sha256:e8f9486dd83b5dfac0648dc7ffea173b559676f1c828e845a29e4d406f893531
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.3
    digest: sha256:6ebd76169b79755b500854eab2ad4fc981d0d7e06133fbbca1c5edf476ecfa3d

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-controller
    newTag: v1.7.4
    digest: sha256:6128e1ca88038f956639005144704da3d377997359e20f66d22b2c9e44d9be71
  - name: ghcr.io/controlplaneio-fluxcd/distroless/kustomize-controller
    newTag: v1.7.3
    digest: sha256:5f8dc3afea8322bf5476dd07aec8c0a6bad3b3e76657560cd92cf5875036f661
  - name: ghcr.io/controlplaneio-fluxcd/distroless/helm-controller
    newTag: v1.4.5
    digest: sha256:566671ec53feefd15431e3f2a33065b141d1592086ca26a18adf32347845899e
  - name: ghcr.io/controlplaneio-fluxcd/distroless/notification-controller
    newTag: v1.7.5
    digest: sha256:7b0a784dee0d40241128e08114b5ed915510c834c56a52fa363dee915e2de0de
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:fff291ea8d362dba609658c0e2be50eba6351b94c96c1d420211f110d77723ff
  - name: ghcr.io/controlplaneio-fluxcd/distroless/image-automation-controller
    newTag: v1.0.4
    digest: sha256:ddb71fccea5ea121920d958ab27c9ad2b96714c5b1c921daccee504f4bf760dc
  - name: ghcr.io/controlplaneio-fluxcd/distroless/source-watcher
    newTag: v2.0.3
    digest: sha256:a1c228d518cc836b66227ab65f1c7723006437c075c2679b7ee6b5bb4d6d09d6

```

--------------------------------------------------------------------------------
/cmd/cli/suspend_inputprovider.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package main

import (
	"context"
	"fmt"

	"github.com/spf13/cobra"

	fluxcdv1 "github.com/controlplaneio-fluxcd/flux-operator/api/v1"
)

var suspendInputProviderCmd = &cobra.Command{
	Use:               "inputprovider [name]",
	Aliases:           []string{"rsip", "resourcesetinputprovider"},
	Short:             "Suspend ResourceSetInputProvider reconciliation",
	Args:              cobra.ExactArgs(1),
	RunE:              suspendInputProviderCmdRun,
	ValidArgsFunction: resourceNamesCompletionFunc(fluxcdv1.GroupVersion.WithKind(fluxcdv1.ResourceSetInputProviderKind)),
}

func init() {
	suspendCmd.AddCommand(suspendInputProviderCmd)
}

func suspendInputProviderCmdRun(cmd *cobra.Command, args []string) error {
	if len(args) != 1 {
		return fmt.Errorf("name is required")
	}

	name := args[0]
	now := timeNow()
	gvk := fluxcdv1.GroupVersion.WithKind(fluxcdv1.ResourceSetInputProviderKind)

	ctx, cancel := context.WithTimeout(context.Background(), rootArgs.timeout)
	defer cancel()

	err := toggleSuspension(ctx, gvk, name, *kubeconfigArgs.Namespace, now, true)
	if err != nil {
		return err
	}

	rootCmd.Println(`✔`, "Reconciliation suspended")
	return nil
}

```

--------------------------------------------------------------------------------
/config/data/flux-vex/v2.2.json:
--------------------------------------------------------------------------------

```json
{
  "@context": "https://openvex.dev/ns/v0.2.0",
  "@id": "https://openvex.dev/docs/public/vex-f843e58a33079b9f9344d4b4e72a3dcc0ee7ad51825e087b96692dccaf21f2d8",
  "author": "[email protected]",
  "role": "Enterprise Flux Maintainers",
  "timestamp": "2024-05-23T17:26:04.422544+03:00",
  "last_updated": "2024-05-24T00:38:58.404614+03:00",
  "version": 3,
  "statements": [
    {
      "vulnerability": {
        "name": "CVE-2019-25210"
      },
      "timestamp": "2024-05-24T00:38:51.232345+03:00",
      "products": [
        {
          "@id": "pkg:oci/source-controller"
        }
      ],
      "status": "not_affected",
      "justification": "vulnerable_code_not_present",
      "impact_statement": "This CVE has been dismissed by the Helm team https://helm.sh/blog/response-cve-2019-25210/"
    },
    {
      "vulnerability": {
        "name": "CVE-2019-25210"
      },
      "timestamp": "2024-05-24T00:38:58.404614+03:00",
      "products": [
        {
          "@id": "pkg:oci/helm-controller"
        }
      ],
      "status": "not_affected",
      "justification": "vulnerable_code_not_present",
      "impact_statement": "This CVE has been dismissed by the Helm team https://helm.sh/blog/response-cve-2019-25210/"
    }
  ]
}

```

--------------------------------------------------------------------------------
/cmd/mcp/toolbox/helpers.go:
--------------------------------------------------------------------------------

```go
// Copyright 2025 Stefan Prodan.
// SPDX-License-Identifier: AGPL-3.0

package toolbox

import (
	"fmt"

	"github.com/modelcontextprotocol/go-sdk/mcp"
)

// NewToolResultText creates a new CallToolResult with a text content.
func NewToolResultText(text string) (*mcp.CallToolResult, any, error) {
	return &mcp.CallToolResult{
		Content: []mcp.Content{&mcp.TextContent{Text: text}},
	}, nil, nil
}

// NewToolResultError creates a new CallToolResult with an error message.
// Any errors that originate from the tool SHOULD be reported inside the result object.
func NewToolResultError(text string) (*mcp.CallToolResult, any, error) {
	return &mcp.CallToolResult{
		Content: []mcp.Content{&mcp.TextContent{Text: text}},
		IsError: true,
	}, nil, nil
}

// NewToolResultErrorFromErr creates a new CallToolResult with an error message.
// If an error is provided, its details will be appended to the text message.
// Any errors that originate from the tool SHOULD be reported inside the result object.
func NewToolResultErrorFromErr(text string, err error) (*mcp.CallToolResult, any, error) {
	if err != nil {
		text = fmt.Sprintf("%s: %v", text, err)
	}
	return &mcp.CallToolResult{
		Content: []mcp.Content{&mcp.TextContent{Text: text}},
		IsError: true,
	}, nil, nil
}

```

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

```yaml
images:
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/source-controller
    newTag: v1.7.4
    digest: sha256:6153f67c81d1e48b8118726263eb37ab89f3fd31ba66b1422f6455d0fb565b07
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/kustomize-controller
    newTag: v1.7.3
    digest: sha256:e7dce531664c2b6139034d8fcb0f7d675ca4a6b958841d1d8532435b374ae5da
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/helm-controller
    newTag: v1.4.5
    digest: sha256:ad99779a601a8afd860dfd74f6723e4642b3597ea3580b9333002b5d77ebc4b9
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/notification-controller
    newTag: v1.7.5
    digest: sha256:9dd5a21dae13d3550a80b310e4143e9b0da8103247cde50c177bfa23df8ba7ea
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-reflector-controller
    newTag: v1.0.4
    digest: sha256:623297748715d21a4ecc0ecd1f51cafa71624134b4990f2472f2691353a95cec
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/image-automation-controller
    newTag: v1.0.4
    digest: sha256:577da18b6f608112a52fe8db9edacb6bac3441e91fca80c0d8c8fcd782c3e1e3
  - name: ghcr.io/controlplaneio-fluxcd/distroless-fips/source-watcher
    newTag: v2.0.3
    digest: sha256:aafb8d2e494bc48e4e476c0d38c16991a508fb294db82481a91dee5445976b95

```
Page 2/97FirstPrevNextLast