setup for reloader chart 3.0.0-beta.1

This commit is contained in:
Safwan
2026-08-04 20:20:10 +05:00
parent 7a94f29a71
commit 121c19450a
14 changed files with 91 additions and 42 deletions
+3 -5
View File
@@ -73,7 +73,7 @@ jobs:
- name: Get version for chart from helm repo - name: Get version for chart from helm repo
id: chart_eval id: chart_eval
run: | 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 echo "CURRENT_CHART_VERSION=$(echo ${current_chart_version})" >> $GITHUB_OUTPUT
- name: Get Updated Chart version from Chart.yaml - name: Get Updated Chart version from Chart.yaml
@@ -82,10 +82,8 @@ jobs:
with: with:
cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml
# Skip the version-increase gate on first publish, when no reloader-v2 # --devel above includes prereleases so beta bumps are still gated.
# chart exists yet in the repo (CURRENT_CHART_VERSION is empty).
- name: Check Version - name: Check Version
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != ''
uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1 uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1
id: check-version id: check-version
with: with:
@@ -93,7 +91,7 @@ jobs:
previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }} previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }}
- name: Fail if Helm Chart version isnt updated - 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: | run: |
echo "Helm Chart Version wasnt updated" echo "Helm Chart Version wasnt updated"
exit 1 exit 1
+5 -7
View File
@@ -54,7 +54,7 @@ jobs:
- name: Get version for chart from helm repo - name: Get version for chart from helm repo
id: chart_eval id: chart_eval
run: | 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 echo "CURRENT_CHART_VERSION=$(echo ${current_chart_version})" >> $GITHUB_OUTPUT
- name: Get Updated Chart version from Chart.yaml - name: Get Updated Chart version from Chart.yaml
@@ -63,10 +63,8 @@ jobs:
with: with:
cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml cmd: yq e '.version' deployments/kubernetes/chart/reloader/Chart.yaml
# Skip the version-increase gate on first publish, when no reloader-v2 # --devel above includes prereleases so beta bumps are still gated.
# chart exists yet in the repo (CURRENT_CHART_VERSION is empty).
- name: Check Version - name: Check Version
if: steps.chart_eval.outputs.CURRENT_CHART_VERSION != ''
uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1 uses: aleoyakas/check-semver-increased-action@415c9c60054c2442c03478b6dd96a195deac6695 # v1
id: check-version id: check-version
with: with:
@@ -74,7 +72,7 @@ jobs:
previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }} previous-version: ${{ steps.chart_eval.outputs.CURRENT_CHART_VERSION }}
- name: Fail if Helm Chart version isnt updated - 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: | run: |
echo "Helm Chart Version wasnt updated" echo "Helm Chart Version wasnt updated"
exit 1 exit 1
@@ -99,7 +97,7 @@ jobs:
rm -rf ./packaged-chart rm -rf ./packaged-chart
- name: Sign artifacts with Cosign - 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 - name: Publish Helm chart to gh-pages
uses: stefanprodan/helm-gh-pages@0ad2bb377311d61ac04ad9eb6f252fb68e207260 # v1.7.0 uses: stefanprodan/helm-gh-pages@0ad2bb377311d61ac04ad9eb6f252fb68e207260 # v1.7.0
@@ -120,7 +118,7 @@ jobs:
env: env:
GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }} GITHUB_TOKEN: ${{ secrets.PUBLISH_TOKEN }}
WITH_V: false 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 - name: Notify Slack
uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3 uses: 8398a7/action-slack@77eaa4f1c608a7d68b38af4e3f739dcd8cba273e # v3
+8 -3
View File
@@ -3,7 +3,7 @@ name: Release Helm chart
on: on:
push: push:
tags: tags:
- "reloader-v2-chart-v*" - "chart-v*"
permissions: permissions:
contents: write contents: write
@@ -22,11 +22,16 @@ jobs:
- name: Create release - name: Create release
env: env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
tag: ${{ github.ref }} tag: ${{ github.ref_name }}
run: | 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" \ gh release create "$tag" \
--repo="$GITHUB_REPOSITORY" \ --repo="$GITHUB_REPOSITORY" \
--title="Helm chart reloader-v2 ${tag#reloader-v2-chart-v}" \ --title="Helm chart reloader ${tag#chart-v}" \
$prerelease \
--generate-notes --generate-notes
- name: Notify Slack - name: Notify Slack
+12 -2
View File
@@ -77,7 +77,15 @@ jobs:
- name: Get Tag from Github Ref - name: Get Tag from Github Ref
id: generate_tag 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 - name: Create timestamp
id: prep id: prep
@@ -149,6 +157,8 @@ jobs:
# v2 branch: publish a floating `v2` tag instead of `latest` so v2 # v2 branch: publish a floating `v2` tag instead of `latest` so v2
# releases never overwrite the v1 `latest` tag used by plain manifests. # 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 - name: Build and Push Docker Image to ghcr registry
uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6 uses: docker/build-push-action@10e90e3645eae34f1e60eeb005ba3a3d33f178e8 # v6
with: with:
@@ -158,7 +168,7 @@ jobs:
push: true push: true
platforms: linux/amd64,linux/arm,linux/arm64 platforms: linux/amd64,linux/arm,linux/arm64
tags: | 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: | build-args: |
VERSION=${{ steps.generate_tag.outputs.RELEASE_VERSION }} VERSION=${{ steps.generate_tag.outputs.RELEASE_VERSION }}
COMMIT=${{ github.sha }} COMMIT=${{ github.sha }}
@@ -9,6 +9,9 @@ permissions: {}
jobs: jobs:
dispatch: 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 runs-on: ubuntu-latest
steps: steps:
- name: Trigger target repository workflow - name: Trigger target repository workflow
+4
View File
@@ -27,5 +27,9 @@ checksum:
changelog: changelog:
# It will be generated manually as part of making a new GitHub release # It will be generated manually as part of making a new GitHub release
disable: true 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: env_files:
github_token: /home/jenkins/.apitoken/hub github_token: /home/jenkins/.apitoken/hub
@@ -1,8 +1,8 @@
apiVersion: v2 apiVersion: v2
name: reloader-v2 name: reloader
description: Reloader chart that runs on kubernetes description: Reloader chart that runs on kubernetes
version: 2.0.0 version: 3.0.0-beta.1
appVersion: v2.0.0 appVersion: v2.0.0-beta.1
keywords: keywords:
- Reloader - Reloader
- kubernetes - kubernetes
@@ -4,19 +4,28 @@ If you have configured helm on your cluster, you can add Reloader to helm from o
## Installation ## 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 ```bash
# Add stakater helm repoository # Add stakater helm repoository
helm repo add stakater https://stakater.github.io/stakater-charts helm repo add stakater https://stakater.github.io/stakater-charts
helm repo update 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 ## Uninstalling
@@ -39,7 +48,7 @@ helm uninstall {{RELEASE_NAME}} -n {{NAMESPACE}}
| ------------------ | ---------------------------------------- | ------ | ----------------- | | ------------------ | ---------------------------------------- | ------ | ----------------- |
| `nameOverride` | replace the name of the chart | string | `""` | | `nameOverride` | replace the name of the chart | string | `""` |
| `fullnameOverride` | replace the generated name | 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 ### Core Reloader Parameters
@@ -80,13 +80,14 @@ spec:
{{- toYaml . | nindent 8 }} {{- toYaml . | nindent 8 }}
{{- end }} {{- end }}
containers: containers:
{{- $imageTag := .Values.image.tag | default .Chart.AppVersion }}
{{- if .Values.global.imageRegistry }} {{- if .Values.global.imageRegistry }}
- image: "{{ .Values.global.imageRegistry }}/{{ .Values.image.name }}:{{ .Values.image.tag }}" - image: "{{ .Values.global.imageRegistry }}/{{ .Values.image.name }}:{{ $imageTag }}"
{{- else }} {{- else }}
{{- if .Values.image.digest }} {{- if .Values.image.digest }}
- image: "{{ .Values.image.repository }}@{{ .Values.image.digest }}" - image: "{{ .Values.image.repository }}@{{ .Values.image.digest }}"
{{- else }} {{- else }}
- image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}" - image: "{{ .Values.image.repository }}:{{ $imageTag }}"
{{- end }} {{- end }}
{{- end }} {{- end }}
imagePullPolicy: {{ .Values.image.pullPolicy }} imagePullPolicy: {{ .Values.image.pullPolicy }}
@@ -2,21 +2,41 @@ suite: Enterprise image swap
templates: templates:
- deployment.yaml - deployment.yaml
tests: tests:
# Tag is asserted by pattern, not literal, so a release bump does not churn tests.
- it: uses the community image by default - 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: asserts:
- equal: - equal:
path: spec.template.spec.containers[0].image 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 # The operator image is swapped manually via image.*; enterprise.enabled only
# toggles the subchart and must NOT change the operator image on its own. # toggles the subchart and must NOT change the operator image on its own.
- it: enterprise.enabled alone does not change the operator image - it: enterprise.enabled alone does not change the operator image
set: set:
enterprise: enterprise:
enabled: true enabled: true
image:
tag: pinned-tag
asserts: asserts:
- equal: - equal:
path: spec.template.spec.containers[0].image 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 - it: uses the enterprise image when the image block is overridden
set: set:
image: image:
@@ -82,7 +82,7 @@ tests:
of: RoleBinding of: RoleBinding
- equal: - equal:
path: roleRef.name path: roleRef.name
value: reloader-reloader-v2-role value: reloader-reloader-role
- equal: - equal:
path: subjects[0].namespace path: subjects[0].namespace
value: reloader-ns value: reloader-ns
@@ -97,7 +97,7 @@ tests:
template: role.yaml template: role.yaml
documentSelector: documentSelector:
path: metadata.name path: metadata.name
value: reloader-reloader-v2-metadata-role value: reloader-reloader-metadata-role
asserts: asserts:
- equal: - equal:
path: metadata.namespace path: metadata.namespace
@@ -119,7 +119,7 @@ tests:
template: role.yaml template: role.yaml
documentSelector: documentSelector:
path: metadata.name path: metadata.name
value: reloader-reloader-v2-metadata-role value: reloader-reloader-metadata-role
asserts: asserts:
- contains: - contains:
path: rules path: rules
@@ -143,7 +143,7 @@ tests:
template: role.yaml template: role.yaml
documentSelector: documentSelector:
path: metadata.name path: metadata.name
value: reloader-reloader-v2-metadata-role value: reloader-reloader-metadata-role
asserts: asserts:
- notContains: - notContains:
path: rules path: rules
@@ -194,7 +194,7 @@ tests:
template: role.yaml template: role.yaml
- equal: - equal:
path: metadata.name path: metadata.name
value: reloader-reloader-v2-metadata-role value: reloader-reloader-metadata-role
template: role.yaml template: role.yaml
documentIndex: 0 documentIndex: 0
@@ -24,7 +24,8 @@ fullnameOverride: ""
image: image:
name: stakater/reloader name: stakater/reloader
repository: ghcr.io/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 # digest: sha256:1234567
pullPolicy: IfNotPresent pullPolicy: IfNotPresent
+3 -3
View File
@@ -207,10 +207,10 @@ func ReloaderDeploymentName(releaseName string) string {
if releaseName == "" { if releaseName == "" {
releaseName = DefaultHelmReleaseName releaseName = DefaultHelmReleaseName
} }
// The chart is named "reloader-v2", so the fullname template renders // The chart is named "reloader", so the fullname template renders
// <release>-reloader-v2. Keep this the single source of truth; the // <release>-reloader. Keep this the single source of truth; the
// cluster-role and pod-selector helpers derive their names from it. // 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. // ReloaderPodSelector returns the label selector for Reloader pods.
+4 -4
View File
@@ -124,12 +124,12 @@ func TestReloaderDeploymentName(t *testing.T) {
{ {
name: "default release name", name: "default release name",
releaseName: "", releaseName: "",
expected: "reloader-reloader-v2", expected: "reloader-reloader",
}, },
{ {
name: "custom release name", name: "custom release name",
releaseName: "my-reloader", releaseName: "my-reloader",
expected: "my-reloader-reloader-v2", expected: "my-reloader-reloader",
}, },
} }
@@ -152,12 +152,12 @@ func TestReloaderPodSelector(t *testing.T) {
{ {
name: "default release name", name: "default release name",
releaseName: "", releaseName: "",
expected: "app=reloader-reloader-v2", expected: "app=reloader-reloader",
}, },
{ {
name: "custom release name", name: "custom release name",
releaseName: "my-reloader", releaseName: "my-reloader",
expected: "app=my-reloader-reloader-v2", expected: "app=my-reloader-reloader",
}, },
} }