Skip to content
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
99 changes: 99 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,99 @@
name: Validate

on:
push:
branches: [main]
pull_request:
schedule:
- cron: "14 6 * * 1"
workflow_dispatch:

jobs:
xml:
name: XML structure
if: github.event_name == 'pull_request' || github.event_name == 'push'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Well-formedness and required fields
run: |
python3 - <<'EOF'
import sys
import xml.etree.ElementTree as ET
from pathlib import Path

REQUIRED = ['Name', 'Repository', 'Registry', 'Support', 'Project',
'Overview', 'Category', 'WebUI', 'TemplateURL', 'Icon']
failed = False

profile = ET.parse('ca_profile.xml').getroot()
if not (profile.findtext('Profile') or '').strip():
print('ca_profile.xml: <Profile> is empty')
failed = True

for path in sorted(Path('templates').glob('*.xml')):
root = ET.parse(path).getroot()
if root.tag != 'Container' or root.get('version') != '2':
print(f'{path}: root must be <Container version="2">')
failed = True
for tag in REQUIRED:
if not (root.findtext(tag) or '').strip():
print(f'{path}: missing or empty <{tag}>')
failed = True
for cfg in root.findall('Config'):
for attr in ('Name', 'Target', 'Type'):
if not cfg.get(attr):
print(f'{path}: <Config> missing {attr} attribute')
failed = True
print(f'{path}: OK' if not failed else f'{path}: FAILED')
sys.exit(1 if failed else 0)
EOF

date-bump:
name: Date bumped on template change
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Require <Date> change when a template changes
run: |
base="origin/${{ github.base_ref }}"
changed=$(git diff --name-only "$base"...HEAD -- templates/ || true)
[ -z "$changed" ] && { echo 'No template changes.'; exit 0; }
today=$(date -u +%F)
if git diff "$base"...HEAD -- templates/ | grep -q '^+.*<Date>'; then
echo '<Date> was updated.'
elif grep -q "<Date>$today</Date>" $changed; then
echo "<Date> already set to today ($today)."
else
echo 'Templates changed but <Date> not bumped. Set <Date> to today (YYYY-MM-DD).'
exit 1
fi

links:
name: Links and image
if: github.event_name != 'pull_request'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: All referenced URLs resolve
run: |
urls=$(grep -hoE 'https://[^<>" )]+' ca_profile.xml templates/*.xml README.md | sort -u)
fail=0
for u in $urls; do
code=$(curl -sL -o /dev/null -w '%{http_code}' --max-time 30 \
-A 'Mozilla/5.0 (compatible; maintainerr-template-ci)' "$u" || echo 000)
if [ "$code" -ge 400 ] || [ "$code" = 000 ]; then
echo "BROKEN ($code): $u"; fail=1
else
echo "ok ($code): $u"
fi
done
exit $fail
- name: Image tags exist on GHCR
run: |
docker manifest inspect ghcr.io/maintainerr/maintainerr:latest > /dev/null
docker manifest inspect ghcr.io/maintainerr/maintainerr:development > /dev/null
echo 'latest and development tags resolve.'
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

Official [Unraid Community Applications](https://unraid.net/community/apps) templates, maintained by the [Maintainerr](https://github.com/Maintainerr/Maintainerr) team.

This repository only hosts the Unraid templates. For everything about Maintainerr itself - features, full documentation, and other install methods - see the [main repository README](https://github.com/Maintainerr/Maintainerr#readme).

## Apps

| App | Template | Image |
Expand Down
Binary file added screenshots/calendar.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/collections.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/overlays.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/rule-config.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/rules.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added screenshots/storage-metrics.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 7 additions & 1 deletion templates/maintainerr.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@
<Shell>sh</Shell>
<Privileged>false</Privileged>
<Icon>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/logo.png</Icon>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/rules.png</Screenshot>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/collections.png</Screenshot>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/rule-config.png</Screenshot>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/overlays.png</Screenshot>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/calendar.png</Screenshot>
<Screenshot>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/screenshots/storage-metrics.png</Screenshot>
<WebUI>http://[IP]:[PORT:6246]</WebUI>
<Overview>Maintainerr is the janitor your media server doesn't have.

Expand All @@ -16,7 +22,7 @@ Maintainerr does the deciding for you. Write rules for the stuff that's just tak
<Support>https://github.com/Maintainerr/Maintainerr/issues</Support>
<Project>https://github.com/Maintainerr/Maintainerr</Project>
<TemplateURL>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/templates/maintainerr.xml</TemplateURL>
<ReadMe>https://raw.githubusercontent.com/Maintainerr/unraid-templates/main/README.md</ReadMe>
<ReadMe>https://raw.githubusercontent.com/Maintainerr/Maintainerr/main/README.md</ReadMe>
<Discord>https://discord.maintainerr.info</Discord>
<Category>MediaApp:Video MediaApp:Other</Category>
<ExtraSearchTerms>plex jellyfin emby radarr sonarr seerr tautulli library cleanup media manager</ExtraSearchTerms>
Expand Down