#!/usr/bin/env sh source ../common.build.sh VERSION=`get_version ../..` # TODO get the version in the package automatically. And using the changelog to decide the debian package suffix version. # Build a Jellyfin .rpm file with Docker on Linux # Places the output .rpm file in the parent directory set -o errexit set -o xtrace set -o nounset package_temporary_dir="`pwd`/pkg-dist-tmp" output_dir="`pwd`/pkg-dist" pkg_src_dir="`pwd`/pkg-src" current_user="`whoami`" image_name="jellyfin-rpmbuild" cleanup() { set +o errexit docker image rm $image_name --force rm -rf "$package_temporary_dir" rm -rf "$pkg_src_dir/jellyfin-${VERSION}.tar.gz" } trap cleanup EXIT INT GNU_TAR=1 mkdir -p "$package_temporary_dir" echo "Bundling all sources for RPM build." tar \ --transform "s,^\.,jellyfin-${VERSION}" \ --exclude='.git*' \ --exclude='**/.git' \ --exclude='**/.hg' \ --exclude='**/.vs' \ --exclude='**/.vscode' \ --exclude='deployment' \ --exclude='**/bin' \ --exclude='**/obj' \ --exclude='**/.nuget' \ --exclude='*.deb' \ --exclude='*.rpm' \ -Jcvf \ "$package_temporary_dir/jellyfin-${VERSION}.tar.xz" \ -C "../.." \ ./ || true && GNU_TAR=0 if [ $GNU_TAR -eq 0 ]; then echo "The installed tar binary did not support --transform. Using workaround." mkdir -p "$package_temporary_dir/jellyfin-${VERSION}" # Not GNU tar tar \ --exclude='.git*' \ --exclude='**/.git' \ --exclude='**/.hg' \ --exclude='**/.vs' \ --exclude='**/.vscode' \ --exclude='deployment' \ --exclude='**/bin' \ --exclude='**/obj' \ --exclude='**/.nuget' \ --exclude='*.deb' \ --exclude='*.rpm' \ -zcf \ "$package_temporary_dir/jellyfin-${VERSION}/jellyfin.tar.gz" \ -C "../.." \ ./ echo "Extracting filtered package." tar -xzf "$package_temporary_dir/jellyfin-${VERSION}/jellyfin.tar.gz" -C "$package_temporary_dir/jellyfin-${VERSION}" echo "Removing filtered package." rm "$package_temporary_dir/jellyfin-${VERSION}/jellyfin.tar.gz" echo "Repackaging package into final tarball." tar -zcf "$pkg_src_dir/jellyfin-${VERSION}.tar.gz" -C "$package_temporary_dir" "jellyfin-${VERSION}" fi docker build ../.. -t "$image_name" -f ./Dockerfile mkdir -p "$output_dir" docker run --rm -v "$package_temporary_dir:/temp" "$image_name" sh -c 'find /build/rpmbuild -maxdepth 3 -type f -name "jellyfin*.rpm" -exec mv {} /temp \;' chown -R "$current_user" "$package_temporary_dir" \ || sudo chown -R "$current_user" "$package_temporary_dir" mv "$package_temporary_dir"/*.rpm "$output_dir"