> ## Documentation Index
> Fetch the complete documentation index at: https://ngrok.com/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Kubernetes Operator Release Process

> Learn about the ngrok Kubernetes Operator release process including Docker images, Helm charts, and semantic versioning.

## Artifacts

The ngrok Kubernetes Operator has 2 main artifacts, a docker image and a helm chart.
While the helm chart is the recommended way to install the Operator, the
docker image can be used to run the Operator in a Kubernetes cluster without helm.

### Docker Image

The Docker image contains the ngrok Kubernetes Operator binary and is available on
Docker Hub [here](https://hub.docker.com/r/ngrok/ngrok-operator). The image currently
supports `amd64` and `arm64` architectures, with future plans to build for other architectures.

### Helm chart

The helm chart is packaged and published to its own [helm repository](https://charts.ngrok.com/index.yaml)

## Semantic versioning

This project uses [semantic versioning](https://semver.org/) for both the docker image
and helm chart.

From the [semver spec](https://semver.org/#spec-item-4):

> Major version zero (0.y.z) is for initial development. Anything MAY change at any time. The public API SHOULD NOT be considered stable.

That said, changes in "y" are treated as major releases and changes in "z" as minor releases until version 1.0 is reached.

## Release process

The Docker Image and Helm chart are released independently since a feature or bug fix in one
may not require a release in the other. Sometimes a change will require a version bump and
release in both.

### Tagging

There is a different git tag pattern for each artifact.

#### Helm chart

Releases of the helm chart will be tagged with a prefix of `helm-chart-`. For example, version `0.18.0`
of the helm chart will have a git tag of `helm-chart-0.18.0` which contains the code used to package
and publish version `0.18.0` of the helm chart.

When changes are made to the helm chart's `Chart.yaml` file, a github workflow will trigger upon
merging the PR to the `main` branch. The workflow will package and publish the helm chart for
consumption. The workflow will also create a git tag as described above.

When changing `version` in the helm chart's `Chart.yaml` file, the version should be bumped according
to the semantic versioning spec as described above.

#### Operator

Releases of the Operator will be tagged with a prefix of `ngrok-operator-`. For example,
version `0.15.0` of the docker image will have a git tag of `ngrok-operator-0.15.0` which
contains the code used to build the docker image `ngrok/ngrok-operator:0.15.0`.

When changes that would affect the Operator's docker image are pushed to `main`, a github workflow
will trigger. The workflow will build and publish the docker image with the versioned tag.

If the `VERSION` file at the root of the repo is changed, the workflow will also create a git tag
for the Operator as described above and publish a tagged docker image. For instance when the
`VERSION` is changed to `0.15.0`, the workflow will create a git tag of `ngrok-operator-0.15.0`
and publish the docker image `ngrok/ngrok-operator:0.15.0`.
