{"id":19134105,"url":"https://github.com/umbrellio/argo-cd-helmfile","last_synced_at":"2026-06-12T23:31:46.625Z","repository":{"id":42371787,"uuid":"478134839","full_name":"umbrellio/argo-cd-helmfile","owner":"umbrellio","description":null,"archived":false,"fork":false,"pushed_at":"2023-03-16T15:38:50.000Z","size":36,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-11-12T23:03:37.119Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/umbrellio.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-04-05T13:12:09.000Z","updated_at":"2022-04-05T13:12:24.000Z","dependencies_parsed_at":"2024-11-09T06:26:07.684Z","dependency_job_id":"b7da7723-4467-444b-9b6f-8f69c7e7500f","html_url":"https://github.com/umbrellio/argo-cd-helmfile","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/umbrellio/argo-cd-helmfile","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umbrellio%2Fargo-cd-helmfile","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umbrellio%2Fargo-cd-helmfile/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umbrellio%2Fargo-cd-helmfile/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umbrellio%2Fargo-cd-helmfile/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/umbrellio","download_url":"https://codeload.github.com/umbrellio/argo-cd-helmfile/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/umbrellio%2Fargo-cd-helmfile/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34266915,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-12T02:00:06.859Z","response_time":109,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-09T06:25:29.845Z","updated_at":"2026-06-12T23:31:46.609Z","avatar_url":"https://github.com/umbrellio.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Intro\n\nSupport for `helmfile` with `argo-cd`.\n\n`argo-cd` already supports `helm` in 2 distinct ways, why is this useful?\n\n- It helps decouple configuration from chart development\n- It's similar to using a repo type of `helm` but you can still manage\n  configuration with git.\n- Because I like the power afforded using `helmfile`'s features such as\n  `environments`, `selectors`, templates, and being able to use `ENV` vars as\n  conditionals **AND** values.\n- https://github.com/roboll/helmfile/blob/master/docs/writing-helmfile.md\n- https://github.com/roboll/helmfile/blob/master/docs/shared-configuration-across-teams.md\n\n# Security\n\nPlease make note that `helmfile` itself allows execution of arbitrary scripts.\nDue to this feature, execution of arbitrary scripts are allowed by this plugin,\nboth explicitly (see `HELMFILE_INIT_SCRIPT_FILE` env below) and implicity.\n\nConsider these implications for your environment and act appropriately.\n\n- https://github.com/roboll/helmfile#templating (`exec` desciption)\n- the execution pod/context is the `argocd-repo-server`\n\n# Installation\n\n```\n    configManagementPlugins: |\n      - name: helmfile\n        init:                          # Optional command to initialize application source directory\n          command: [\"argo-cd-helmfile.sh\"]\n          args: [\"init\"]\n        generate:                      # Command to generate manifests YAML\n          command: [\"argo-cd-helmfile.sh\"]\n          args: [\"generate\"]\n\n```\n\n```\n  volumes:\n  - name: custom-tools\n    emptyDir: {}\n\n  initContainers:\n  - name: download-tools\n    image: alpine:3.8\n    command: [sh, -c]\n    args:\n      - wget -qO /custom-tools/argo-cd-helmfile.sh https://raw.githubusercontent.com/umbrellio/argo-cd-helmfile/master/src/argo-cd-helmfile.sh \u0026\u0026\n        chmod +x /custom-tools/argo-cd-helmfile.sh \u0026\u0026\n        wget -qO /custom-tools/helmfile https://github.com/roboll/helmfile/releases/download/v0.138.7/helmfile_linux_amd64 \u0026\u0026\n        chmod +x /custom-tools/helmfile\n    volumeMounts:\n      - mountPath: /custom-tools\n        name: custom-tools\n  volumeMounts:\n  - mountPath: /usr/local/bin/argo-cd-helmfile.sh\n    name: custom-tools\n    subPath: argo-cd-helmfile.sh\n  - mountPath: /usr/local/bin/helmfile\n    name: custom-tools\n    subPath: helmfile\n```\n\n# Usage\n\nConfigure your `argo-cd` app to use a repo/directory which holds a valid\n`helmfile` configuation. This can be a directory which contains a\n`helmfile.yaml` file **OR** a `helmfile.d` directory containing any number of\n`*.yaml` files. You cannot have both configurations.\n\nThere are a number of specially handled `ENV` variables which can be set (all\noptional):\n\n- `HELM_BINARY` - custom path to `helm` binary\n- `HELM_TEMPLATE_OPTIONS` - pass-through options for the templating operation\n  `helm template --help`\n- `HELMFILE_BINARY` - custom path to `helmfile` binary\n- `HELMFILE_GLOBAL_OPTIONS` - pass-through options for all `helmfile`\n  operations `helmfile --help`\n- `HELMFILE_TEMPLATE_OPTIONS` - pass-through options for the templating\n  operation `helmfile template --help`\n- `HELMFILE_INIT_SCRIPT_FILE` - path to script to execute during init phase\n- `HELMFILE_HELMFILE` - a complete `helmfile.yaml` content\n- `HELMFILE_HELMFILE_STRATEGY` - one of `REPLACE` or `INCLUDE`\n    - `REPLACE` - the default option, only the content of `HELMFILE_HELMFILE` is\n      rendered, if any valid files exist in the repo they are ignored\n    - `INCLUDE` - any valid files in the repo **AND** the content of\n      `HELMFILE_HELMFILE` are rendered, precedence is given to\n      `HELMFILE_HELMFILE` should the same release name be declared in multiple\n      files\n\nOf the above `ENV` variables, the following do variable expansion on the value:\n\n- `HELMFILE_GLOBAL_OPTIONS`\n- `HELMFILE_TEMPLATE_OPTIONS`\n- `HELM_TEMPLATE_OPTIONS`\n- `HELMFILE_INIT_SCRIPT_FILE`\n- `HELM_DATA_HOME`\n\nMeaning, you can do things like:\n\n- `HELMFILE_GLOBAL_OPTIONS=\"--environment ${ARGOCD_APP_NAME} --selector cluster=${CLUSTER_ID}`\n\nAny of the standard `Build Environment` variables can be used as well as\nvariables declared in the application spec.\n\n- https://argoproj.github.io/argo-cd/user-guide/config-management-plugins/#environment\n- https://argoproj.github.io/argo-cd/user-guide/build-environment/\n\n## Helm Plugins\n\nTo use the various helm plugins the recommended approach is the install the\nplugins using the/an `initContainers` (explicity set the `HELM_DATA_HOME` env\nvar during the `helm plugin add` command) and simply set the `HELM_DATA_HOME`\nenvironment variable in your application spec (or globally in the pod). This\nprevents the plugin(s) from being downloaded over and over each run.\n\n```\n# repo server deployment\n  volumes:\n  ...\n  - name: helm-data-home\n    emptyDir: {}\n\n# repo-server container\n  volumeMounts:\n  ...\n  - mountPath: /home/argocd/.local/share/helm\n    name: helm-data-home\n\n# init container\n  volumeMounts:\n  ...\n  - mountPath: /helm/data\n    name: helm-data-home\n\n    [[ ! -d \"${HELM_DATA_HOME}/plugins/helm-secrets\" ]] \u0026\u0026 /custom-tools/helm-v3 plugin install https://github.com/jkroepke/helm-secrets --version ${HELM_SECRETS_VERSION}\n    chown -R 999:999 \"${HELM_DATA_HOME}\"\n\n# lastly, in your app definition\n...\nplugin:\n  env:\n  - name: HELM_DATA_HOME\n    value: /home/argocd/.local/share/helm\n```\n\nIf the above is not possible/desired, the recommended approach would be to use\n`HELMFILE_INIT_SCRIPT_FILE` to execute an arbitrary script during the `init`\nphase. Within the script it's desireable to run `helm plugin list` and only\ninstall the plugin only if it's not already installed.\n\n## Custom Init\n\nYou can use the `HELMFILE_INIT_SCRIPT_FILE` feature to do any kind of _init_\nlogic required including installing helm plugins, downloading external files,\netc. The value can be a relative or absolute path and the file itself can be\ninjected using an `initContainers` or stored in the application git repository.\n\n# Development\n\n```\n# format before commit\nshfmt -i 2 -ci -w src/argo-cd-helmfile.sh\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumbrellio%2Fargo-cd-helmfile","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fumbrellio%2Fargo-cd-helmfile","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fumbrellio%2Fargo-cd-helmfile/lists"}