2019-01-18 23:22:41 -07:00
# Jellyfin Packaging
2019-01-10 11:45:21 -07:00
2019-01-18 23:22:41 -07:00
This directory contains the packaging configuration of Jellyfin for multiple platforms. The specification is below; all package platforms must follow the specification to be compatable with the central `build` script.
2019-01-10 11:45:21 -07:00
2019-01-18 23:22:41 -07:00
## Package List
### Operating System Packages
* `debian-package-x64` : Package for Debian and Ubuntu amd64 systems.
* `fedora-package-x64` : Package for Fedora, CentOS, and Red Hat Enterprise Linux amd64 systems.
### Portable Builds (archives)
* `debian-x64` : Portable binary archive for Debian amd64 systems.
* `ubuntu-x64` : Portable binary archive for Ubuntu amd64 systems.
* `linux-x64` : Portable binary archive for generic Linux amd64 systems.
* `osx-x64` : Portable binary archive for MacOS amd64 systems.
* `win-x64` : Portable binary archive for Windows amd64 systems.
* `win-x86` : Portable binary archive for Windows i386 systems.
### Other Builds
These builds are not necessarily run from the `build` script, but are present for other platforms.
* `framework` : Compiled `.dll` for use with .NET Core runtime on any system.
* `docker` : Docker manifests for auto-publishing.
* `unraid` : unRaid Docker template; not built by `build` but imported into unRaid directly.
* `win-generic` : Portable binary for generic Windows systems.
## Package Specification
2019-01-19 16:48:48 -07:00
### Dependencies
* If a platform requires additional build dependencies, the required binary names, i.e. to validate `which <binary>` , should be specified in a `dependencies.txt` file inside the platform directory.
* Each dependency should be present on its own line.
2019-01-18 23:22:41 -07:00
### Action Scripts
2019-01-19 16:48:48 -07:00
* Actions are defined in BASH scripts with the name `<action>.sh` within the platform directory.
2019-01-18 23:22:41 -07:00
* The list of valid actions are:
1. `build` : Builds a set of binaries.
2. `package` : Assembles the compiled binaries into a package.
3. `sign` : Performs signing actions on a package.
4. `publish` : Performs a publishing action for a package.
5. `clean` : Cleans up any artifacts from the previous actions.
* All package actions are optional, however at least one should generate output files, and any that do should contain a `clean` action.
* Actions are executed in the order specified above, and later actions may depend on former actions.
* Actions except for `clean` should `set -o errexit` to terminate on failed actions.
* The `clean` action should always `exit 0` even if no work is done or it fails.
2019-02-05 16:40:31 -07:00
* The `clean` action can be passed a variable as argument 1, named `keep_artifacts` . It is indended to handle situations when the user runs `build --keep-artifacts` and should be handled intelligently. Usually, this is used to preserve Docker images while still removing temporary directories.
2019-01-18 23:22:41 -07:00
### Output Files
* Upon completion of the defined actions, at least one output file must be created in the `<platform>/pkg-dist` directory.
* Output files will be moved to the directory `jellyfin-build/<platform>` one directory above the repository root upon completion.
### Common Functions
* A number of common functions are defined in `deployment/common.build.sh` for use by platform scripts.
* Each action script should import the common functions to define a number of standard variables.
* The common variables are:
* `ROOT` : The Jellyfin repostiory root, usually `../..` .
* `CONFIG` : The .NET config, usually `Release` .
* `DOTNETRUNTIME` : The .NET `--runtime` value, platform-dependent.
* `OUTPUT_DIR` : The intermediate output dir, usually `./dist/jellyfin_${VERSION}` .
* `BUILD_CONTEXT` : The Docker build context, usually `../..` .
* `DOCKERFILE` : The Dockerfile, usually `Dockerfile` in the platform directory.
* `IMAGE_TAG` : A tag for the built Docker image.
* `PKG_DIR` : The final binary output directory for collection, invariably `pkg-dist` .
* `ARCHIVE_CMD` : The compression/archive command for release archives, usually `tar -xvzf` or `zip` .
#### `get_version`
Reads the version information from `SharedVersion.cs` .
**Arguments:** `ROOT`
#### `build_jellyfin`
Build a standard self-contained binary in the current OS context.
**Arguments:** `ROOT` `CONFIG` `DOTNETRUNTIME` `OUTPUT_DIR`
#### `build_jellyfin_docker`
Build a standard self-contained binary in a Docker image.
**Arguments:** `BUILD_CONTEXT` `DOCKERFILE` `IMAGE_TAG`
#### `clean_jellyfin`
Clean up a build for housekeeping.
**Arguments:** `ROOT` `CONFIG` `OUTPUT_DIR` `PKG_DIR`
#### `package_portable`
Produce a compressed archive.
**Arguments:** `ROOT` `OUTPUT_DIR` `PKG_DIR` `ARCHIVE_CMD`
2019-01-10 11:45:21 -07:00