chart-releaser-action is a free, open source orchestration & scheduling project written in Shell and released under Apache-2.0. It has 667 GitHub stars, 222 forks and 79 open issues, and was last pushed 31 hours ago. On this registry it ranks #117 of 130 tracked projects in Orchestration & Scheduling, with 5 head-to-head comparisons available. It gained 1 stars over the last 30 tracked days.

What is chart-releaser-action?

chart-releaser-action is a GitHub Action that turns a GitHub repository into a self-hosted Helm chart repository by driving the helm/chart-releaser CLI tool, aimed at Kubernetes teams that publish Helm charts straight from GitHub Actions.

What it is

chart-releaser-action is a GitHub Action maintained under the helm organisation. On every run it inspects each chart in a repository, and whenever it finds a new chart version it creates a corresponding GitHub release named for that chart version, attaches the Helm chart artifacts to the release, and creates or updates an index.yaml file containing metadata about those releases. Together with a publishing branch such as gh-pages, that produces a Helm chart repository that users can add to their local Helm client, with GitHub Releases and GitHub Pages doing the hosting work instead of a dedicated chart server.

The concrete problem it solves is the manual bookkeeping that surrounds chart publishing inside the Helm and Kubernetes ecosystem. Instead of a maintainer packaging charts by hand, opening a release per version, uploading the .tgz artifacts, and hand-editing an index.yaml so clients see the new version, the action performs all three steps in CI. It replaces that hand-run sequence of the helm/chart-releaser CLI, which is the tool the action wraps and whose version the action pins.

Key capabilities

  • Accepts a charts_dir input for repositories that keep charts somewhere other than the default /charts directory.
  • Pins the underlying tool through the version input, which defaults to v1.7.0 of chart-releaser, and accepts an optional config file through the config input.
  • Exposes skip_packaging, which stops at indexing and publishing so a preceding custom helm package step owns packaging.
  • Exposes skip_upload for OCI-based repositories that do not use an index.yaml file.
  • Exposes skip_existing to skip a package upload when the release or tag already exists, and packages_with_index to upload chart packages directly into the publishing branch.
  • Sets the publishing branch through pages_branch, defaulting to gh-pages, and can mark a created GitHub release as not latest with mark_as_latest set to false.
  • Emits the outputs changed_charts, a comma-separated list of charts released on the run, and chart_version, the version of the most recently generated chart.
  • Requires the environment variable CR_TOKEN, normally supplied as the built-in GitHub token.

Who uses it and how

  • Teams that trigger a release workflow on every push to main, using actions/checkout with fetch-depth: 0 so full history and tags are available.
  • Repositories that keep charts under /charts and publish to a gh-pages branch, with Settings/Pages configured so the source branch is gh-pages.
  • Workflows that grant contents: write to the GitHub token, because the action creates releases and pushes to the publishing branch.
  • Pipelines with advanced packaging needs, which run helm package beforehand and then call the action with skip_packaging set so it only indexes and publishes.
  • Publishing setups that target OCI-based registries and therefore set skip_upload, or that consume the changed_charts output to trigger follow-on jobs.

Getting started

Add a workflow file such as .github/workflows/release.yml and use helm/chart-releaser-action@v1.7.0 as a step, passing CR_TOKEN set to the repository's GITHUB_TOKEN secret and granting the job contents: write permissions.

How it compares

No paid products are listed as targets of this action, so the meaningful comparison is with the tools the facts already name. It sits alongside helm/chart-releaser as a GitHub Actions wrapper rather than a replacement, since the CLI does the packaging, indexing, and uploading work, and it sits alongside helm package and OCI-based repositories as one publishing route among the options those mechanisms support.

When to use it — and when not to

Choose it when charts live in a GitHub repository and GitHub Releases plus a publishing branch are an acceptable home for them, because the action depends on a gh-pages-style branch, a Pages source setting, and a token with write access. Do not choose it for non-GitHub forges or for teams that need a registry-native workflow, since skip_upload exists precisely because OCI-based repositories do not consume index.yaml. Note also that the project carries 79 open issues and delegates most behaviour to the chart-releaser version pinned in the version input, so upgrades of that tool are the place to look when publishing behaviour changes.

project readme (upstream, from github) — read inline

chart-releaser Action

A GitHub action to turn a GitHub project into a self-hosted Helm chart repo, using helm/chart-releaser CLI tool.

Usage

Pre-requisites

  1. 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 a charts_dir input in the workflow).
  2. A GitHub branch called gh-pages to store the published charts.
  3. In your repo, go to Settings/Pages. Change the Source Branch to gh-pages.
  4. Create a workflow .yml file in your .github/workflows directory. An example workflow is available below. For more information, reference the GitHub Help Documentation for Creating a workflow file

Inputs

  • version: The chart-releaser version to use (default: v1.7.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 package command) 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)

Outputs

  • 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_packaging is 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.

Environment variables

  • CR_TOKEN (required): The GitHub token of this repository (${{ secrets.GITHUB_TOKEN }})

For more information on environment variables, see the documentation.

Example Workflow

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@v4
        with:
          fetch-depth: 0

      - name: Configure Git
        run: |
          git config user.name "$GITHUB_ACTOR"
          git config user.email "$GITHUB_ACTOR@users.noreply.github.com"

      - name: Run chart-releaser
        uses: helm/chart-releaser-action@v1.7.0
        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.

Example using custom config

workflow.yml:

- name: Run chart-releaser
  uses: helm/chart-releaser-action@v1.7.0
  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.

Code of conduct

Participation in the Helm community is governed by the Code of Conduct.

Frequently asked questions

Is chart-releaser-action free to use?

chart-releaser-action is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does chart-releaser-action do?

A GitHub Action to turn a GitHub project into a self-hosted Helm chart repo, using helm/chart-releaser CLI tool

What is chart-releaser-action written in?

chart-releaser-action is primarily written in Shell. Its source is publicly available at https://github.com/helm/chart-releaser-action, and it has 667 GitHub stars.