Document private-source public-binary Jellyfin distribution

This commit is contained in:
Sleeps
2026-10-15 16:52:51 +01:00
parent d51e82298a
commit 3b9324d409
+62
View File
@@ -0,0 +1,62 @@
# Distribute the Jellyfin plugin using Gitea
This project is **private** on GitHub and mirrored to private Gitea. Do not make that
source mirror public. Jellyfin needs a **separate public Gitea repository**
containing only a catalog manifest and binary release attachments.
## One-time setup
1. In Gitea (`https://git.trufflemonkey.co.uk`), create an empty **public**
distribution repository, e.g. `sleeps/jellyfin-plugins`. It must not be a
pull mirror. Initialise a default `main` branch (for example with a README).
2. Create a Gitea access token with write access limited to that **public**
distribution repository (repository contents and releases). Store it as a
**GitHub Actions secret**, `GITEA_RELEASE_TOKEN`. Never commit the token.
3. In this private GitHub repository set the Actions **variables**:
- `GITEA_URL` = `https://git.trufflemonkey.co.uk`
- `GITEA_DISTRIBUTION_REPO` = `sleeps/jellyfin-plugins`
4. Before tagging, update `<Version>` in
`jellyfin-plugin/Jellyfin.Plugin.SceneSearch/Jellyfin.Plugin.SceneSearch.csproj`
and merge it to `main`.
5. Create/push the matching tag, e.g. `v0.1.5.0`, on the commit you want
to release. Alternatively run **Publish Jellyfin plugin to Gitea** from
GitHub Actions, choosing an existing version tag.
The workflow builds with .NET 10, packages the plugin DLL, creates the release
on Gitea and generates/updates `manifest.json` in the distribution repository.
Previous versions remain listed. The `targetAbi` is currently 12.0.0.0 to match
the Jellyfin 12 dependencies in the project. Update this if the plugin's Jellyfin
dependency changes.
Then add this repository URL in Jellyfin's **Dashboard → Plugins → Repositories**:
```text
https://git.trufflemonkey.co.uk/sleeps/jellyfin-plugins/raw/branch/main/manifest.json
```
The download ZIP and this raw JSON URL must both work **without signing in**.
Wait until the release workflow has successfully completed before adding
the URL. The private Gitea source mirror URL is *not* a Jellyfin catalog URL.
## Local packaging / verification
```sh
dotnet build jellyfin-plugin/Jellyfin.Plugin.SceneSearch/Jellyfin.Plugin.SceneSearch.csproj -c Release
python3 scripts/publish-jellyfin-plugin.py
unzip -l dist/SceneSearch-0.1.5.0.zip
```
To publish manually, set `RELEASE_TAG`, `GITEA_URL`, `GITEA_REPO` and
`GITEA_TOKEN`, then invoke the script with `--publish`.
## Important limitations
- The plugin requires the **separate Scene Search API/service**; installing the
DLL from Jellyfin does not install Docker, Meilisearch, model files, etc.
- Jellyfin installation/update may require restarting the Jellyfin server.
- The release ZIP contains the plugin DLL, **not the private source tree**.
- Publishing a same-version tag twice may replace the manifest checksum while
retaining a previously uploaded asset. Publish new changes under a **new
version/tag**, rather than reusing an already published version.
- Gitea's public distribution repository must be protected against unauthorised
changes; the token grants release and manifest write permissions.