Explorar o código

Move web-build into Debian build rules

This removes the convoluted steps in docker-build.sh in favour of
integrating the web-build sequence into the Debian rules file
explicitly. This will allow the web-build to work properly outside of
the boutique Docker container we build, thus allowing it to be build
properly directly on a target system with dpkg-buildpackage.
Joshua Boniface %!s(int64=5) %!d(string=hai) anos
pai
achega
07d45e82f0

+ 1 - 7
deployment/debian-package-x64/Dockerfile

@@ -12,7 +12,7 @@ ENV ARCH=amd64
 
 # Prepare Debian build environment
 RUN apt-get update \
- && apt-get install -y apt-transport-https debhelper gnupg wget devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
+ && apt-get install -y apt-transport-https debhelper gnupg wget npm devscripts mmv libc6-dev libcurl4-openssl-dev libfontconfig1-dev libfreetype6-dev libssl-dev libssl1.1 liblttng-ust0
 
 # Install dotnet repository
 # https://dotnet.microsoft.com/download/linux-package-manager/debian9/sdk-current
@@ -21,12 +21,6 @@ RUN wget https://download.visualstudio.microsoft.com/download/pr/228832ea-805f-4
  && tar -xzf dotnet-sdk.tar.gz -C dotnet-sdk \
  && ln -s $( pwd )/dotnet-sdk/dotnet /usr/bin/dotnet
 
-# Install yarn package manager
-RUN wget -q -O- https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
- && echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
- && apt update \
- && apt install -y yarn
-
 # Link to docker-build script
 RUN ln -sf ${PLATFORM_DIR}/docker-build.sh /docker-build.sh
 

+ 0 - 14
deployment/debian-package-x64/docker-build.sh

@@ -11,20 +11,6 @@ pushd ${SOURCE_DIR}
 # Remove build-dep for dotnet-sdk-2.2, since it's not a package in this image
 sed -i '/dotnet-sdk-2.2,/d' debian/control
 
-# Clone down and build Web frontend
-web_build_dir="$( mktemp -d )"
-web_target="${SOURCE_DIR}/MediaBrowser.WebDashboard/jellyfin-web"
-git clone https://github.com/jellyfin/jellyfin-web.git ${web_build_dir}/
-pushd ${web_build_dir}
-if [[ -n ${web_branch} ]]; then
-    checkout -b origin/${web_branch}
-fi
-yarn install
-mkdir -p ${web_target}
-mv dist/* ${web_target}/
-popd
-rm -rf ${web_build_dir}
-
 # Build DEB
 dpkg-buildpackage -us -uc
 

+ 3 - 1
deployment/debian-package-x64/pkg-src/control

@@ -8,7 +8,9 @@ Build-Depends:  debhelper (>= 9),
                 libcurl4-openssl-dev,
                 libfontconfig1-dev,
                 libfreetype6-dev,
-                libssl-dev
+                libssl-dev,
+                wget,
+                npm | nodejs
 Standards-Version: 3.9.4
 Homepage: https://jellyfin.media/
 Vcs-Git: https://github.org/jellyfin/jellyfin.git

+ 15 - 0
deployment/debian-package-x64/pkg-src/rules

@@ -2,6 +2,8 @@
 CONFIG := Release
 TERM := xterm
 SHELL := /bin/bash
+WEB_TARGET := $(CURDIR)/MediaBrowser.WebDashboard/jellyfin-web
+WEB_VERSION := $(shell sed -n -e 's/^version: "\(.*\)"/\1/p' $(CURDIR)/build.yaml)
 
 HOST_ARCH := $(shell arch)
 BUILD_ARCH := ${DEB_HOST_MULTIARCH}
@@ -39,12 +41,25 @@ override_dh_auto_test:
 override_dh_clistrip:
 
 override_dh_auto_build:
+	echo $(WEB_VERSION)
+	# Clone down and build Web frontend
+	mkdir -p $(WEB_TARGET)
+	wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/v$(WEB_VERSION).tar.gz || wget -O web-src.tgz https://github.com/jellyfin/jellyfin-web/archive/master.tar.gz
+	mkdir -p $(CURDIR)/web
+	tar -xzf web-src.tgz -C $(CURDIR)/web/ --strip 1
+	cd $(CURDIR)/web/ && npm install yarn
+	cd $(CURDIR)/web/ && node_modules/yarn/bin/yarn install
+	mv $(CURDIR)/web/dist/* $(WEB_TARGET)/
+	# Build the application
 	dotnet publish --configuration $(CONFIG) --output='$(CURDIR)/usr/lib/jellyfin/bin' --self-contained --runtime $(DOTNETRUNTIME) \
 		"-p:GenerateDocumentationFile=false;DebugSymbols=false;DebugType=none" Jellyfin.Server
 
 override_dh_auto_clean:
 	dotnet clean -maxcpucount:1 --configuration $(CONFIG) Jellyfin.Server || true
+	rm -f  '$(CURDIR)/web-src.tgz'
 	rm -rf '$(CURDIR)/usr'
+	rm -rf '$(CURDIR)/web'
+	rm -rf '$(WEB_TARGET)'
 
 # Force the service name to jellyfin even if we're building jellyfin-nightly
 override_dh_installinit: