Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add helm chart #248

Merged
merged 3 commits into from
May 12, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 34 additions & 0 deletions .github/workflows/publish-helm-chart.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
name: Release Charts

on:
push:
branches:
- master

jobs:
release:
# depending on default permission settings for your org (contents being read-only or read-write for workloads), you will have to add permissions
# see: https://docs.github.com/en/actions/security-guides/automatic-token-authentication#modifying-the-permissions-for-the-github_token
permissions:
contents: write
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0

- name: Configure Git
run: |
git config user.name "$GITHUB_ACTOR"
git config user.email "$GITHUB_ACTOR@users.noreply.github.com"

- name: Install Helm
uses: azure/setup-helm@v4.2.0

- name: Run chart-releaser
uses: helm/chart-releaser-action@v1.6.0
with:
charts_dir: Helm
env:
CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}"
1 change: 0 additions & 1 deletion Docker/PlexAniSync/run/runsync.sh
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,3 @@ else
echo "Using custom config: "${SETTINGS_FILE}
run
fi

9 changes: 9 additions & 0 deletions Helm/plexanisync/Chart.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
apiVersion: v2
name: plexanisync
version: 0.1.0
description: Plex AniSync helm chart
type: "application"
maintainers:
- name: Brad Holland
email: hollanbm@gmail.com
url: https://www.github.com/hollanbm
57 changes: 57 additions & 0 deletions Helm/plexanisync/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# plexanisync helm chart

## Values

| Name | Description | Default Value | Example |
| -------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `nameOverride` | String to partially override plexanisync.fullname template (will maintain the release name) | `""` | |
| `fullnameOverride` | String to fully override plexanisync.fullname template | `""` | |
| `namespaceOverride` | String to fully override common.names.namespace | `""` | |
| `custom_mappings` | Contents of custom_mappings.yaml recomended multiline yaml string. | `""` | <pre>custom_mappings: \|<br>&nbsp;&nbsp;&nbsp;&nbsp;remote-urls:<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- https://raw.githubusercontent.com/RickDB/PlexAniSync-Custom-Mappings/main/series-tvdb.en.yaml<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;- https://raw.githubusercontent.com/RickDB/PlexAniSync-Custom-Mappings/main/movies-tmdb.en.yaml</pre> |
| `envVars` | Additional EnvVars to define in the plexanisync container | `[]` | <pre>EnvVars:<br>&nbsp;&nbsp;- name: KEY<br>&nbsp;&nbsp;&nbsp;&nbsp;value: "VALUE"</pre> |
| `image` | container image to use | `ghcr.io/rickdb/plexanisync:latest` | |
| `resources` | plexanisync container resource requests/limits | <pre>resources:<br>&nbsp;&nbsp;limits:<br>&nbsp;&nbsp;&nbsp;&nbsp;cpu: '1'<br>&nbsp;&nbsp;&nbsp;&nbsp;memory: 1Gi<br>&nbsp;&nbsp;requests:<br>&nbsp;&nbsp;&nbsp;&nbsp;cpu: '100m'<br>&nbsp;&nbsp;&nbsp;&nbsp;memory: 256Mi | |
| `settings` | [plexanisync environment variable settings](https://github.com/RickDB/PlexAniSync/tree/master/Docker/PlexAniSync#environment-variables) | <pre>settings:<br>&nbsp;&nbsp;plex_section:&nbsp;Anime\|Anime&nbsp;Movies<br>&nbsp;&nbsp;plex_url:<br>&nbsp;&nbsp;ani_username:<br>&nbsp;&nbsp;plex_episode_count_priority:<br>&nbsp;&nbsp;sync_ratings:<br>&nbsp;&nbsp;skip_list_update:&nbsp;&nbsp;<br>&nbsp;&nbsp;schedule:</pre> | <pre>settings:<br>&nbsp;&nbsp;plex_section:&nbsp;Anime\|Anime&nbsp;Movies<br>&nbsp;&nbsp;plex_url:&nbsp;https://plex.tld.org<br>&nbsp;&nbsp;ani_username:&nbsp;username<br>&nbsp;&nbsp;plex_episode_count_priority:&nbsp;true<br>&nbsp;&nbsp;sync_ratings:&nbsp;false<br>&nbsp;&nbsp;skip_list_update:&nbsp;true<br>&nbsp;&nbsp;schedule:&nbsp;"* */1 * * *"</pre> |
| `settings.schedule` | Cron schedule, see [crontab.guru](https://crontab.guru/#*_*/1_*_*_*) for more information | `'* */1 * * *'` |
| `tokens` | plex and anilist tokens | <pre>tokens:<br>&nbsp;&nbsp;ani:<br>&nbsp;&nbsp;plex:</pre> | <pre>tokens:<br>&nbsp;&nbsp;ani: ani-token<br>&nbsp;&nbsp;plex: plex-token</pre> |
| `podSecurityContext` | [pod security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#securitycontext-v1-core) | `{}` | |
| `containerSecurityContext` | [container security context](https://kubernetes.io/docs/reference/generated/kubernetes-api/v1.29/#securitycontext-v1-core) | `{}` | |
| `volumes` | Additional [volumes](https://kubernetes.io/docs/concepts/storage/volumes/) to define in the pod | `[]` | |
| `volumeMounts` | volumeMounts for additional volumes | `[]` | |
| `cronjob` | CronJob configuration, most users will most likely omit these, as the defaults should be sufficient | <pre>cronjob:<br>&nbsp;&nbsp;concurrencyPolicy:&nbsp;Forbid<br>&nbsp;&nbsp;failedJobsHistoryLimit:&nbsp;2<br>&nbsp;&nbsp;startingDeadlineSeconds:&nbsp;300<br>&nbsp;&nbsp;successfulJobsHistoryLimit:&nbsp;1</pre> |
### Settings

* If an optional setting is not defined, the environment variable will not be set. This will then use the plexanisync container image default for that particular setting

* This chart does not provide *native* support for the following plexanisync settings.
* SETTINGS_FILE
* LOG_FAILED_MATCHES

* It is possible to enable these features using a combination of the envVars, volumes, and volumeMounts

#### Example values.yaml

```yaml
custom_mappings: |
remote-urls:
- https://raw.githubusercontent.com/RickDB/PlexAniSync-Custom-Mappings/main/series-tvdb.en.yaml
entries:
- title: The Rising of the Shield Hero
seasons:
- season: 1
anilist-id: 99263

settings:
plex_section: Anime|Anime Movies
plex_url: https://plex.tld.org
ani_username: UserName
plex_episode_count_priority: true
sync_ratings: false
skip_list_update: true
schedule: "* */1 * * *"

tokens:
ani: ani-token
plex: plex-token

```
62 changes: 62 additions & 0 deletions Helm/plexanisync/templates/_commom.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
{{/*
Not using enough of the bitnami common library chart, to warrant a full chart dependency
https://github.dev/bitnami/charts/blob/main/bitnami/common
*/}}

{{/*
Expand the name of the chart.
*/}}
{{- define "common.names.name" -}}
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create chart name and version as used by the chart label.
*/}}
{{- define "common.names.chart" -}}
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Create a default fully qualified app name.
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
If release name contains chart name it will be used as a full name.
*/}}
{{- define "common.names.fullname" -}}
{{- if .Values.fullnameOverride -}}
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- $name := default .Chart.Name .Values.nameOverride -}}
{{- if contains $name .Release.Name -}}
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
{{- else -}}
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
{{- end -}}
{{- end -}}
{{- end -}}

{{/*
Allow the release namespace to be overridden for multi-namespace deployments in combined charts.
*/}}
{{- define "common.names.namespace" -}}
{{- default .Release.Namespace .Values.namespaceOverride | trunc 63 | trimSuffix "-" -}}
{{- end -}}

{{/*
Kubernetes standard labels
{{ include "common.labels.standard" (dict "customLabels" .Values.commonLabels "context" $) -}}
*/}}
{{- define "common.labels.standard" -}}
app.kubernetes.io/name: {{ include "common.names.name" . | quote }}
helm.sh/chart: {{ include "common.names.chart" . | quote }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
app.kubernetes.io/managed-by: {{ .Release.Service | quote }}
{{- end -}}

{{/*
Labels used on immutable fields such as deploy.spec.selector.matchLabels or svc.spec.selector
*/}}
{{- define "common.labels.matchLabels" -}}
app.kubernetes.io/name: {{ include "common.names.name" . | quote }}
app.kubernetes.io/instance: {{ .Release.Name | quote }}
{{- end -}}
11 changes: 11 additions & 0 deletions Helm/plexanisync/templates/configmap.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{{- if .Values.custom_mappings }}
apiVersion: v1
kind: ConfigMap
metadata:
name: {{ include "common.names.fullname" . }}
namespace: {{ include "common.names.namespace" . }}
labels: {{- include "common.labels.standard" . | nindent 4}}
data:
custom_mappings.yaml: |
{{- .Values.custom_mappings | nindent 4 }}
{{- end }}
Loading