From e777812ef14245fcf223513ab3389eea1d627c4a Mon Sep 17 00:00:00 2001 From: "Joshua M. Boniface" Date: Fri, 16 Feb 2024 02:41:10 -0500 Subject: Move configuration into YAML document Simplifies changes in the future especially for new releases of e.g. Debian/Ubuntu, and makes the definitions easier to read. --- build.py | 181 +++++++++++---------------------------------------------------- 1 file changed, 32 insertions(+), 149 deletions(-) (limited to 'build.py') diff --git a/build.py b/build.py index 8a8c4f3..a713cd3 100755 --- a/build.py +++ b/build.py @@ -11,6 +11,7 @@ from os import system import os.path from subprocess import run, PIPE import sys +from yaml import load, SafeLoader from git import Repo @@ -255,154 +256,15 @@ def build_docker(jellyfin_version, build_type, _build_arch, _build_version): # Define a map of possible configurations -configurations = { - "debian": { - "def": build_package_deb, - "dockerfile": "debian/docker/Dockerfile", - "imagename": "jellyfin-builder", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - }, - "armhf": { - "PACKAGE_ARCH": "armhf", - }, - }, - "releases": { - "bullseye": "11", - "bookworm": "12", - }, - "cross-gcc": { - "bullseye": "10", - "bookworm": "12", - }, - }, - "ubuntu": { - "def": build_package_deb, - "dockerfile": "debian/docker/Dockerfile", - "imagename": "jellyfin-builder", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - }, - "armhf": { - "PACKAGE_ARCH": "armhf", - }, - }, - "releases": { - "focal": "20.04", - "jammy": "22.04", - "noble": "24.04", - }, - "cross-gcc": { - "focal": "10", - "jammy": "12", - "noble": "12", - }, - }, - "fedora": { - "def": build_package_rpm, - }, - "centos": { - "def": build_package_rpm, - }, - "linux": { - "def": build_linux, - "dockerfile": "portable/Dockerfile", - "imagename": "jellyfin-builder", - "archivetypes": "tar", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - "DOTNET_ARCH": "x64", - }, - "amd64-musl": { - "PACKAGE_ARCH": "amd64-musl", - "DOTNET_ARCH": "musl-x64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - "DOTNET_ARCH": "arm64", - }, - "arm64-musl": { - "PACKAGE_ARCH": "arm64-musl", - "DOTNET_ARCH": "musl-arm64", - }, - "armhf": { - "PACKAGE_ARCH": "armhf", - "DOTNET_ARCH": "arm", - }, - }, - }, - "windows": { - "def": build_windows, - "dockerfile": "portable/Dockerfile", - "imagename": "jellyfin-builder", - "archivetypes": "zip", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - "DOTNET_ARCH": "x64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - "DOTNET_ARCH": "arm64", - }, - }, - }, - "macos": { - "def": build_macos, - "dockerfile": "portable/Dockerfile", - "imagename": "jellyfin-builder", - "archivetypes": "tar", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - "DOTNET_ARCH": "x64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - "DOTNET_ARCH": "arm64", - }, - }, - }, - "portable": { - "def": build_portable, - "dockerfile": "portable/Dockerfile", - "imagename": "jellyfin-builder", - "archivetypes": "tar,zip", - }, - "docker": { - "def": build_docker, - "dockerfile": "docker/Dockerfile", - "imagename": "jellyfin/jellyfin", - "archmaps": { - "amd64": { - "PACKAGE_ARCH": "amd64", - "DOTNET_ARCH": "x64", - "QEMU_ARCH": "x86_64", - "IMAGE_ARCH": "amd64", - }, - "arm64": { - "PACKAGE_ARCH": "arm64", - "DOTNET_ARCH": "arm64", - "QEMU_ARCH": "aarch64", - "IMAGE_ARCH": "arm64v8", - }, - "armhf": { - "PACKAGE_ARCH": "armhf", - "DOTNET_ARCH": "arm", - "QEMU_ARCH": "arm", - "IMAGE_ARCH": "arm32v7", - }, - } - }, +function_definitions = { + "build_package_deb": build_package_deb, + "build_package_rpm": build_package_rpm, + "build_portable": build_portable, + "build_linux": build_linux, + "build_windows": build_windows, + "build_macos": build_macos, + "build_portable": build_portable, + "build_docker": build_docker, } def usage(): @@ -412,16 +274,36 @@ def usage(): print(f" BUILD_ARCH: A valid build OS CPU architecture (empty [portable/docker], amd64, arm64, or armhf)") print(f" BUILD_VERSION: A valid build OS version (packaged OS types only)") +try: + with open("build.yaml") as fh: + configurations = load(fh, Loader=SafeLoader) +except Exception as e: + print(f"Error: Failed to find 'build.yaml' configuration: {e}") + exit(1) + try: jellyfin_version = sys.argv[1] build_type = sys.argv[2] except IndexError: usage() exit(1) + +if build_type not in configurations.keys(): + print(f"Error: The specified build type {build_type} is not valid: choices are: {', '.join(configurations.keys())}") + exit(1) + +try: + if configurations[build_type]['build_function'] not in function_definitions.keys(): + raise ValueError +except Exception: + print(f"Error: The specified build type {build_type} does not define a valid build function in this script.") + exit(1) + try: build_arch = sys.argv[3] except IndexError: build_arch = None + try: build_version = sys.argv[4] except IndexError: @@ -429,5 +311,6 @@ except IndexError: if jellyfin_version == "master": jellyfin_version = datetime.now().strftime("%Y%m%d%H") + print(f"Autocorrecting 'master' version to {jellyfin_version}") -configurations[build_type]['def'](jellyfin_version, build_type, build_arch, build_version) +function_definitions[configurations[build_type]['build_function']](jellyfin_version, build_type, build_arch, build_version) -- cgit