Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .github/workflows/pull_request-helm.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@ jobs:
- name: Get version for chart from helm repo
id: chart_eval
run: |
current_chart_version=$(helm search repo stakater/reloader-v2 | tail -n 1 | awk '{print $2}')
current_chart_version=$(helm search repo stakater/reloader --devel | tail -n 1 | awk '{print $2}')
echo "CURRENT_CHART_VERSION=$(echo ${current_chart_version})" >> $GITHUB_OUTPUT

- name: Get Updated Chart version from Chart.yaml
Expand All @@ -82,18 +82,16 @@ jobs:
with:
cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml

# Skip the version-increase gate on first publish, when no reloader-v2
# chart exists yet in the repo (CURRENT_CHART_VERSION is empty).
# --devel above includes prereleases so beta bumps are still gated.
- name: Check Version
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != ''
uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1
id: check-version
with:
current-version: ${{ steps.new_chart_version.outputs.result }}
previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }}

- name: Fail if Helm Chart version isnt updated
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != '' && steps.check-version.outputs.is-version-increased != 'true'
if: steps.check-version.outputs.is-version-increased != 'true'
run: |
echo "Helm Chart Version wasnt updated"
exit 1
12 changes: 5 additions & 7 deletions .github/workflows/push-helm-chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@ jobs:
- name: Get version for chart from helm repo
id: chart_eval
run: |
current_chart_version=$(helm search repo stakater/reloader-v2 | tail -n 1 | awk '{print $2}')
current_chart_version=$(helm search repo stakater/reloader --devel | tail -n 1 | awk '{print $2}')
echo "CURRENT_CHART_VERSION=$(echo ${current_chart_version})" >> $GITHUB_OUTPUT

- name: Get Updated Chart version from Chart.yaml
Expand All @@ -63,18 +63,16 @@ jobs:
with:
cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml

# Skip the version-increase gate on first publish, when no reloader-v2
# chart exists yet in the repo (CURRENT_CHART_VERSION is empty).
# --devel above includes prereleases so beta bumps are still gated.
- name: Check Version
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != ''
uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1
id: check-version
with:
current-version: ${{ steps.new_chart_version.outputs.result }}
previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }}

- name: Fail if Helm Chart version isnt updated
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != '' && steps.check-version.outputs.is-version-increased != 'true'
if: steps.check-version.outputs.is-version-increased != 'true'
run: |
echo "Helm Chart Version wasnt updated"
exit 1
Expand All @@ -99,7 +97,7 @@ jobs:
rm -rf ./packaged-chart

- name: Sign artifacts with Cosign
run: cosign sign --yes ghcr.io/stakater/charts/reloader-v2:${{ steps.new_chart_version.outputs.result }}
run: cosign sign --yes ghcr.io/stakater/charts/reloader:${{ steps.new_chart_version.outputs.result }}

- name: Publish Helm chart to gh-pages
uses: stefanprodan/helm-gh-pages@0ad2bb377311d61ac04ad9eb6f252fb68e207260 # v1.7.0
Expand All @@ -120,7 +118,7 @@ jobs:
env:
GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
WITH_V: false
CUSTOM_TAG: reloader-v2-chart-v${{ steps.new_chart_version.outputs.result }}
CUSTOM_TAG: chart-v${{ steps.new_chart_version.outputs.result }}

- name: Notify Slack
uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3
Expand Down
11 changes: 8 additions & 3 deletions .github/workflows/release-helm-chart.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name: Release Helm chart
on:
push:
tags:
- "reloader-v2-chart-v*"
- "chart-v*"

permissions:
contents: write
Expand All @@ -22,11 +22,16 @@ jobs:
- name: Create release
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref }}
tag: ${{ github.ref_name }}
run: |
# Mark prerelease chart versions (e.g. chart-v3.0.0-beta.1) so they
# don't show up as the repo's latest release.
prerelease=""
case "${tag#chart-v}" in *-*) prerelease="--prerelease" ;; esac
gh release create "$tag" \
--repo="$GITHUB_REPOSITORY" \
--title="Helm chart reloader-v2 ${tag#reloader-v2-chart-v}" \
--title="Helm chart reloader ${tag#chart-v}" \
$prerelease \
--generate-notes

- name: Notify Slack
Expand Down
14 changes: 12 additions & 2 deletions .github/workflows/release.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,15 @@ jobs:

- name: Get Tag from Github Ref
id: generate_tag
run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_OUTPUT
run: |
RELEASE_VERSION=${GITHUB_REF#refs/*/}
echo "RELEASE_VERSION=${RELEASE_VERSION}" >> $GITHUB_OUTPUT
# A '-' marks a SemVer prerelease (e.g. v2.0.0-beta.1). Only stable
# releases are allowed to move the floating `v2` tag.
case "$RELEASE_VERSION" in
*-*) echo "IS_PRERELEASE=true" >> $GITHUB_OUTPUT ;;
*) echo "IS_PRERELEASE=false" >> $GITHUB_OUTPUT ;;
esac

- name: Create timestamp
id: prep
Expand Down Expand Up @@ -149,6 +157,8 @@ jobs:

# v2 branch: publish a floating `v2` tag instead of `latest` so v2
# releases never overwrite the v1 `latest` tag used by plain manifests.
# Prereleases publish only their exact version, so `v2` always points at
# the newest stable v2 build and never at a beta.
- name: Build and Push Docker Image to ghcr registry
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with:
Expand All @@ -158,7 +168,7 @@ jobs:
push: true
platforms: linux/amd64,linux/arm,linux/arm64
tags: |
${{ env.GHCR_IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.RELEASE_VERSION }},${{ env.GHCR_IMAGE_REPOSITORY }}:v2
${{ env.GHCR_IMAGE_REPOSITORY }}:${{ steps.generate_tag.outputs.RELEASE_VERSION }}${{ steps.generate_tag.outputs.IS_PRERELEASE == 'false' && format(',{0}:v2', env.GHCR_IMAGE_REPOSITORY) || '' }}
build-args: |
VERSION=${{ steps.generate_tag.outputs.RELEASE_VERSION }}
COMMIT=${{ github.sha }}
Expand Down
3 changes: 3 additions & 0 deletions .github/workflows/reloader-enterprise-published.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,9 @@ permissions: {}

jobs:
dispatch:
# Skip prereleases (betas) and chart releases; only stable operator
# releases should trigger the enterprise build.
if: ${{ !github.event.release.prerelease && !startsWith(github.event.release.tag_name, 'chart-v') }}
runs-on: ubuntu-latest
steps:
- name: Trigger target repository workflow
Expand Down
4 changes: 4 additions & 0 deletions .goreleaser.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,9 @@ checksum:
changelog:
# It will be generated manually as part of making a new GitHub release
disable: true
release:
# Tags with a SemVer prerelease suffix (e.g. v2.0.0-beta.1) are published as
# GitHub prereleases so they never become the repo's "Latest" release.
prerelease: auto
env_files:
github_token: /home/jenkins/.apitoken/hub
6 changes: 3 additions & 3 deletions deployments/kubernetes/chart/reloader/Chart.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
apiVersion: v2
name: reloader-v2
name: reloader
description: Reloader chart that runs on kubernetes
version: 2.0.0
appVersion: v2.0.0
version: 3.0.0-beta.1
appVersion: v2.0.0-beta.1
keywords:
- Reloader
- kubernetes
Expand Down
19 changes: 14 additions & 5 deletions deployments/kubernetes/chart/reloader/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,28 @@ If you have configured helm on your cluster, you can add Reloader to helm from o

## Installation

> **Reloader v2 is currently a prerelease.** The commands below resolve to the
> latest *stable* chart, which is still Reloader v1. To install the v2 beta you
> must opt in explicitly, because Helm skips prerelease versions by default:
>
> ```bash
> # --devel picks up the newest prerelease; add --version to pin a specific beta
> helm install {{RELEASE_NAME}} stakater/reloader --devel
> ```

```bash
# Add stakater helm repoository
helm repo add stakater https://stakater.github.io/stakater-charts

helm repo update

helm install stakater/reloader-v2 # For helm3 add --generate-name flag or set the release name
helm install stakater/reloader # For helm3 add --generate-name flag or set the release name

helm install {{RELEASE_NAME}} stakater/reloader-v2 -n {{NAMESPACE}} --set reloader.watchGlobally=false # By default, Reloader watches in all namespaces. To watch in single namespace, set watchGlobally=false
helm install {{RELEASE_NAME}} stakater/reloader -n {{NAMESPACE}} --set reloader.watchGlobally=false # By default, Reloader watches in all namespaces. To watch in single namespace, set watchGlobally=false

helm install stakater/reloader-v2 --set reloader.watchGlobally=false --namespace test --generate-name # Install Reloader in `test` namespace which will only watch `Deployments`, `Daemonsets` `Statefulsets` and `Rollouts` in `test` namespace.
helm install stakater/reloader --set reloader.watchGlobally=false --namespace test --generate-name # Install Reloader in `test` namespace which will only watch `Deployments`, `Daemonsets` `Statefulsets` and `Rollouts` in `test` namespace.

helm install stakater/reloader-v2 --set reloader.ignoreJobs=true --set reloader.ignoreCronJobs=true --generate-name # Install Reloader ignoring Jobs and CronJobs from reload monitoring
helm install stakater/reloader --set reloader.ignoreJobs=true --set reloader.ignoreCronJobs=true --generate-name # Install Reloader ignoring Jobs and CronJobs from reload monitoring
```

## Uninstalling
Expand All @@ -39,7 +48,7 @@ helm uninstall {{RELEASE_NAME}} -n {{NAMESPACE}}
| ------------------ | ---------------------------------------- | ------ | ----------------- |
| `nameOverride` | replace the name of the chart | string | `""` |
| `fullnameOverride` | replace the generated name | string | `""` |
| `image` | Set container image name, tag and policy | map | `see values.yaml` |
| `image` | Set container image name, tag and policy. `image.tag` defaults to the chart `appVersion` when empty | map | `see values.yaml` |

### Core Reloader Parameters

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,13 +80,14 @@ spec:
{{- toYaml . | nindent 8 }}
{{- end }}
containers:
{{- $imageTag := .Values.image.tag | default .Chart.AppVersion }}
{{- if .Values.global.imageRegistry }}
- image: "{{ .Values.global.imageRegistry }}/{{ .Values.image.name }}:{{ .Values.image.tag }}"
- image: "{{ .Values.global.imageRegistry }}/{{ .Values.image.name }}:{{ $imageTag }}"
{{- else }}
{{- if .Values.image.digest }}
- image: "{{ .Values.image.repository }}@{{ .Values.image.digest }}"
{{- else }}
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
- image: "{{ .Values.image.repository }}:{{ $imageTag }}"
{{- end }}
{{- end }}
imagePullPolicy: {{ .Values.image.pullPolicy }}
Expand Down
24 changes: 22 additions & 2 deletions deployments/kubernetes/chart/reloader/tests/enterprise_test.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,41 @@ suite: Enterprise image swap
templates:
- deployment.yaml
tests:
# Tag is asserted by pattern, not literal, so a release bump does not churn tests.
- it: uses the community image by default
asserts:
- matchRegex:
path: spec.template.spec.containers[0].image
pattern: ^ghcr\.io/stakater/reloader:v[0-9]+\.[0-9]+\.[0-9]+
# An empty image.tag must fall back to Chart.yaml appVersion, never render "repo:".
- it: falls back to the chart appVersion when image.tag is empty
set:
image:
tag: ""
asserts:
- matchRegex:
path: spec.template.spec.containers[0].image
pattern: ^ghcr\.io/stakater/reloader:v[0-9]+\.[0-9]+\.[0-9]+
- it: prefers an explicit image.tag over the chart appVersion
set:
image:
tag: pinned-tag
asserts:
- equal:
path: spec.template.spec.containers[0].image
value: ghcr.io/stakater/reloader:v2.0.0
value: ghcr.io/stakater/reloader:pinned-tag
# The operator image is swapped manually via image.*; enterprise.enabled only
# toggles the subchart and must NOT change the operator image on its own.
- it: enterprise.enabled alone does not change the operator image
set:
enterprise:
enabled: true
image:
tag: pinned-tag
asserts:
- equal:
path: spec.template.spec.containers[0].image
value: ghcr.io/stakater/reloader:v2.0.0
value: ghcr.io/stakater/reloader:pinned-tag
- it: uses the enterprise image when the image block is overridden
set:
image:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ tests:
of: RoleBinding
- equal:
path: roleRef.name
value: reloader-reloader-v2-role
value: reloader-reloader-role
- equal:
path: subjects[0].namespace
value: reloader-ns
Expand All @@ -97,7 +97,7 @@ tests:
template: role.yaml
documentSelector:
path: metadata.name
value: reloader-reloader-v2-metadata-role
value: reloader-reloader-metadata-role
asserts:
- equal:
path: metadata.namespace
Expand All @@ -119,7 +119,7 @@ tests:
template: role.yaml
documentSelector:
path: metadata.name
value: reloader-reloader-v2-metadata-role
value: reloader-reloader-metadata-role
asserts:
- contains:
path: rules
Expand All @@ -143,7 +143,7 @@ tests:
template: role.yaml
documentSelector:
path: metadata.name
value: reloader-reloader-v2-metadata-role
value: reloader-reloader-metadata-role
asserts:
- notContains:
path: rules
Expand Down Expand Up @@ -194,7 +194,7 @@ tests:
template: role.yaml
- equal:
path: metadata.name
value: reloader-reloader-v2-metadata-role
value: reloader-reloader-metadata-role
template: role.yaml
documentIndex: 0

Expand Down
13 changes: 8 additions & 5 deletions deployments/kubernetes/chart/reloader/values.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,12 @@ global:
#imagePullSecrets:
# - my-pull-secret

## Required when enterprise.enabled=true (shared with the enterprise subchart)
consoleHost: ""
gatewayHost: ""
gatewayScheme: https
## Required when enterprise.enabled=true (shared with the enterprise subchart).
## The console and the gateway share this one hostname and are told apart by
## path: console at /, gateway at gatewayBasePath.
host: ""
gatewayBasePath: /gateway
ingressScheme: https

kubernetes:
host: https://kubernetes.default
Expand All @@ -24,7 +26,8 @@ fullnameOverride: ""
image:
name: stakater/reloader
repository: ghcr.io/stakater/reloader
tag: v2.0.0
# Defaults to Chart.yaml appVersion, so a release only needs to bump appVersion.
tag: ""
# digest: sha256:1234567
pullPolicy: IfNotPresent

Expand Down
6 changes: 3 additions & 3 deletions test/e2e/utils/helm.go
Original file line number Diff line number Diff line change
Expand Up @@ -207,10 +207,10 @@ func ReloaderDeploymentName(releaseName string) string {
if releaseName == "" {
releaseName = DefaultHelmReleaseName
}
// The chart is named "reloader-v2", so the fullname template renders
// <release>-reloader-v2. Keep this the single source of truth; the
// The chart is named "reloader", so the fullname template renders
// <release>-reloader. Keep this the single source of truth; the
// cluster-role and pod-selector helpers derive their names from it.
return releaseName + "-reloader-v2"
return releaseName + "-reloader"
}

// ReloaderPodSelector returns the label selector for Reloader pods.
Expand Down
8 changes: 4 additions & 4 deletions test/e2e/utils/helm_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -124,12 +124,12 @@ func TestReloaderDeploymentName(t *testing.T) {
{
name: "default release name",
releaseName: "",
expected: "reloader-reloader-v2",
expected: "reloader-reloader",
},
{
name: "custom release name",
releaseName: "my-reloader",
expected: "my-reloader-reloader-v2",
expected: "my-reloader-reloader",
},
}

Expand All @@ -152,12 +152,12 @@ func TestReloaderPodSelector(t *testing.T) {
{
name: "default release name",
releaseName: "",
expected: "app=reloader-reloader-v2",
expected: "app=reloader-reloader",
},
{
name: "custom release name",
releaseName: "my-reloader",
expected: "app=my-reloader-reloader-v2",
expected: "app=my-reloader-reloader",
},
}

Expand Down
Loading