This is page 2 of 97. Use http://codebase.md/controlplaneio-fluxcd/flux-operator?lines=false&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
```