From a964babc589e105879c1423acf8df5d6838fa818 Mon Sep 17 00:00:00 2001 From: Stavros Kois <47820033+stavros-k@users.noreply.github.com> Date: Tue, 11 Apr 2023 18:26:15 +0300 Subject: [PATCH] NAS-121405 / 23.10 / Add Lidarr to `community` train (#1100) * Add Lidarr to charts train * Run chart tests in a matrix * move to correct train * Fix variable name and quote strings in questions.yaml --- .github/workflows/charts_tests.yaml | 46 +++- library/ix-dev/community/lidarr/Chart.lock | 6 + library/ix-dev/community/lidarr/Chart.yaml | 25 ++ library/ix-dev/community/lidarr/README.md | 8 + library/ix-dev/community/lidarr/app-readme.md | 8 + .../community/lidarr/charts/common-1.0.3.tgz | Bin 0 -> 54265 bytes .../community/lidarr/ci/basic-values.yaml | 11 + .../community/lidarr/ci/extra-values.yaml | 21 ++ .../community/lidarr/ci/hostNet-values.yaml | 8 + library/ix-dev/community/lidarr/item.yaml | 4 + .../ix-dev/community/lidarr/questions.yaml | 225 ++++++++++++++++++ .../community/lidarr/templates/NOTES.txt | 1 + .../community/lidarr/templates/_lidarr.tpl | 97 ++++++++ .../community/lidarr/templates/_portal.tpl | 12 + .../community/lidarr/templates/common.yaml | 9 + .../ix-dev/community/lidarr/upgrade_info.json | 1 + .../ix-dev/community/lidarr/upgrade_strategy | 31 +++ library/ix-dev/community/lidarr/values.yaml | 25 ++ 18 files changed, 531 insertions(+), 7 deletions(-) create mode 100644 library/ix-dev/community/lidarr/Chart.lock create mode 100644 library/ix-dev/community/lidarr/Chart.yaml create mode 100644 library/ix-dev/community/lidarr/README.md create mode 100644 library/ix-dev/community/lidarr/app-readme.md create mode 100644 library/ix-dev/community/lidarr/charts/common-1.0.3.tgz create mode 100644 library/ix-dev/community/lidarr/ci/basic-values.yaml create mode 100644 library/ix-dev/community/lidarr/ci/extra-values.yaml create mode 100644 library/ix-dev/community/lidarr/ci/hostNet-values.yaml create mode 100644 library/ix-dev/community/lidarr/item.yaml create mode 100644 library/ix-dev/community/lidarr/questions.yaml create mode 100644 library/ix-dev/community/lidarr/templates/NOTES.txt create mode 100644 library/ix-dev/community/lidarr/templates/_lidarr.tpl create mode 100644 library/ix-dev/community/lidarr/templates/_portal.tpl create mode 100644 library/ix-dev/community/lidarr/templates/common.yaml create mode 100644 library/ix-dev/community/lidarr/upgrade_info.json create mode 100644 library/ix-dev/community/lidarr/upgrade_strategy create mode 100644 library/ix-dev/community/lidarr/values.yaml diff --git a/.github/workflows/charts_tests.yaml b/.github/workflows/charts_tests.yaml index ff2f6ae09c..356fbfcdd8 100644 --- a/.github/workflows/charts_tests.yaml +++ b/.github/workflows/charts_tests.yaml @@ -20,7 +20,7 @@ jobs: helm-version: - v3.9.4 - v3.10.3 - - v3.11.1 + - v3.11.2 steps: - name: Checkout uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 @@ -45,21 +45,52 @@ jobs: run: | ct lint --config .github/ct-install-config/charts-ct-lint.yaml + list-changed: + needs: + - lint + name: List Changed Charts + runs-on: ubuntu-22.04 + outputs: + changed_json: ${{ steps.list-changed.outputs.changed_json }} + steps: + - name: Checkout + uses: actions/checkout@2541b1294d2704b0964813337f33b291d3f8596b # tag=v3 + with: + # Depth 0 is required for chart-testing to work properly + fetch-depth: 0 + + - name: Set up chart-testing + uses: helm/chart-testing-action@afea100a513515fbd68b0e72a7bb0ae34cb62aec # tag=v2.3.1 + + - name: List Changed Charts + id: list-changed + shell: bash + run: | + changed_json=$(ct list-changed \ + --config .github/ct-install-config/charts-ct-install.yaml | \ + jq --raw-input '.' | jq --compact-output --slurp '.') + + echo "changed_json=$changed_json" >> $GITHUB_OUTPUT + echo 'Detected changes in the following charts:' + echo "$changed_json" | jq --raw-output '.[]' + install: needs: - lint - name: Install Charts + - list-changed + name: Install Chart runs-on: ubuntu-22.04 strategy: fail-fast: false matrix: - # We run tests on k3s version of latest SCALE release, SCALE nightly and manually defined "latest" - k3s-version: - - v1.25.3+k3s1 + chart: ${{ fromJson(needs.list-changed.outputs.changed_json) }} # We run tests on Helm version of latest SCALE release, SCALE nightly and manually defined "latest" helm-version: - v3.9.4 - - v3.11.1 + - v3.11.2 + # We run tests on k3s version of latest SCALE release, SCALE nightly and manually defined "latest" + k3s-version: + - v1.25.3+k3s1 steps: - name: Checkout @@ -120,5 +151,6 @@ jobs: k3d-args: --k3s-arg --disable=metrics-server@server:* - name: Run chart-testing (install) + shell: bash run: | - ct install --config .github/ct-install-config/charts-ct-install.yaml + ct install --config .github/ct-install-config/charts-ct-install.yaml --charts ${{ matrix.chart }} diff --git a/library/ix-dev/community/lidarr/Chart.lock b/library/ix-dev/community/lidarr/Chart.lock new file mode 100644 index 0000000000..ec1ed6cc75 --- /dev/null +++ b/library/ix-dev/community/lidarr/Chart.lock @@ -0,0 +1,6 @@ +dependencies: +- name: common + repository: file://../../../common + version: 1.0.3 +digest: sha256:1a090020cfa582aff29906320874ffe9b543fcc6c2423c281f434514f2653e02 +generated: "2023-04-10T15:33:17.498321276+03:00" diff --git a/library/ix-dev/community/lidarr/Chart.yaml b/library/ix-dev/community/lidarr/Chart.yaml new file mode 100644 index 0000000000..f0f9400243 --- /dev/null +++ b/library/ix-dev/community/lidarr/Chart.yaml @@ -0,0 +1,25 @@ +name: lidarr +description: Lidarr is a music collection manager for Usenet and BitTorrent users. +annotations: + title: Lidarr +type: application +version: 1.0.0 +apiVersion: v2 +appVersion: '1.1.3.2982' +kubeVersion: '>=1.16.0-0' +maintainers: + - name: truenas + url: https://www.truenas.com/ +dependencies: + - name: common + repository: file://../../../common + version: 1.0.3 +home: https://github.com/Lidarr/Lidarr +icon: https://raw.githubusercontent.com/Lidarr/Lidarr/develop/Logo/256.png +sources: + - https://github.com/onedr0p/containers/tree/main/apps/lidarr + - https://github.com/truenas/charts/tree/master/charts/lidarr + - https://github.com/Lidarr/Lidarr +keywords: + - media + - music diff --git a/library/ix-dev/community/lidarr/README.md b/library/ix-dev/community/lidarr/README.md new file mode 100644 index 0000000000..abb284ff8c --- /dev/null +++ b/library/ix-dev/community/lidarr/README.md @@ -0,0 +1,8 @@ +# Lidarr + +[Lidarr](https://github.com/Lidarr/Lidarr) is a music collection manager for Usenet and BitTorrent users. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Lidarr` directories. +> Afterward, the `Lidarr` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/lidarr/app-readme.md b/library/ix-dev/community/lidarr/app-readme.md new file mode 100644 index 0000000000..abb284ff8c --- /dev/null +++ b/library/ix-dev/community/lidarr/app-readme.md @@ -0,0 +1,8 @@ +# Lidarr + +[Lidarr](https://github.com/Lidarr/Lidarr) is a music collection manager for Usenet and BitTorrent users. + +> When application is installed, a container will be launched with **root** privileges. +> This is required in order to apply the correct permissions to the `Lidarr` directories. +> Afterward, the `Lidarr` container will run as a **non**-root user (Default: `568`). +> All mounted storage(s) will be `chown`ed only if the parent directory does not match the configured user. diff --git a/library/ix-dev/community/lidarr/charts/common-1.0.3.tgz b/library/ix-dev/community/lidarr/charts/common-1.0.3.tgz new file mode 100644 index 0000000000000000000000000000000000000000..7f38877c9774362682b51b91a715f13bf4bfa4a7 GIT binary patch literal 54265 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≺yu$QDtD~~Ye(2)e+$&oL(tcfg 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 + schema: + type: boolean + default: false + + - variable: lidarrStorage + label: "" + group: Storage Configuration + schema: + type: dict + attrs: + - variable: config + label: Lidarr Config Storage + description: The path to store Lidarr Configuration. + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: datasetName + label: Dataset Name + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + hidden: true + immutable: true + default: "config" + $ref: + - "normalize/ixVolume" + - variable: hostPath + label: Host Path + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + immutable: true + required: true + - variable: additionalStorages + label: Additional Storage + description: Additional storage for Lidarr. + schema: + type: list + default: [] + items: + - variable: storageEntry + label: Storage Entry + schema: + type: dict + attrs: + - variable: type + label: Type + description: | + ixVolume: Is dataset created automatically by the system.
+ Host Path: Is a path that already exists on the system. + schema: + type: string + required: true + default: "ixVolume" + enum: + - value: "hostPath" + description: Host Path (Path that already exists on the system) + - value: "ixVolume" + description: ixVolume (Dataset created automatically by the system) + - variable: mountPath + label: Mount Path + description: The path inside the container to mount the storage. + schema: + type: path + required: true + - variable: hostPath + label: Host Path + description: The host path to use for storage. + schema: + type: hostpath + show_if: [["type", "=", "hostPath"]] + required: true + - variable: datasetName + label: Dataset Name + description: The name of the dataset to use for storage. + schema: + type: string + show_if: [["type", "=", "ixVolume"]] + required: true + immutable: true + default: "storage_entry" + $ref: + - "normalize/ixVolume" + + - variable: resources + group: Resources Configuration + label: "" + schema: + type: dict + attrs: + - variable: limits + label: Limits + schema: + type: dict + attrs: + - variable: cpu + label: CPU + description: CPU limit for Lidarr. + schema: + type: string + default: "4000m" + required: true + - variable: memory + label: Memory + description: Memory limit for Lidarr. + schema: + type: string + default: "8Gi" + required: true diff --git a/library/ix-dev/community/lidarr/templates/NOTES.txt b/library/ix-dev/community/lidarr/templates/NOTES.txt new file mode 100644 index 0000000000..ba4e01146c --- /dev/null +++ b/library/ix-dev/community/lidarr/templates/NOTES.txt @@ -0,0 +1 @@ +{{ include "ix.v1.common.lib.chart.notes" $ }} diff --git a/library/ix-dev/community/lidarr/templates/_lidarr.tpl b/library/ix-dev/community/lidarr/templates/_lidarr.tpl new file mode 100644 index 0000000000..79e62eece9 --- /dev/null +++ b/library/ix-dev/community/lidarr/templates/_lidarr.tpl @@ -0,0 +1,97 @@ +{{- define "lidarr.workload" -}} +workload: + lidarr: + enabled: true + primary: true + type: Deployment + podSpec: + hostNetwork: {{ .Values.lidarrNetwork.hostNetwork }} + containers: + lidarr: + enabled: true + primary: true + imageSelector: image + securityContext: + runAsUser: {{ .Values.lidarrRunAs.user }} + runAsGroup: {{ .Values.lidarrRunAs.group }} + {{ with .Values.lidarrConfig.additionalEnvs }} + env: + {{ range $env := . }} + {{ $env.name }}: {{ $env.value }} + {{ end }} + {{ end }} + env: + LIDARR__PORT: {{ .Values.lidarrNetwork.webPort }} + LIDARR__INSTANCE_NAME: {{ .Values.lidarrConfig.instanceName }} + probes: + liveness: + enabled: true + type: http + port: "{{ .Values.lidarrNetwork.webPort }}" + path: /ping + readiness: + enabled: true + type: http + port: "{{ .Values.lidarrNetwork.webPort }}" + path: /ping + startup: + enabled: true + type: http + port: "{{ .Values.lidarrNetwork.webPort }}" + path: /ping + initContainers: + {{- include "ix.v1.common.app.permissions" (dict "containerName" "01-permissions" + "UID" .Values.lidarrRunAs.user + "GID" .Values.lidarrRunAs.group + "mode" "check" + "type" "init") | nindent 8 }} + +{{/* Service */}} +service: + lidarr: + enabled: true + primary: true + type: NodePort + targetSelector: lidarr + ports: + webui: + enabled: true + primary: true + port: {{ .Values.lidarrNetwork.webPort }} + nodePort: {{ .Values.lidarrNetwork.webPort }} + targetSelector: lidarr + +{{/* Persistence */}} +persistence: + config: + enabled: true + type: {{ .Values.lidarrStorage.config.type }} + datasetName: {{ .Values.lidarrStorage.config.datasetName | default "" }} + hostPath: {{ .Values.lidarrStorage.config.hostPath | default "" }} + targetSelector: + lidarr: + lidarr: + mountPath: /config + 01-permissions: + mountPath: /mnt/directories/config + tmp: + enabled: true + type: emptyDir + targetSelector: + lidarr: + lidarr: + mountPath: /tmp + {{- range $idx, $storage := .Values.lidarrStorage.additionalStorages }} + {{ printf "lidarr-%v" (int $idx) }}: + enabled: true + type: {{ $storage.type }} + datasetName: {{ $storage.datasetName | default "" }} + hostPath: {{ $storage.hostPath | default "" }} + targetSelector: + lidarr: + lidarr: + mountPath: {{ $storage.mountPath }} + 01-permissions: + mountPath: /mnt/directories{{ $storage.mountPath }} + {{- end }} +{{- end -}} diff --git a/library/ix-dev/community/lidarr/templates/_portal.tpl b/library/ix-dev/community/lidarr/templates/_portal.tpl new file mode 100644 index 0000000000..5d6ae90722 --- /dev/null +++ b/library/ix-dev/community/lidarr/templates/_portal.tpl @@ -0,0 +1,12 @@ +{{- define "lidarr.portal" -}} +--- +apiVersion: v1 +kind: ConfigMap +metadata: + name: portal +data: + path: "/" + port: {{ .Values.lidarrNetwork.webPort | quote }} + protocol: http + host: $node_ip +{{- end -}} diff --git a/library/ix-dev/community/lidarr/templates/common.yaml b/library/ix-dev/community/lidarr/templates/common.yaml new file mode 100644 index 0000000000..e1d31f9e62 --- /dev/null +++ b/library/ix-dev/community/lidarr/templates/common.yaml @@ -0,0 +1,9 @@ +{{- include "ix.v1.common.loader.init" . -}} + +{{/* Merge the templates with Values */}} +{{- $_ := mustMergeOverwrite .Values (include "lidarr.workload" $ | fromYaml) -}} + +{{/* Create the configmap for portal manually*/}} +{{- include "lidarr.portal" $ -}} + +{{- include "ix.v1.common.loader.apply" . -}} diff --git a/library/ix-dev/community/lidarr/upgrade_info.json b/library/ix-dev/community/lidarr/upgrade_info.json new file mode 100644 index 0000000000..767388094a --- /dev/null +++ b/library/ix-dev/community/lidarr/upgrade_info.json @@ -0,0 +1 @@ +{"filename": "values.yaml", "keys": ["image"]} diff --git a/library/ix-dev/community/lidarr/upgrade_strategy b/library/ix-dev/community/lidarr/upgrade_strategy new file mode 100644 index 0000000000..3e49862388 --- /dev/null +++ b/library/ix-dev/community/lidarr/upgrade_strategy @@ -0,0 +1,31 @@ +#!/usr/bin/python3 +import json +import re +import sys + +from catalog_update.upgrade_strategy import semantic_versioning + + +RE_STABLE_VERSION = re.compile(r'[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+') + + +def newer_mapping(image_tags): + key = list(image_tags.keys())[0] + tags = {t: t for t in image_tags[key] if RE_STABLE_VERSION.fullmatch(t)} + version = semantic_versioning(list(tags)) + if not version: + return {} + + return { + 'tags': {key: tags[version]}, + 'app_version': version, + } + + +if __name__ == '__main__': + try: + versions_json = json.loads(sys.stdin.read()) + except ValueError: + raise ValueError('Invalid json specified') + + print(json.dumps(newer_mapping(versions_json))) diff --git a/library/ix-dev/community/lidarr/values.yaml b/library/ix-dev/community/lidarr/values.yaml new file mode 100644 index 0000000000..a5b76ef52a --- /dev/null +++ b/library/ix-dev/community/lidarr/values.yaml @@ -0,0 +1,25 @@ +image: + repository: ghcr.io/onedr0p/lidarr-develop + pullPolicy: IfNotPresent + tag: '1.1.3.2982' + +resources: + limits: + cpu: 4000m + memory: 8Gi + +lidarrConfig: + instanceName: Lidarr + additionalEnvs: [] +lidarrNetwork: + webPort: 30000 + hostNetwork: false +lidarrRunAs: + user: 568 + group: 568 +lidarrStorage: + config: + type: ixVolume + hostPath: '' + datasetName: config + additionalStorages: []