Files
helm-charts/.github/workflows/change-app-version.yml
T
jklein 3fa67d55ef rss-bridge: new chart
Takes over the four loose manifests in cluster-config/rss-bridge/ as a
proper chart, on the current template-chart standard: strict values
schema, null-safe helpers, computed limits, replicas/scaleDown,
checksum/config, NOTES.txt.

Two things deviate from the repo standard on purpose:

- The Ingress models host AND TLS secret name per entry instead of the
  single conventional tls-<release>-<chart>-ingress. The installation
  this replaces has grown three separate certificates, one per host.
  Renaming them would make cert-manager issue three new ones and leave
  each host unreachable until it did - a self-inflicted outage on a
  deployment that has been up for over a year. Entries sharing a secret
  name are grouped into one tls entry, and omitting the name falls back
  to the convention, so consolidating later is a values change.

- Requests and limits are decoupled. The old manifest requested 2Gi of
  ephemeral storage, identical to its limit, reserving two gigabytes for
  a workload measured at 2.2 MB after fetching all five whitelisted
  bridges. The request drops to 64Mi; the limit stays at 2Gi.

Hardening was verified rather than assumed. The image ships no USER and
runs as root by default, but runs fully hardened once its writable paths
are provided: uid/gid 33, readOnlyRootFilesystem, all capabilities
dropped, seccompProfile RuntimeDefault. The writable paths were found by
running the image with a writable rootfs, exercising every bridge and
reading its diff layer - /app/cache, /run, /run/php, /var/lib/nginx.
/tmp did not show up that way, because PHP's opcache creates its lock
file there and unlinks it immediately; it only surfaced when the
hardened container died at startup. Stopping at the first writable path
would have shipped a chart that cannot start.

Probes use the app's own /?action=health, which renders fixed JSON
without touching the cache or any remote site, so neither a scraped site
going down nor an unwritable cache can restart the pod.

Fixes #128
2026-08-23 23:33:23 +02:00

97 lines
3.4 KiB
YAML

name: Change App-Version
on:
workflow_dispatch:
inputs:
app-version:
required: true
type: string
description: "change the version of the underlying application"
chart-location:
required: false
type: string
default: "."
description: "location of the helm chart"
chart-name:
required: true
type: choice
description: "helm chart to be updated"
options:
- zipline
- calibre-web-automated
- samba
- teamspeak-server
- urlaubsverwaltung
- apache-tika
- gotenberg
- homeassistant
- satisfactory
- cyberchef
- matrix-synapse
- outline
- paperless-ngx
- patchmon
- rallly
- voucher-vault
- minecraft-router
- minecraft-server
- rss-bridge
workflow_call:
inputs:
app-version:
required: true
type: string
description: "change the version of the underlying application"
chart-location:
required: false
type: string
default: "."
description: "location of the helm chart"
chart-name:
required: true
type: string
description: "name of the helm chart"
jobs:
change-app-version:
runs-on: ubuntu-latest
steps:
- name: "Configure OP-Connect"
uses: 1password/load-secrets-action/configure@v2
with:
connect-host: https://op-connect.jk-dev.de
- name: "Load GitHub Credentials"
id: load-jk-cluster-bot-creds
uses: 1password/load-secrets-action@v2
env:
OP_CONNECT_TOKEN: ${{ secrets.OP_CONNECT_TOKEN }}
JK_CLUSTER_BOT_TOKEN: op://GitHub-Actions/github-helm-charts-push-token/credential
JK_CLUSTER_USERNAME: op://GitHub-Actions/github-helm-charts-push-token/username
JK_CLUSTER_EMAIL: op://GitHub-Actions/github-helm-charts-push-token/email
- uses: actions/checkout@v4
with:
token: ${{ env.JK_CLUSTER_BOT_TOKEN }}
- name: "Get Chart Version"
run: |
CHART_VERSION=$(grep '^version:' ${{ inputs.chart-name }}/Chart.yaml | awk '{print $2}')
CHART_PART=$(echo $CHART_VERSION | cut -d'+' -f1)
echo "CHART_VERSION=$CHART_PART" >> $GITHUB_ENV
working-directory: ${{ inputs.chart-location }}
- name: "Get new Chart Version"
run: |
APP_VERSION_NORMALIZED=$(echo "${{ inputs.app-version }}" | tr '-' '.')
NEW_VERSION="${CHART_VERSION}+up${APP_VERSION_NORMALIZED}"
sed -i "s/^version:.*/version: $NEW_VERSION/" ${{ inputs.chart-name }}/Chart.yaml
sed -i "s/^appVersion:.*/appVersion: ${{ inputs.app-version }}/" ${{ inputs.chart-name }}/Chart.yaml
working-directory: ${{ inputs.chart-location }}
- name: "View chart-directory contents"
run: ls -al
working-directory: ${{ inputs.chart-location }}
- name: "View helm-chart.yaml"
run: cat Chart.yaml
working-directory: ${{ inputs.chart-location }}/${{ inputs.chart-name }}
- name: Commit and Push Changes
run: |
git config --global user.name '${{ env.JK_CLUSTER_USERNAME }}'
git config --global user.email '${{ env.JK_CLUSTER_EMAIL }}'
git commit -am "Updated ${{ inputs.chart-name }} application version to ${{ inputs.app-version }}"
git push