20 Commits

Author SHA1 Message Date
1cea601f10 chore(deps): update docker.io/volkerraschek/helm docker tag to v4
Some checks failed
Helm / helm-lint (push) Successful in 6s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (push) Failing after 14s
Helm / helm-unittest (pull_request) Failing after 5s
2025-11-12 23:12:03 +00:00
24799f602b Merge pull request 'chore(deps): update docker.io/volkerraschek/helm docker tag to v3.19.2' (#42) from renovate/update-docker.iovolkerraschekhelm into master
All checks were successful
Helm / helm-lint (push) Successful in 5s
Helm / helm-unittest (push) Successful in 7s
2025-11-12 21:22:51 +00:00
34f8a17689 chore(deps): update docker.io/volkerraschek/helm docker tag to v3.19.2
All checks were successful
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (pull_request) Successful in 5s
Helm / helm-unittest (pull_request) Successful in 6s
2025-11-12 21:21:34 +00:00
876cf24376 Merge pull request 'chore(deps): update docker.io/library/node docker tag to v24.11.1' (#41) from renovate/update-docker.iolibrarynode into master
All checks were successful
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (push) Successful in 15s
2025-11-12 20:12:33 +00:00
4ef9ba336f chore(deps): update docker.io/library/node docker tag to v24.11.1
All checks were successful
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (push) Successful in 14s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 6s
2025-11-12 20:12:08 +00:00
7bcda8878c Merge pull request 'chore(deps): update docker.io/curlimages/curl docker tag to v8.17.0' (#40) from renovate/container-images into master
All checks were successful
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 8s
Markdown linter / markdown-link-checker (push) Successful in 15s
Generate README / generate-parameters (push) Successful in 28s
Markdown linter / markdown-lint (push) Successful in 29s
2025-11-05 14:11:07 +00:00
a0d71677f6 chore(deps): update docker.io/curlimages/curl docker tag to v8.17.0
All checks were successful
Helm / helm-lint (push) Successful in 7s
Helm / helm-unittest (push) Successful in 7s
Markdown linter / markdown-link-checker (push) Successful in 17s
Generate README / generate-parameters (push) Successful in 42s
Markdown linter / markdown-lint (push) Successful in 8s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 7s
Markdown linter / markdown-link-checker (pull_request) Successful in 11s
Generate README / generate-parameters (pull_request) Successful in 31s
Markdown linter / markdown-lint (pull_request) Successful in 9s
2025-11-05 14:10:02 +00:00
d957d690d9 Merge pull request 'chore(deps): update docker.io/library/node docker tag to v24.11.0' (#39) from renovate/update-docker.iolibrarynode into master
All checks were successful
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 5s
2025-10-29 02:12:00 +00:00
52696ae471 chore(deps): update docker.io/library/node docker tag to v24.11.0
All checks were successful
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 6s
2025-10-29 02:11:25 +00:00
16a7fa16a9 Merge pull request 'chore(deps): update dependency volker.raschek/reposilite-charts to v1' (#38) from renovate/volker.raschek-reposilite-charts-1.x into master
All checks were successful
Generate README / generate-parameters (push) Successful in 10s
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 6s
Markdown linter / markdown-link-checker (push) Successful in 12s
Markdown linter / markdown-lint (push) Successful in 9s
2025-10-22 16:24:49 +00:00
19dc6b4aef chore(deps): update dependency volker.raschek/reposilite-charts to v1
All checks were successful
Generate README / generate-parameters (push) Successful in 10s
Generate README / generate-parameters (pull_request) Successful in 10s
Helm / helm-lint (push) Successful in 6s
Helm / helm-unittest (push) Successful in 6s
Helm / helm-lint (pull_request) Successful in 6s
Helm / helm-unittest (pull_request) Successful in 6s
Markdown linter / markdown-link-checker (push) Successful in 11s
Markdown linter / markdown-lint (push) Successful in 9s
Markdown linter / markdown-link-checker (pull_request) Successful in 12s
Markdown linter / markdown-lint (pull_request) Successful in 10s
2025-10-22 16:23:39 +00:00
0dd267a0df docs(README): add an ArgoCD application resource as an example
All checks were successful
Helm / helm-lint (push) Successful in 13s
Generate README / generate-parameters (push) Successful in 15s
Markdown linter / markdown-link-checker (push) Successful in 13s
Helm / helm-unittest (push) Successful in 15s
Markdown linter / markdown-lint (push) Successful in 9s
Release / publish-chart (push) Successful in 8s
2025-10-22 17:38:24 +02:00
d790cd3ec4 fix(secret): enforce basic auth credentials
This patch remove generation of a random string for the username and password of
the basic auth credentials.

The problem with the random generated basic auth credentials is, that this leads
to a new shasum of the secret. GitOps tools like ArgoCD detects a drift trigger
a rolling update.

To avoid this must now the basic auth credentials be defined to enable
prometheus metrics.
2025-10-22 17:14:53 +02:00
d2c329e1be docs(README): adapt jq expression to ignore reloader annotation
All checks were successful
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 15s
Markdown linter / markdown-link-checker (push) Successful in 31s
Markdown linter / markdown-lint (push) Successful in 29s
2025-10-21 22:32:23 +02:00
db5e38cef1 docs(README): adapt description of RespectIgnoreDifferences
All checks were successful
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 17s
Markdown linter / markdown-link-checker (push) Successful in 31s
Markdown linter / markdown-lint (push) Successful in 29s
2025-10-21 22:28:23 +02:00
1fe7bc604e docs(README): adjust highlighted text
All checks were successful
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 16s
Markdown linter / markdown-link-checker (push) Successful in 31s
Markdown linter / markdown-lint (push) Successful in 27s
2025-10-21 22:26:15 +02:00
fa43188e03 docs(README): add tip how to ignore stakater's reloader annotations
All checks were successful
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 15s
Markdown linter / markdown-link-checker (push) Successful in 32s
Markdown linter / markdown-lint (push) Successful in 29s
2025-10-21 22:22:26 +02:00
99ed88068a docs(README): add further jqPathExpressions if stakaters reloader is configured
All checks were successful
Generate README / generate-parameters (push) Successful in 29s
Helm / helm-lint (push) Successful in 16s
Helm / helm-unittest (push) Successful in 16s
Markdown linter / markdown-link-checker (push) Successful in 32s
Markdown linter / markdown-lint (push) Successful in 27s
2025-10-19 19:08:18 +02:00
95fd713da6 fix(renovate): update packageRule for helm-unittest/helm-unittest
All checks were successful
Helm / helm-unittest (push) Successful in 1m58s
Helm / helm-lint (push) Successful in 2m3s
2025-10-16 22:01:54 +02:00
671a635627 fix(renovate): update packageRule for helm-unittest/helm-unittest
All checks were successful
Helm / helm-unittest (push) Successful in 7s
Helm / helm-lint (push) Successful in 14s
2025-10-16 21:39:56 +02:00
14 changed files with 138 additions and 57 deletions

View File

@@ -15,7 +15,7 @@ on:
jobs:
generate-parameters:
container:
image: docker.io/library/node:24.10.0-alpine
image: docker.io/library/node:24.11.1-alpine
runs-on:
- ubuntu-latest
steps:

View File

@@ -13,7 +13,7 @@ on:
jobs:
helm-lint:
container:
image: docker.io/volkerraschek/helm:3.19.0
image: docker.io/volkerraschek/helm:4.0.0
runs-on:
- ubuntu-latest
steps:
@@ -28,7 +28,7 @@ jobs:
helm-unittest:
container:
image: docker.io/volkerraschek/helm:3.19.0
image: docker.io/volkerraschek/helm:4.0.0
runs-on:
- ubuntu-latest
steps:

View File

@@ -15,7 +15,7 @@ on:
jobs:
markdown-link-checker:
container:
image: docker.io/library/node:24.10.0-alpine
image: docker.io/library/node:24.11.1-alpine
runs-on:
- ubuntu-latest
steps:
@@ -31,7 +31,7 @@ jobs:
markdown-lint:
container:
image: docker.io/library/node:24.10.0-alpine
image: docker.io/library/node:24.11.1-alpine
runs-on:
- ubuntu-latest
steps:

View File

@@ -8,7 +8,7 @@ on:
jobs:
publish-chart:
container:
image: docker.io/volkerraschek/helm:3.19.0
image: docker.io/volkerraschek/helm:4.0.0
runs-on: ubuntu-latest
steps:
- name: Install packages via apk

View File

@@ -10,7 +10,7 @@ HELM_IMAGE_FULLY_QUALIFIED=${HELM_IMAGE_REGISTRY_HOST}/${HELM_IMAGE_REPOSITORY}:
# NODE_IMAGE
NODE_IMAGE_REGISTRY_HOST?=docker.io
NODE_IMAGE_REPOSITORY?=library/node
NODE_IMAGE_VERSION?=24.10.0-alpine # renovate: datasource=docker registryUrl=https://docker.io depName=docker.io/library/node packageName=library/node
NODE_IMAGE_VERSION?=24.11.1-alpine # renovate: datasource=docker registryUrl=https://docker.io depName=docker.io/library/node packageName=library/node
NODE_IMAGE_FULLY_QUALIFIED=${NODE_IMAGE_REGISTRY_HOST}/${NODE_IMAGE_REPOSITORY}:${NODE_IMAGE_VERSION}
# MISSING DOT

View File

@@ -16,10 +16,7 @@ Chapter [configuration and installation](#helm-configuration-and-installation) d
and use it to deploy the exporter. It also contains further configuration examples.
Furthermore, this helm chart contains unit tests to detect regressions and stabilize the deployment. Additionally, this
helm chart is tested for deployment scenarios with **ArgoCD**, but please keep in mind, that this chart supports the
*[Automatically Roll Deployment](https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments)*
concept of Helm, which can trigger unexpected rolling releases. Further configuration instructions are described in a
separate [chapter](#argocd).
helm chart is tested for deployment scenarios with **ArgoCD**.
## Helm: configuration and installation
@@ -40,7 +37,7 @@ version of the chart must be in sync with the `values.yaml`. Newer *minor* versi
versions can break something!
```bash
CHART_VERSION=0.3.0
CHART_VERSION=1.0.0
helm show values volker.raschek/reposilite --version "${CHART_VERSION}" > values.yaml
```
@@ -54,7 +51,7 @@ The helm chart also contains a persistent volume claim definition. It persistent
Use the `--set` argument to persist your data.
```bash
CHART_VERSION=0.3.0
CHART_VERSION=1.0.0
helm install --version "${CHART_VERSION}" reposilite volker.raschek/reposilite \
persistentVolumeClaim.enabled=true
```
@@ -75,7 +72,7 @@ connection problems.
> error.
```bash
CHART_VERSION=0.3.0
CHART_VERSION=1.0.0
helm install --version "${CHART_VERSION}" reposilite volker.raschek/reposilite \
--set 'deployment.reposilite.env[1].name=REPOSILITE_LOCAL_SSLENABLED' \
--set 'deployment.reposilite.env[1].value="true"' \
@@ -125,6 +122,20 @@ deployment:
secret.reloader.stakater.com/reload: "reposilite-tls"
```
If the application is rolled out using ArgoCD, a rolling update from stakater's
[reloader](https://github.com/stakater/Reloader) can lead to a drift. ArgoCD will attempt to restore the original state
with a rolling update. To avoid this, instead of a rolling update triggered by the reloader, a restart of the pod can be
initiated. Further information are available in the official
[README](https://github.com/stakater/Reloader?tab=readme-ov-file#4-%EF%B8%8F-workload-specific-rollout-strategy) of
stakater's reloader.
```diff
deployment:
annotations:
reloader.stakater.com/auto: "true"
+ reloader.stakater.com/rollout-strategy: "restart"
```
#### Network policies
Network policies can only take effect, when the used CNI plugin support network policies. The chart supports no custom
@@ -190,7 +201,7 @@ be set the credentials manually.
The following example enable Prometheus metrics with custom basic auth credentials:
```bash
CHART_VERSION=0.3.0
CHART_VERSION=1.0.0
helm install --version "${CHART_VERSION}" reposilite volker.raschek/reposilite \
--set 'prometheus.metrics.enabled=true' \
--set 'prometheus.metrics.basicAuthUsername=my-username' \
@@ -199,31 +210,51 @@ helm install --version "${CHART_VERSION}" reposilite volker.raschek/reposilite \
## ArgoCD
### Daily execution of rolling updates
### Example Application
The behavior whereby ArgoCD triggers a rolling update even though nothing appears to have changed often occurs in
connection with the helm concept `checksum/secret`, `checksum/configmap` or more generally, [Automatically Roll
Deployments](https://helm.sh/docs/howto/charts_tips_and_tricks/#automatically-roll-deployments).
An application resource for the Helm chart is defined below. It serves as an example for your own deployment.
The problem with combining this concept with ArgoCD is that ArgoCD re-renders the Helm chart every time. Even if the
content of the config map or secret has not changed, there may be minimal differences (e.g., whitespace, chart version,
Helm render order, different timestamps).
This changes the SHA256 hash, Argo sees a drift and trigger a rolling update of the deployment. Among other things, this
can lead to unnecessary notifications from ArgoCD.
To avoid this, the annotation with the shasum must be ignored. Below is a diff that adds the `Application` to ignore all
annotations with the prefix `checksum`.
```diff
```yaml
apiVersion: argoproj.io/v1alpha1
kind: Application
spec:
+ ignoreDifferences:
+ - group: apps/v1
+ kind: Deployment
+ jqPathExpressions:
+ - '.spec.template.metadata.annotations | with_entries(select(.key | startswith("checksum")))'
destination:
server: https://kubernetes.default.svc
namespace: reposilite
ignoreDifferences:
- group: apps
kind: Deployment
jqPathExpressions:
# When HPA is enabled, ensure that a modification of the replicas does not lead to a
# drift.
- '.spec.replicas'
# Ensure that changes of the annotations or environment variables added or modified by
# stakater's reloader does not lead to a drift.
- '.spec.template.metadata.annotations | with_entries(select(.key | startswith("reloader")))'
- '.spec.template.spec.containers[].env[] | select(.name | startswith("STAKATER_"))'
sources:
- repoURL: https://charts.cryptic.systems/volker.raschek
chart: reposilite
targetRevision: '0.*'
helm:
valueFiles:
- $values/values.yaml
releaseName: reposilite
syncPolicy:
automated:
prune: true
selfHeal: true
managedNamespaceMetadata:
annotations: {}
labels: {}
syncOptions:
- ApplyOutOfSyncOnly=true
- CreateNamespace=true
- FailOnSharedResource=false
- Replace=false
- RespectIgnoreDifferences=false
- ServerSideApply=true
- Validate=true
```
## Parameters
@@ -272,7 +303,7 @@ annotations with the prefix `checksum`.
| `deployment.pluginContainer.args` | Arguments passed to the plugin container. | `["--location","--fail","--max-time","60"]` |
| `deployment.pluginContainer.image.registry` | Image registry, eg. `docker.io`. | `docker.io` |
| `deployment.pluginContainer.image.repository` | Image repository, eg. `curlimages/curl`. | `curlimages/curl` |
| `deployment.pluginContainer.image.tag` | Custom image tag, eg. `0.1.0`. | `8.16.0` |
| `deployment.pluginContainer.image.tag` | Custom image tag, eg. `0.1.0`. | `8.17.0` |
| `deployment.pluginContainer.image.pullPolicy` | Image pull policy. | `IfNotPresent` |
| `deployment.priorityClassName` | PriorityClassName of the Reposilite deployment. | `""` |
| `deployment.replicas` | Number of replicas for the Reposilite deployment. | `1` |

View File

@@ -23,7 +23,9 @@
},
{
"customType": "regex",
"fileMatch": ["^README\\.md$"],
"fileMatch": [
"^README\\.md$"
],
"matchStrings": [
"CHART_VERSION=(?<currentValue>.*)"
],
@@ -31,6 +33,16 @@
"packageNameTemplate": "https://git.cryptic.systems/volker.raschek/reposilite-charts",
"datasourceTemplate": "git-tags",
"versioningTemplate": "semver"
},
{
"customType": "regex",
"datasourceTemplate": "github-releases",
"fileMatch": [
".vscode/settings\\.json$"
],
"matchStrings": [
"https:\\/\\/raw\\.githubusercontent\\.com\\/(?<depName>[^\\s]+?)\\/(?<currentValue>v[0-9.]+?)\\/schema\\/helm-testsuite\\.json"
]
}
],
"packageRules": [
@@ -41,6 +53,20 @@
"volkerraschek/helm"
]
},
{
"automerge": true,
"groupName": "Update helm plugin 'unittest'",
"matchDepNames": [
"helm-unittest/helm-unittest"
],
"matchDatasources": [
"github-releases"
],
"matchUpdateTypes": [
"minor",
"patch"
]
},
{
"groupName": "Update docker.io/library/node",
"matchDepNames": [

View File

@@ -14,6 +14,6 @@ metadata:
name: {{ include "reposilite.secrets.prometheusBasicAuth.name" . }}
namespace: {{ .Release.Namespace }}
stringData:
password: {{ default (randAlphaNum 16) .Values.prometheus.metrics.secret.new.basicAuthPassword }}
username: {{ default (randAlphaNum 16) .Values.prometheus.metrics.secret.new.basicAuthUsername }}
password: {{ required "Password for basic auth is required!" .Values.prometheus.metrics.secret.new.basicAuthPassword }}
username: {{ required "Username for basic auth is required!" .Values.prometheus.metrics.secret.new.basicAuthUsername }}
{{- end }}

View File

@@ -13,6 +13,8 @@ tests:
set:
prometheus.metrics.enabled: true
prometheus.metrics.podMonitor.enabled: true
prometheus.metrics.secret.new.basicAuthPassword: "my-password"
prometheus.metrics.secret.new.basicAuthUsername: "my-username"
asserts:
- exists:
path: spec.template.metadata.annotations.checksum/secret-reposilite-unittest-basic-auth-credentials

View File

@@ -13,6 +13,8 @@ tests:
set:
prometheus.metrics.enabled: true
prometheus.metrics.serviceMonitor.enabled: true
prometheus.metrics.secret.new.basicAuthPassword: "my-password"
prometheus.metrics.secret.new.basicAuthUsername: "my-username"
asserts:
- exists:
path: spec.template.metadata.annotations.checksum/secret-reposilite-unittest-basic-auth-credentials

View File

@@ -13,9 +13,29 @@ tests:
- hasDocuments:
count: 0
- it: Throw error for missing basic auth password
set:
prometheus.metrics.enabled: true
# prometheus.metrics.secret.new.basicAuthPassword: "my-password"
prometheus.metrics.secret.new.basicAuthUsername: "my-username"
asserts:
- failedTemplate:
errorMessage: "Password for basic auth is required!"
- it: Throw error for missing basic auth username
set:
prometheus.metrics.enabled: true
prometheus.metrics.secret.new.basicAuthPassword: "my-password"
# prometheus.metrics.secret.new.basicAuthUsername: "my-username"
asserts:
- failedTemplate:
errorMessage: "Username for basic auth is required!"
- it: Rendering secret with default values.
set:
prometheus.metrics.enabled: true
prometheus.metrics.secret.new.basicAuthPassword: "my-password"
prometheus.metrics.secret.new.basicAuthUsername: "my-username"
asserts:
- hasDocuments:
count: 1
@@ -51,13 +71,13 @@ tests:
asserts:
- hasDocuments:
count: 1
- exists:
- isSubset:
path: metadata.annotations
value:
content:
foo: bar
- exists:
- isSubset:
path: metadata.labels
value:
content:
bar: foo
- equal:
path: metadata.name

View File

@@ -53,13 +53,13 @@ tests:
asserts:
- hasDocuments:
count: 1
- exists:
- isSubset:
path: metadata.annotations
value:
content:
foo: bar
- exists:
- isSubset:
path: metadata.labels
value:
content:
bar: foo
- equal:
path: metadata.name

View File

@@ -92,7 +92,7 @@ tests:
service.scheme: ""
asserts:
- failedTemplate:
errorMessage: No service scheme defined!
errorMessage: The scheme of the serviceMonitor is not defined!
- it: Require sessionAffinity.
set:

View File

@@ -175,7 +175,7 @@ deployment:
image:
registry: docker.io
repository: curlimages/curl
tag: "8.16.0"
tag: "8.17.0"
pullPolicy: IfNotPresent
## @param deployment.priorityClassName PriorityClassName of the Reposilite deployment.