Skip to content

Commit dfcd4f0

Browse files
committed
feat: add jellyseerr chart and fix *arr charts NOTES.txt
- Add new Jellyseerr chart for media request and discovery - Fix NOTES.txt in bazarr, prowlarr, radarr, and sonarr charts: - Update pod selector labels to use standard Kubernetes labels - Fix persistence volume references to match current values.yaml structure - Replace deprecated tv/movies/downloads with unified media volume - Bump chart versions for NOTES.txt fixes: - bazarr: 0.1.0 → 0.1.1 - prowlarr: 0.1.0 → 0.1.1 - radarr: 0.2.0 → 0.2.1 - sonarr: 0.1.0 → 0.1.1 - Update README with jellyseerr chart and version updates
1 parent 8eac4bb commit dfcd4f0

17 files changed

Lines changed: 505 additions & 63 deletions

File tree

README.md

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,13 +19,14 @@ helm repo update
1919
| Chart | Description | Version | App Version |
2020
|-------|-------------|---------|-------------|
2121
| **actual-server** | Self-hosted personal finance management with Actual Budget (supports OpenID Connect) | 0.2.0 | 25.8.0 |
22-
| **bazarr** | Subtitle management for TV shows and movies, companion to Sonarr/Radarr | 0.1.0 | latest |
22+
| **bazarr** | Subtitle management for TV shows and movies, companion to Sonarr/Radarr | 0.1.1 | latest |
2323
| **flaresolverr** | Cloudflare bypass proxy for indexers with headless browser automation | 0.1.0 | latest |
24+
| **jellyseerr** | Media request and discovery tool for Jellyfin and Plex servers | 0.1.0 | latest |
2425
| **pihole** | Network-wide DNS ad-blocker with DNSCrypt-proxy integration | Latest | 2025.08.0 |
25-
| **prowlarr** | Centralized indexer manager for all *arr applications | 0.1.0 | latest |
26+
| **prowlarr** | Centralized indexer manager for all *arr applications | 0.1.1 | latest |
2627
| **qbittorrent** | Secure BitTorrent client with integrated NordVPN for safe downloading | 0.2.0 | 5.1.2 |
27-
| **radarr** | Movie collection manager with simplified media volume configuration | 0.1.0 | latest |
28-
| **sonarr** | TV series collection manager with automated episode monitoring | 0.1.0 | latest |
28+
| **radarr** | Movie collection manager with simplified media volume configuration | 0.2.1 | latest |
29+
| **sonarr** | TV series collection manager with automated episode monitoring | 0.1.1 | latest |
2930

3031
## 💻 Installation Examples
3132

charts/bazarr/Chart.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ apiVersion: v2
22
name: bazarr
33
description: A Helm chart for Bazarr subtitle management application
44
type: application
5-
version: 0.1.0
5+
version: 0.1.1
66
appVersion: "05.07.25"
77

88
keywords:

charts/bazarr/templates/NOTES.txt

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
export SERVICE_IP=$(kubectl get svc --namespace {{ .Release.Namespace }} {{ include "bazarr.fullname" . }} --template "{{ "{{" }} range (index .status.loadBalancer.ingress 0) {{ "}}" }}{{ "{{" }}.{{ "}}" }}{{ "{{" }} end {{ "}}" }}")
1616
echo http://$SERVICE_IP:{{ .Values.service.port }}
1717
{{- else if contains "ClusterIP" .Values.service.type }}
18-
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app={{ include "bazarr.name" . }},instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
18+
export POD_NAME=$(kubectl get pods --namespace {{ .Release.Namespace }} -l "app.kubernetes.io/name={{ include "bazarr.name" . }},app.kubernetes.io/instance={{ .Release.Name }}" -o jsonpath="{.items[0].metadata.name}")
1919
export CONTAINER_PORT=$(kubectl get pod --namespace {{ .Release.Namespace }} $POD_NAME -o jsonpath="{.spec.containers[0].ports[0].containerPort}")
2020
echo "Visit http://127.0.0.1:6767 to use your application"
2121
kubectl --namespace {{ .Release.Namespace }} port-forward $POD_NAME 6767:$CONTAINER_PORT
@@ -27,28 +27,23 @@
2727
- Configure your Sonarr and Radarr connections
2828
- Set your subtitle preferences
2929

30-
{{- if and .Values.persistence.movies.enabled .Values.persistence.tv.enabled }}
30+
{{- if .Values.persistence.media.enabled }}
3131

32-
3. Your media volumes are mounted at:
33-
- Movies: /movies
34-
- TV Shows: /tv
35-
{{- else if .Values.persistence.movies.enabled }}
36-
37-
3. Your movies volume is mounted at: /movies
38-
Note: TV shows volume is not enabled
39-
{{- else if .Values.persistence.tv.enabled }}
40-
41-
3. Your TV shows volume is mounted at: /tv
42-
Note: Movies volume is not enabled
32+
3. Your media volume is mounted at: /media
33+
Configure the subPath in values.yaml to organize your content:
34+
persistence:
35+
media:
36+
enabled: true
37+
subPath: "" # e.g., root for all media or specific subfolder
4338
{{- else }}
4439

45-
3. Note: No media volumes are enabled
46-
Enable them in values.yaml to access your media files:
40+
3. Note: Media volume is not enabled
41+
Enable it in values.yaml to access your media files:
4742
persistence:
48-
movies:
49-
enabled: true
50-
tv:
43+
media:
5144
enabled: true
45+
size: 100Gi
46+
existingClaim: "your-media-pvc"
5247
{{- end }}
5348

5449
For more information visit: https://www.bazarr.media/

charts/jellyseerr/Chart.yaml

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
apiVersion: v2
2+
name: jellyseerr
3+
description: A Helm chart for Jellyseerr - media request and discovery tool
4+
type: application
5+
version: 0.1.0
6+
appVersion: "latest"
7+
home: https://github.com/Fallenbagel/jellyseerr
8+
sources:
9+
- https://github.com/Fallenbagel/jellyseerr
10+
maintainers:
11+
- name: homelab-charts
12+
keywords:
13+
- media
14+
- jellyfin
15+
- plex
16+
- requests
17+
- discovery
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
{{/*
2+
Expand the name of the chart.
3+
*/}}
4+
{{- define "jellyseerr.name" -}}
5+
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" }}
6+
{{- end }}
7+
8+
{{/*
9+
Create a default fully qualified app name.
10+
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
11+
If release name contains chart name it will be used as a full name.
12+
*/}}
13+
{{- define "jellyseerr.fullname" -}}
14+
{{- if .Values.fullnameOverride }}
15+
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" }}
16+
{{- else }}
17+
{{- $name := default .Chart.Name .Values.nameOverride }}
18+
{{- if contains $name .Release.Name }}
19+
{{- .Release.Name | trunc 63 | trimSuffix "-" }}
20+
{{- else }}
21+
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" }}
22+
{{- end }}
23+
{{- end }}
24+
{{- end }}
25+
26+
{{/*
27+
Create chart name and version as used by the chart label.
28+
*/}}
29+
{{- define "jellyseerr.chart" -}}
30+
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }}
31+
{{- end }}
32+
33+
{{/*
34+
Common labels
35+
*/}}
36+
{{- define "jellyseerr.labels" -}}
37+
helm.sh/chart: {{ include "jellyseerr.chart" . }}
38+
{{ include "jellyseerr.selectorLabels" . }}
39+
{{- if .Chart.AppVersion }}
40+
app.kubernetes.io/version: {{ .Chart.AppVersion | quote }}
41+
{{- end }}
42+
app.kubernetes.io/managed-by: {{ .Release.Service }}
43+
{{- end }}
44+
45+
{{/*
46+
Selector labels
47+
*/}}
48+
{{- define "jellyseerr.selectorLabels" -}}
49+
app.kubernetes.io/name: {{ include "jellyseerr.name" . }}
50+
app.kubernetes.io/instance: {{ .Release.Name }}
51+
{{- end }}
52+
53+
{{/*
54+
Create the name of the service account to use
55+
*/}}
56+
{{- define "jellyseerr.serviceAccountName" -}}
57+
{{- if .Values.serviceAccount.create }}
58+
{{- default (include "jellyseerr.fullname" .) .Values.serviceAccount.name }}
59+
{{- else }}
60+
{{- default "default" .Values.serviceAccount.name }}
61+
{{- end }}
62+
{{- end }}
Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
apiVersion: apps/v1
2+
kind: Deployment
3+
metadata:
4+
name: {{ include "jellyseerr.fullname" . }}
5+
labels:
6+
{{- include "jellyseerr.labels" . | nindent 4 }}
7+
spec:
8+
replicas: {{ .Values.replicaCount }}
9+
selector:
10+
matchLabels:
11+
{{- include "jellyseerr.selectorLabels" . | nindent 6 }}
12+
template:
13+
metadata:
14+
{{- with .Values.podAnnotations }}
15+
annotations:
16+
{{- toYaml . | nindent 8 }}
17+
{{- end }}
18+
labels:
19+
{{- include "jellyseerr.selectorLabels" . | nindent 8 }}
20+
spec:
21+
{{- with .Values.podSecurityContext }}
22+
securityContext:
23+
{{- toYaml . | nindent 8 }}
24+
{{- end }}
25+
containers:
26+
- name: {{ .Chart.Name }}
27+
image: "{{ .Values.image.repository }}:{{ .Values.image.tag }}"
28+
imagePullPolicy: {{ .Values.image.pullPolicy }}
29+
ports:
30+
- name: http
31+
containerPort: {{ .Values.env.PORT }}
32+
protocol: TCP
33+
env:
34+
{{- range $key, $value := .Values.env }}
35+
- name: {{ $key }}
36+
value: {{ $value | quote }}
37+
{{- end }}
38+
{{- with .Values.extraEnv }}
39+
{{- toYaml . | nindent 12 }}
40+
{{- end }}
41+
volumeMounts:
42+
- name: config
43+
mountPath: /app/config
44+
{{- with .Values.securityContext }}
45+
securityContext:
46+
{{- toYaml . | nindent 12 }}
47+
{{- end }}
48+
{{- with .Values.resources }}
49+
resources:
50+
{{- toYaml . | nindent 12 }}
51+
{{- end }}
52+
{{- if .Values.healthChecks.liveness.enabled }}
53+
livenessProbe:
54+
{{- with .Values.healthChecks.liveness }}
55+
{{- omit . "enabled" | toYaml | nindent 12 }}
56+
{{- end }}
57+
{{- end }}
58+
{{- if .Values.healthChecks.readiness.enabled }}
59+
readinessProbe:
60+
{{- with .Values.healthChecks.readiness }}
61+
{{- omit . "enabled" | toYaml | nindent 12 }}
62+
{{- end }}
63+
{{- end }}
64+
{{- if .Values.healthChecks.startup.enabled }}
65+
startupProbe:
66+
{{- with .Values.healthChecks.startup }}
67+
{{- omit . "enabled" | toYaml | nindent 12 }}
68+
{{- end }}
69+
{{- end }}
70+
volumes:
71+
- name: config
72+
{{- if .Values.persistence.config.enabled }}
73+
persistentVolumeClaim:
74+
claimName: {{ include "jellyseerr.fullname" . }}-config
75+
{{- else }}
76+
emptyDir: {}
77+
{{- end }}
78+
{{- with .Values.nodeSelector }}
79+
nodeSelector:
80+
{{- toYaml . | nindent 8 }}
81+
{{- end }}
82+
{{- with .Values.affinity }}
83+
affinity:
84+
{{- toYaml . | nindent 8 }}
85+
{{- end }}
86+
{{- with .Values.tolerations }}
87+
tolerations:
88+
{{- toYaml . | nindent 8 }}
89+
{{- end }}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
{{- if .Values.ingress.enabled -}}
2+
apiVersion: networking.k8s.io/v1
3+
kind: Ingress
4+
metadata:
5+
name: {{ include "jellyseerr.fullname" . }}
6+
labels:
7+
{{- include "jellyseerr.labels" . | nindent 4 }}
8+
{{- with .Values.ingress.annotations }}
9+
annotations:
10+
{{- toYaml . | nindent 4 }}
11+
{{- end }}
12+
spec:
13+
{{- if .Values.ingress.className }}
14+
ingressClassName: {{ .Values.ingress.className }}
15+
{{- end }}
16+
{{- if .Values.ingress.tls }}
17+
tls:
18+
{{- range .Values.ingress.tls }}
19+
- hosts:
20+
{{- range .hosts }}
21+
- {{ . | quote }}
22+
{{- end }}
23+
secretName: {{ .secretName }}
24+
{{- end }}
25+
{{- end }}
26+
rules:
27+
{{- range .Values.ingress.hosts }}
28+
- host: {{ .host | quote }}
29+
http:
30+
paths:
31+
{{- range .paths }}
32+
- path: {{ .path }}
33+
pathType: {{ .pathType }}
34+
backend:
35+
service:
36+
name: {{ include "jellyseerr.fullname" $ }}
37+
port:
38+
number: {{ $.Values.service.port }}
39+
{{- end }}
40+
{{- end }}
41+
{{- end }}
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
{{- if .Values.persistence.config.enabled }}
2+
apiVersion: v1
3+
kind: PersistentVolumeClaim
4+
metadata:
5+
name: {{ include "jellyseerr.fullname" . }}-config
6+
labels:
7+
{{- include "jellyseerr.labels" . | nindent 4 }}
8+
spec:
9+
accessModes:
10+
- {{ .Values.persistence.config.accessMode }}
11+
{{- if .Values.persistence.config.storageClass }}
12+
storageClassName: {{ .Values.persistence.config.storageClass }}
13+
{{- end }}
14+
resources:
15+
requests:
16+
storage: {{ .Values.persistence.config.size }}
17+
{{- end }}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
apiVersion: v1
2+
kind: Service
3+
metadata:
4+
name: {{ include "jellyseerr.fullname" . }}
5+
labels:
6+
{{- include "jellyseerr.labels" . | nindent 4 }}
7+
spec:
8+
type: {{ .Values.service.type }}
9+
ports:
10+
- port: {{ .Values.service.port }}
11+
targetPort: http
12+
protocol: TCP
13+
name: http
14+
selector:
15+
{{- include "jellyseerr.selectorLabels" . | nindent 4 }}

0 commit comments

Comments
 (0)