Files
2026-08-21 19:44:17 -07:00

345 lines
9.1 KiB
Markdown

---
include_toc: true
gitea: none
---
What is it?
==========
This is a fork of https://github.com/oddstr13/jellyfin-plugin-repository-manager mainly because I have different opinions on how things should work.
Installing
==========
Use [pipx](https://pipx.pypa.io/latest/how-to/install-pipx.html) or use a virtualenv
From PyPI
---------
```bash
pipx install traitorous-jprm
```
From git
-----------
```
pipx install git+https://gitea.narnian.us/lordwelch/traitorous-jprm
```
From local developement directory
---------------------------------
```
git clone https://gitea.narnian.us/lordwelch/traitorous-jprm
pipx install --editable ./traitorous-jprm
```
Examples
========
Running jprm
------------
```bash
jprm --version
```
```bash
python3 -m jprm --version
```
```bash
python3 jprm.py --version
```
<details>
<summary>
GitHub Release
------------------------------
</summary>
### GitHub Release - Make a plugin
Fork https://github.com/jellyfin/jellyfin-plugin-template
```bash
git clone https://github.com/lordwelch/jellyfin-plugin-template
cd jellyfin-plugin-template
```
### GitHub Release - Migrate to new sln file (optional)
```bash
dotnet sln migrate Jellyfin.Plugin.Template.sln
rm Jellyfin.Plugin.Template.sln
```
### GitHub Release - Get a logo (optional)
```bash
curl -Lo logo.png 'https://github.com/jellyfin/jellyfin-ux/blob/master/logos/PNG-background-space/jellyfin-horizontal--color-on-light.png?raw=true'
```
### GitHub Release - Make your build.yaml
See [Metadata.md](Metadata.md) for explanation
```yaml
name: Template
guid: eb5d7894-8eef-4b36-aa6f-5d124e828ce2
imageUrl: https://github.com/lordwelch/jellyfin-plugin-template/raw/refs/heads/master/logo.png
image: logo.png
targetAbi: 10.11.11.0
framework: net9.0
owner: lordwelch
overview: A template for making jellyfin plugins.
category: Other
description: |
This plugin is an template for making actually useful plugins
```
### GitHub Release - Push changes
```bash
git add .
git commit -m 'Update for use with traitorous-jprm'
git push origin master
```
### GitHub Release - Make a temporary directory for build assets (optional)
```bash
mkdir assets
cd assets
```
### GitHub Release - Build and package the plugin
```bash
jprm --verbosity debug repo build -c 'this is a changelog' --version 6.0.0.0 ./manifest.json ../
```
### GitHub Release - Create a release on github
```bash
gh release create -R lordwelch/jellyfin-plugin-template 6.0.0.0 --title "v6.0.0.0" --notes "This is an example release for demonstrating https://gitea.narnian.us/lordwelch/traitorous-jprm" manifest.json ./artifacts/*
```
### GitHub Release - Activate repo in Jellyfin
Plugin repository url for this example is: https://github.com/lordwelch/jellyfin-plugin-template/releases/latest/download/manifest.json
</details>
<details>
<summary>
Gitea Release
------------------------------
</summary>
### Gitea Release - Make a plugin
Replace https://gitea.narnian.us/lordwelch/jellyfin-plugin-template with your gitea repository
```bash
git clone https://github.com/jellyfin/jellyfin-plugin-template
cd jellyfin-plugin-template
git remote set-url origin https://gitea.narnian.us/lordwelch/jellyfin-plugin-template
```
### Gitea Release - Migrate to new sln file (optional)
```bash
dotnet sln migrate Jellyfin.Plugin.Template.sln
rm Jellyfin.Plugin.Template.sln
```
### Gitea Release - Get a logo (optional)
```bash
curl -Lo logo.png 'https://github.com/jellyfin/jellyfin-ux/blob/master/logos/PNG-background-space/jellyfin-horizontal--color-on-light.png?raw=true'
```
### Gitea Release - Make your build.yaml
See [Metadata.md](Metadata.md) for explanation of properties
> 📝 **Note:** https://gitea.narnian.us doesn't let you view raw files until you login, so I upload the logo to the release so that this actually works
```yaml
name: Template
guid: eb5d7894-8eef-4b36-aa6f-5d124e828ce2
imageUrl: https://gitea.narnian.us/lordwelch/jellyfin-plugin-template/releases/download/latest/logo.png
image: logo.png
targetAbi: 10.11.11.0
framework: net9.0
owner: lordwelch
overview: A template for making jellyfin plugins.
category: Other
description: |
This plugin is an template for making actually useful plugins
```
### Gitea Release - Push changes
```bash
git add .
git commit -m 'Update for use with traitorous-jprm'
git push origin master
```
### Gitea Release - Make a temporary directory for build assets (optional)
```bash
mkdir assets
cd assets
```
### Gitea Release - Build and package the plugin
```bash
jprm --verbosity debug repo build -c 'this is a changelog' --version 6.0.0.0 ./manifest.json ../
```
### Gitea Release - Create a release on Gitea
```bash
tea release create --tag 6.0.0.0 --title "v6.0.0.0" --note "This is an example release for demonstrating https://gitea.narnian.us/lordwelch/traitorous-jprm"
tea release asset create 6.0.0.0 ../logo.png manifest.json artifacts/*
```
OR
```bash
response=$(
curl --request POST \
--url https://gitea.narnian.us/api/v1/repos/lordwelch/jellyfin-plugin-template/releases \
--header 'Authorization: token <api key>' \
--header 'Content-Type: application/json' \
--data '{ "body": "This is an example release for demonstrating https://gitea.narnian.us/lordwelch/traitorous-jprm", "draft": false, "name": "v6.0.0.0", "prerelease": false, "tag_name": "6.0.0.0"}'
)
upload_url=${response##*\"upload_url\":\"} # removes everything before the json value we need "upload_url"
upload_url=${upload_url%%\"*} # removes everything after the json value we need
for filename in ../logo.png manifest.json artifacts/*; do
curl --request POST \
--url "$upload_url?name=${filename##*/}" \
--header 'Authorization: token <api key>' \
--header 'Content-Type: application/octet-stream' \
--data-binary "@${filename}"
done
```
### Gitea Release - Activate repo in Jellyfin
Plugin repository url for this example is: https://gitea.narnian.us/lordwelch/jellyfin-plugin-template/releases/download/latest/manifest.json
</details>
<details>
<summary>
Gitea Packages
------------------------------
</summary>
### Gitea Packages - Make a plugin
Replace https://gitea.narnian.us/lordwelch/jellyfin-plugin-template with your gitea repository
```bash
git clone https://github.com/jellyfin/jellyfin-plugin-template
cd jellyfin-plugin-template
git remote set-url origin https://gitea.narnian.us/lordwelch/jellyfin-plugin-template
```
### Gitea Packages - Migrate to new sln file (optional)
```bash
dotnet sln migrate Jellyfin.Plugin.Template.sln
rm Jellyfin.Plugin.Template.sln
```
### Gitea Packages - Get a logo (optional)
```bash
curl -Lo logo.png 'https://github.com/jellyfin/jellyfin-ux/blob/master/logos/PNG-background-space/jellyfin-horizontal--color-on-light.png?raw=true'
```
### Gitea Packages - Make your build.yaml
See [Metadata.md](Metadata.md) for explanation of properties
(https://gitea.narnian.us doesn't let you view raw files until you login, so I upload the logo and manifest to a package version called 'assets')
```yaml
name: Template
guid: eb5d7894-8eef-4b36-aa6f-5d124e828ce2
imageUrl: https://gitea.narnian.us/api/packages/lordwelch/generic/jellyfin-plugin-template/assets/oidc-authentication_6.0.0.0.zip
image: logo.png
targetAbi: 10.11.11.0
framework: net9.0
owner: lordwelch
overview: A template for making jellyfin plugins.
category: Other
description: |
This plugin is an template for making actually useful plugins
```
### Gitea Packages - Push changes
```bash
git add .
git commit -m 'Update for use with traitorous-jprm'
git push origin master
```
### Gitea Packages - Make a temporary directory for build assets (optional)
```bash
mkdir assets
cd assets
```
### Gitea Packages - Build and package the plugin
Note the custom url format used here
```bash
jprm --verbosity debug repo build --url 'https://{hostname}/api/packages/{owner}/generic/{project}/{version}/{slug}_{version}.zip' -c 'this is a changelog' --version 6.0.0.0 ./manifest.json ../
```
### Gitea Packages - Create a package on Gitea
```bash
function upload_package() {
token=$1
package_name=$2
version=$3
filename=$4
# First delete any package that exists. Needed for if we upload a manifest for the next version
url="https://gitea.narnian.us/api/packages/lordwelch/generic/$package_name/$version/${filename##*/}"
curl -X DELETE \
--header "Authorization: token $token" \
"$url" >/dev/null 2>&1
curl -X PUT \
--header "Authorization: token $token" \
"$url" \
--upload-file "$filename"
}
for file in artifacts/*; do
upload_package '<api key>' jellyfin-plugin-template 6.0.0.0 "$file"
done
upload_package '<api key>' jellyfin-plugin-template assets ./manifest.json
upload_package '<api key>' jellyfin-plugin-template assets ../logo.png
```
### Gitea Packages - Link package to repository (optional)
Go to https://gitea.narnian.us/lordwelch/-/packages/settings/generic/jellyfin-plugin-template and link to jellyfin-plugin-template
### Gitea Packages - Activate repo in Jellyfin
Plugin repository url for this example is: https://gitea.narnian.us/api/packages/lordwelch/generic/jellyfin-plugin-template/assets/manifest.json
</details>
Why is it called traitorous-jprm?
==========
Because I own the traitorous.enterprises domain.
And if I put traitorous in the name people probably won't take it too seriously