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
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
@@ -82,10 +82,8 @@ 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:
@@ -93,7 +91,7 @@ jobs:
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
+5 -7
View File
@@ -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
@@ -63,10 +63,8 @@ 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:
@@ -74,7 +72,7 @@ jobs:
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
@@ -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
@@ -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
+8 -3
View File
@@ -3,7 +3,7 @@ name: Release Helm chart
on:
push:
tags:
- "reloader-v2-chart-v*"
- "chart-v*"
permissions:
contents: write
@@ -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
+12 -2
View File
@@ -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
@@ -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:
@@ -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 }}
@@ -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
+4
View File
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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 }}
@@ -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:
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -24,7 +24,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
+3 -3
View File
@@ -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.
+4 -4
View File
@@ -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",
},
}
@@ -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",
},
}