diff options
author | Joshua M. Boniface <joshua@boniface.me> | 2024-02-11 14:34:21 -0500 |
---|---|---|
committer | Joshua M. Boniface <joshua@boniface.me> | 2024-02-11 14:35:17 -0500 |
commit | 356439e9a049077a1031330aa33f0c5f3f8a41af (patch) | |
tree | a7e174df9fe9a0e403a52656130975107368fac4 | |
parent | Remove blank line (diff) | |
download | jellyfin-packaging-356439e9a049077a1031330aa33f0c5f3f8a41af.tar.gz jellyfin-packaging-356439e9a049077a1031330aa33f0c5f3f8a41af.tar.bz2 jellyfin-packaging-356439e9a049077a1031330aa33f0c5f3f8a41af.zip |
Add portable linux build
-rwxr-xr-x | build.py | 47 | ||||
l--------- | linux/Dockerfile | 1 | ||||
-rwxr-xr-x | linux/build.sh | 37 |
3 files changed, 84 insertions, 1 deletions
@@ -78,6 +78,27 @@ def build_package(jvers, btype, barch, bvers): pass +def build_linux(jvers, btype, barch, _bvers): + try: + PARCH = configurations[btype]['archmaps'][barch]['PARCH'] if barch in configurations[btype]['archmaps'].keys() else None + if PARCH is None: + raise ValueError(f"{barch} is not a valid {btype} {bvers} architecture in {configurations[btype]['archmaps'].keys()}") + DARCH = configurations[btype]['archmaps'][barch]['DARCH'] + except Exception as e: + print(f"Invalid/unsupported arguments: {e}") + exit(1) + + # Set the dockerfile + dockerfile = configurations[btype]["dockerfile"] + + # Use a unique docker image name for consistency + imagename = f"{configurations[btype]['imagename']}-{jvers}_{barch}-{btype}" + + # Build the dockerfile and packages + os.system(f"docker build --progress=plain --file {repo_root_dir}/{dockerfile} --tag {imagename} {repo_root_dir}") + os.system(f"docker run --rm --volume {repo_root_dir}:/jellyfin --volume {repo_root_dir}/out/{btype}:/dist --env JVERS={jvers} --env PARCH={PARCH} --env DARCH={DARCH} --name {imagename} {imagename}") + + def build_portable(jvers, btype, _barch, _bvers): # Set the dockerfile dockerfile = configurations[btype]["dockerfile"] @@ -207,7 +228,31 @@ configurations = { "def": build_package, }, "linux": { - "def": build_package, + "def": build_linux, + "dockerfile": "linux/Dockerfile", + "imagename": "jellyfin-builder", + "archmaps": { + "amd64": { + "PARCH": "amd64", + "DARCH": "x64", + }, + "amd64-musl": { + "PARCH": "amd64-musl", + "DARCH": "musl-x64", + }, + "arm64": { + "PARCH": "arm64", + "DARCH": "arm64", + }, + "arm64-musl": { + "PARCH": "arm64-musl", + "DARCH": "musl-arm64", + }, + "armhf": { + "PARCH": "armhf", + "DARCH": "arm", + }, + }, }, "windows": { "def": build_package, diff --git a/linux/Dockerfile b/linux/Dockerfile new file mode 120000 index 0000000..3bf4a35 --- /dev/null +++ b/linux/Dockerfile @@ -0,0 +1 @@ +../portable/Dockerfile
\ No newline at end of file diff --git a/linux/build.sh b/linux/build.sh new file mode 100755 index 0000000..8af10ee --- /dev/null +++ b/linux/build.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +#= Debian .deb builder + +set -o errexit +set -o xtrace + +# Create the intermediate build dir +BUILD_DIR="/build" +mkdir -p ${BUILD_DIR} + +# Move to source directory +pushd "${SOURCE_DIR}" + +# Build server +pushd jellyfin-server +dotnet publish Jellyfin.Server --configuration Release --self-contained --runtime linux-${DARCH} --output ${BUILD_DIR}/ -p:DebugSymbols=false -p:DebugType=none -p:UseAppHost=false +popd + +# Build web +pushd jellyfin-web +npm ci --no-audit --unsafe-perm +npm run build:production +mv dist ${BUILD_DIR}/jellyfin-web +popd + +mkdir -p "${ARTIFACT_DIR}/" + +pushd ${BUILD_DIR} +tar -czf "${ARTIFACT_DIR}"/jellyfin_${JVERS}-${PARCH}.tar.gz . +popd + +# Clean up any lingering artifacts +make -f debian/rules clean +rm -rf ${BUILD_DIR} + +popd |