diff --git a/charts/incubator/slskd/.helmignore b/charts/incubator/slskd/.helmignore new file mode 100644 index 00000000000..77ca5567b26 --- /dev/null +++ b/charts/incubator/slskd/.helmignore @@ -0,0 +1,30 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ +# OWNERS file for Kubernetes +OWNERS +# helm-docs templates +*.gotmpl +# docs folder +/docs +# icon +icon.png diff --git a/charts/incubator/slskd/CHANGELOG.md b/charts/incubator/slskd/CHANGELOG.md new file mode 100644 index 00000000000..d2c6de4b72f --- /dev/null +++ b/charts/incubator/slskd/CHANGELOG.md @@ -0,0 +1 @@ +## Slskd diff --git a/charts/incubator/slskd/Chart.yaml b/charts/incubator/slskd/Chart.yaml new file mode 100644 index 00000000000..9f6a37fde9b --- /dev/null +++ b/charts/incubator/slskd/Chart.yaml @@ -0,0 +1,37 @@ +annotations: + max_scale_version: 24.04.0 + min_scale_version: 23.10.0 + truecharts.org/SCALE-support: "true" + truecharts.org/category: media + truecharts.org/max_helm_version: "3.14" + truecharts.org/min_helm_version: "3.11" + truecharts.org/train: incubator +apiVersion: v2 +appVersion: 0.20.1 +dependencies: + - name: common + version: 20.0.10 + repository: oci://tccr.io/truecharts + condition: "" + alias: "" + tags: [] + import-values: [] +deprecated: false +description: Slskd is a modern client-server application for the Soulseek file sharing network. +home: https://truecharts.org/charts/incubator/slskd +icon: https://truecharts.org/img/hotlink-ok/chart-icons/slskd.png +keywords: + - slskd + - music + - soulseek +kubeVersion: ">=1.24.0-0" +maintainers: + - name: TrueCharts + email: info@truecharts.org + url: https://truecharts.org +name: slskd +sources: + - https://github.com/ansible-slskd/slskd + - https://github.com/truecharts/charts/tree/master/charts/incubator/slskd +type: application +version: 0.0.1 diff --git a/charts/incubator/slskd/README.md b/charts/incubator/slskd/README.md new file mode 100644 index 00000000000..83229a60265 --- /dev/null +++ b/charts/incubator/slskd/README.md @@ -0,0 +1,27 @@ +# README + +## General Info + +TrueCharts can be installed as both *normal* Helm Charts or as Apps on TrueNAS SCALE. +However only installations using the TrueNAS SCALE Apps system are supported. + +For more information about this App, please check the docs on the TrueCharts [website](https://truecharts.org/charts/incubator/) + +**This chart is not maintained by the upstream project and any issues with the chart should be raised [here](https://github.com/truecharts/charts/issues/new/choose)** + + +## Support + +- Please check our [quick-start guides for TrueNAS SCALE](https://truecharts.org/manual/SCALE/guides/scale-intro). +- See the [Website](https://truecharts.org) +- Check our [Discord](https://discord.gg/tVsPTHWTtr) +- Open a [issue](https://github.com/truecharts/charts/issues/new/choose) + +--- + +## Sponsor TrueCharts + +TrueCharts can only exist due to the incredible effort of our staff. +Please consider making a [donation](https://truecharts.org/sponsor) or contributing back to the project any way you can! + +*All Rights Reserved - The TrueCharts Project* diff --git a/charts/incubator/slskd/icon.png b/charts/incubator/slskd/icon.png new file mode 100644 index 00000000000..cfc17181fab Binary files /dev/null and b/charts/incubator/slskd/icon.png differ diff --git a/charts/incubator/slskd/questions.yaml b/charts/incubator/slskd/questions.yaml new file mode 100644 index 00000000000..9bad29d3f86 --- /dev/null +++ b/charts/incubator/slskd/questions.yaml @@ -0,0 +1,134 @@ +# Include{groups} +portals: + open: +# Include{portalLink} +questions: +# Include{global} +# Include{workload} +# Include{workloadDeployment} +# Include{replicas1} +# Include{podSpec} +# Include{containerMain} + - variable: env + label: Image Environment + schema: + additional_attrs: true + type: dict + attrs: + - variable: SLSKD_SLSK_USERNAME + label: Soulseek Username + description: Soulseek network account username + schema: + type: string + required: true + default: "" + - variable: SLSKD_SLSK_PASSWORD + label: Soulseek Password + description: Soulseek network account password + schema: + type: string + required: true + private: true + default: "" + +# Include{containerBasic} +# Include{containerAdvanced} + +# Include{containerConfig} +# Include{podOptions} +# Include{serviceRoot} +# Include{serviceSelectorLoadBalancer} +# Include{serviceSelectorExtras} + - variable: main + label: Main Service Port Configuration + schema: + additional_attrs: true + type: dict + attrs: + - variable: port + label: Port + description: This port exposes the container port on the service + schema: + type: int + default: 5030 + required: true +# Include{serviceExpertRoot} +# Include{serviceExpert} +# Include{serviceList} +# Include{persistenceRoot} + - variable: data + label: "App Data Storage" + description: "Stores the Application Data." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: share + label: "App Share Storage" + description: "Stores the Application Share." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: incomplete + label: "App Incomplete Downloads Storage" + description: "Stores the Application Incomplete Downloads." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} + - variable: complete + label: "App Complete Downloads Storage" + description: "Stores the Application Complete Downloads." + schema: + additional_attrs: true + type: dict + attrs: +# Include{persistenceBasic} +# Include{persistenceList} +# Include{ingressRoot} + - variable: main + label: Main Ingress + schema: + additional_attrs: true + type: dict + attrs: +# Include{ingressDefault} +# Include{ingressTLS} +# Include{ingressTraefik} +# Include{ingressAdvanced} +# Include{ingressList} + +# Include{securityContextRoot} + - variable: runAsUser + label: "runAsUser" + description: "The UserID of the user running the application" + schema: + type: int + default: 0 + - variable: runAsGroup + label: "runAsGroup" + description: "The groupID of the user running the application" + schema: + type: int + default: 0 +# Include{securityContextContainer} +# Include{securityContextAdvanced} +# Include{securityContextPod} + - variable: fsGroup + label: "fsGroup" + description: "The group that should own ALL storage." + schema: + type: int + default: 568 + +# Include{resources} +# Include{advanced} +# Include{addons} +# Include{codeserver} +# Include{netshoot} +# Include{vpn} +# Include{documentation} diff --git a/charts/incubator/slskd/templates/NOTES.txt b/charts/incubator/slskd/templates/NOTES.txt new file mode 100644 index 00000000000..efcb74cb772 --- /dev/null +++ b/charts/incubator/slskd/templates/NOTES.txt @@ -0,0 +1 @@ +{{- include "tc.v1.common.lib.chart.notes" $ -}} diff --git a/charts/incubator/slskd/templates/_secrets.tpl b/charts/incubator/slskd/templates/_secrets.tpl new file mode 100644 index 00000000000..3f6384d4d35 --- /dev/null +++ b/charts/incubator/slskd/templates/_secrets.tpl @@ -0,0 +1,13 @@ +{{/* Define the secrets */}} +{{- define "slskd.secrets" -}} +{{- $secretName := (printf "%s-slskd-secrets" (include "tc.v1.common.lib.chart.names.fullname" $)) }} + +{{- $jwtKey := randAlphaNum 64 -}} + + {{- with lookup "v1" "Secret" .Release.Namespace $secretName -}} + {{- $jwtKey = index .data "SLSKD_JWT_KEY" | b64dec -}} + {{- end }} +enabled: true +data: + SLSKD_JWT_KEY: {{ $jwtKey }} +{{- end -}} diff --git a/charts/incubator/slskd/templates/common.yaml b/charts/incubator/slskd/templates/common.yaml new file mode 100644 index 00000000000..9c83c417e72 --- /dev/null +++ b/charts/incubator/slskd/templates/common.yaml @@ -0,0 +1,12 @@ +{{/* Make sure all variables are set properly */}} +{{- include "tc.v1.common.loader.init" . -}} + +{{/* Render secrets for slskd */}} +{{- $secrets := include "slskd.secrets" . | fromYaml -}} +{{- if $secrets -}} + {{- $_ := set .Values.secret "slskd-secrets" $secrets -}} +{{- end -}} + +{{/* Render the templates */}} +{{- include "tc.v1.common.loader.apply" . -}} + diff --git a/charts/incubator/slskd/values.yaml b/charts/incubator/slskd/values.yaml new file mode 100644 index 00000000000..80750de4419 --- /dev/null +++ b/charts/incubator/slskd/values.yaml @@ -0,0 +1,74 @@ +image: + repository: ghcr.io/slskd/slskd + pullPolicy: IfNotPresent + tag: 0.20.1@sha256:2a6af2f48657179b2bb66840fe179ce209f501a02386b679d9f3cdc26213fc2c + +securityContext: + container: + readOnlyRootFilesystem: false + runAsGroup: 0 + runAsUser: 0 + +service: + main: + ports: + main: + port: 5030 + +workload: + main: + podSpec: + containers: + main: + env: + # listens on any interface + SLSKD_SLSK_LISTEN_IP_ADDRESS: 0.0.0.0 + # sets the port internally + SLSKD_SLSK_LISTEN_PORT: "{{ .Values.service.main.ports.main.port }}" + SLSKD_HTTP_PORT: "{{ .Values.service.main.ports.main.port }}" + APP_DIR: "{{.Values.persistence.data.mountPath }}" + SLSKD_SHARED_DIR: "{{.Values.persistence.share.mountPath }}" + SLSKD_DOWNLOADS_DIR: "{{ .Values.persistence.complete.mountPath }}" + SLSKD_INCOMPLETE_DIR: "{{ .Values.persistence.incomplete.mountPath }}" + SLSKD_USERNAME: "admin" + SLSKD_PASSWORD: "admin123" + SLSKD_JWT_KEY: + secretKeyRef: + name: slskd-secrets + key: SLSKD_JWT_KEY + # SLSKD_INSTANCE_NAME: default + # SLSKD_NO_AUTH: + # true | false + # SLSKD_REMOTE_FILE_MANAGEMENT: false + # memory | disk + # SLSKD_SHARE_CACHE_STORAGE_MODE: memory + # SLSKD_SHARE_CACHE_WORKERS: 4 + # 1 week + # SLSKD_SHARE_CACHE_RETENTION: 10080 + # true | false + # SLSKD_RELAY: + # controller | agent | debug + # SLSKD_RELAY_MODE: + # ROOMS + # SLSKD_SLSK_ADDRESS: vps.slsknet.org + # SLSKD_SLSK_PORT: 2271 + + # SLSKD_SLSK_CONNECTION_TIMEOUT: 10000 + # SLSKD_SLSK_INACTIVITY_TIMEOUT: 15000 + +persistence: + data: + enabled: true + mountPath: "/app" + share: + enabled: true + mountPath: "/share" + incomplete: + enabled: true + mountPath: "/downloads/incomplete" + complete: + enabled: true + mountPath: "/downloads/complete" +portal: + open: + enabled: true