A GitHub action to turn a GitHub project into a self-hosted Helm chart repo, using helm/chart-releaser CLI tool.
- A GitHub repo containing a directory with your Helm charts (default is a folder named /charts, if you want to maintain your charts in a different directory, you must include acharts_dirinput in the workflow).
- A GitHub branch called gh-pagesto store the published charts.
- In your repo, go to Settings/Pages. Change the SourceBranchtogh-pages.
- Create a workflow .ymlfile in your.github/workflowsdirectory. An example workflow is available below. For more information, reference the GitHub Help Documentation for Creating a workflow file
- version: The chart-releaser version to use (default: v1.6.0)
- config: Optional config file for chart-releaser. For more information on the config file, see the documentation
- charts_dir: The charts directory
- skip_packaging: This option, when populated, will skip the packaging step. This allows you to do more advanced packaging of your charts (for example, with the- helm packagecommand) before this action runs. This action will only handle the indexing and publishing steps.
- skip_existing: Skip package upload if release/tag already exists
- skip_upload: This option, when populated, will skip the upload step. This allows you to do more advanced uploading of your charts (for exemple with OCI based repositories) which doen't require the- index.yaml.
- mark_as_latest: When you set this to- false, it will mark the created GitHub release not as 'latest'.
- packages_with_index: When you set this to- true, it will upload chart packages directly into publishing branch.
- pages_branch: Name of the branch to be used to push the index and artifacts. (default to: gh-pages but it is not set in the action it is a default value for the chart-releaser binary)
- owner: The owner of the repository. This is used to create the GitHub release. If not set, the owner will be inferred from the repository URL.
- repo: The name of the repository. This is used to create the GitHub release. If not set, the repository will be inferred from the repository URL.
- commit: The commit sha or the branch to use for the release. If not set, the commit hash will be inferred from the GitHub Actions environment.
- workdir: The working directory where the action will be executed. Useful if you have multiple repository checkouts in your workflow.
- changed_charts: A comma-separated list of charts that were released on this run. Will be an empty string if no updates were detected, will be unset if- --skip_packagingis used: in the latter case your custom packaging step is responsible for setting its own outputs if you need them.
- chart_version: The version of the most recently generated charts; will be set even if no charts have been updated since the last run.
- CR_TOKEN(required): The GitHub token of this repository (- ${{ secrets.GITHUB_TOKEN }})
For more information on environment variables, see the documentation.
Create a workflow (eg: .github/workflows/release.yml):
name: Release Charts
on:
  push:
    branches:
      - main
jobs:
  release:
    # depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions
    # see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
    permissions:
      contents: write
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Configure Git
        run: |
          git config user.name "$GITHUB_ACTOR"
          git config user.email "[email protected]"
      - name: Install Helm
        uses: azure/setup-helm@v4
        env:
          GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
      - name: Run chart-releaser
        uses: helm/[email protected]
        env:
          CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"This uses @helm/chart-releaser-action to turn your GitHub project into a self-hosted Helm chart repo.
It does this – during every push to main – by checking each chart in your project, and whenever there's a new chart version, creates a corresponding GitHub release named for the chart version, adds Helm chart artifacts to the release, and creates or updates an index.yaml file with metadata about those releases, which is then hosted on GitHub Pages. You do not need an index.yaml file in main at all because it is managed in the gh-pages branch.
workflow.yml:
- name: Run chart-releaser
  uses: helm/[email protected]
  with:
    charts_dir: charts
    config: cr.yaml
  env:
    CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"cr.yaml:
owner: myaccount
git-base-url: https://api.github.com/For options see config-file.
Participation in the Helm community is governed by the Code of Conduct.