Refactor scripts (#370)

* Rename debian to deb

* Merge scripts into one

* Add error handler

* Disable wine installation to change electron icon due to error

* Replace debuild with dpkg-buildpackage

* Update workflows with new script

* Fix path
This commit is contained in:
Mahor
2022-07-02 19:42:08 +00:00
committed by GitHub
parent bdb0ad89d4
commit ed180121ff
14 changed files with 285 additions and 264 deletions

View File

@@ -70,13 +70,13 @@ jobs:
- name: make bundle packages - name: make bundle packages
run: | run: |
cd master/scripts cd master/scripts
./windows-bundler.sh win32 ./bundler.sh -o ../../master/server/build/ windows-x86
./windows-bundler.sh win64 ./bundler.sh -o ../../master/server/build/ windows-x64
./debian-packager.sh ./bundler.sh -o ../../master/server/build/ linux-all
./unix-bundler.sh linux-all ./bundler.sh -o ../../master/server/build/ linux-x64
./unix-bundler.sh linux-x64 ./bundler.sh -o ../../master/server/build/ debian-all
./unix-bundler.sh macOS-x64 ./bundler.sh -o ../../master/server/build/ macOS-x64
./unix-bundler.sh macOS-arm64 ./bundler.sh -o ../../master/server/build/ macOS-arm64
- name: Checkout preview branch - name: Checkout preview branch
uses: actions/checkout@v2 uses: actions/checkout@v2

View File

@@ -1,6 +1,7 @@
name: CI Publish name: CI Publish
on: on:
workflow_dispatch:
push: push:
tags: tags:
- "v*" - "v*"
@@ -61,13 +62,13 @@ jobs:
- name: Make bundle packages - name: Make bundle packages
run: | run: |
cd master/scripts cd master/scripts
./windows-bundler.sh win32 ./bundler.sh -o ../../master/server/build/ windows-x86
./windows-bundler.sh win64 ./bundler.sh -o ../../master/server/build/ windows-x64
./debian-packager.sh ./bundler.sh -o ../../master/server/build/ linux-all
./unix-bundler.sh linux-all ./bundler.sh -o ../../master/server/build/ linux-x64
./unix-bundler.sh linux-x64 ./bundler.sh -o ../../master/server/build/ debian-all
./unix-bundler.sh macOS-x64 ./bundler.sh -o ../../master/server/build/ macOS-x64
./unix-bundler.sh macOS-arm64 ./bundler.sh -o ../../master/server/build/ macOS-arm64
- name: Upload Release - name: Upload Release
uses: xresloader/upload-to-github-release@v1 uses: xresloader/upload-to-github-release@v1

268
scripts/bundler.sh Executable file
View File

@@ -0,0 +1,268 @@
#!/bin/bash
# Copyright (C) Contributors to the Suwayomi project
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
main() {
POSITIONAL_ARGS=()
DOWNLOAD_ONLY=false
OUTPUT_DIR=.
while [ "$#" -gt 0 ]; do
case "$1" in
-o|--output-dir)
OUTPUT_DIR="$(readlink -e "$2")"
shift
shift
;;
*)
POSITIONAL_ARGS+=("$1")
shift
;;
esac
done
set -- "${POSITIONAL_ARGS[@]}" # restore positional parameters
OS="$1"
jar="$(ls ../../master/server/build/*.jar | tail -n1)"
release_name="$(echo "${jar%.*}" | sed 's/.jar//' | xargs basename)-$OS"
release_version="$(tmp="${jar%-*}"; echo "${tmp##*-}" | tr -d v)"
#local release_revision_number="$(tmp="${jar%.*}" && echo "${tmp##*-}" | tr -d r)"
electron_version="v14.0.0"
# clean temporary directory on function return
trap "rm -rf $release_name/" RETURN
mkdir "$release_name/"
case "$OS" in
debian-all)
make_deb_package
move_release_to_output_dir
;;
linux-all)
make_linux_bundle
move_release_to_output_dir
;;
linux-x64)
jre="OpenJDK8U-jre_x64_linux_hotspot_8u302b08.tar.gz"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/$jre"
electron="electron-$electron_version-linux-x64.zip"
electron_url="https://github.com/electron/electron/releases/download/$electron_version/$electron"
download_jre_and_electron
make_linux_bundle
move_release_to_output_dir
;;
macOS-x64)
jre="OpenJDK8U-jre_x64_mac_hotspot_8u302b08.tar.gz"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/$jre"
electron="electron-$electron_version-darwin-x64.zip"
electron_url="https://github.com/electron/electron/releases/download/$electron_version/$electron"
download_jre_and_electron
make_macos_bundle
move_release_to_output_dir
;;
macOS-arm64)
jre="zulu8.56.0.23-ca-jre8.0.302-macosx_aarch64.tar.gz"
jre_url="https://cdn.azul.com/zulu/bin/$jre"
electron="electron-$electron_version-darwin-arm64.zip"
electron_url="https://github.com/electron/electron/releases/download/$electron_version/$electron"
download_jre_and_electron
make_macos_bundle
move_release_to_output_dir
;;
windows-x86)
jre="OpenJDK8U-jre_x86-32_windows_hotspot_8u292b10.zip"
jre_url="https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/jdk8u292-b10/$jre"
electron="electron-$electron_version-win32-ia32.zip"
electron_url="https://github.com/electron/electron/releases/download/$electron_version/$electron"
download_jre_and_electron
make_windows_bundle
move_release_to_output_dir
make_windows_package
move_release_to_output_dir
;;
windows-x64)
jre="OpenJDK8U-jre_x64_windows_hotspot_8u302b08.zip"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/jdk8u302-b08/$jre"
electron="electron-$electron_version-win32-x64.zip"
electron_url="https://github.com/electron/electron/releases/download/$electron_version/$electron"
download_jre_and_electron
make_windows_bundle
move_release_to_output_dir
make_windows_package
move_release_to_output_dir
;;
*)
error $LINENO "Unsupported operating system: $OS" 2
;;
esac
}
move_release_to_output_dir() {
# clean up from possible previous runs
if [ -f "$OUTPUT_DIR/$release" ]; then
rm "$OUTPUT_DIR/$release"
fi
mv "$release" "$OUTPUT_DIR/"
}
download_jre_and_electron() {
if [ ! -f "$jre" ]; then
curl -L "$jre_url" -o "$jre"
fi
if [ ! -f "$electron" ]; then
curl -L "$electron_url" -o "$electron"
fi
mkdir -p "$release_name/jre/"
local ext="${jre##*.}"
if [ "$ext" = "zip" ]; then
jre_dir="$(unzip "$jre" | sed -n '2p' | cut -d: -f2 | xargs basename)"
mv "$jre_dir" "$release_name/jre"
else
# --strip-components=1: untar an archive without the root folder
tar xvf "$jre" --strip-components=1 -C "$release_name/jre/"
fi
unzip "$electron" -d "$release_name/electron/"
}
make_linux_bundle() {
cp "$jar" "$release_name/tachidesk-server.jar"
cp "resources/tachidesk-server-browser-launcher.sh" "$release_name/"
cp "resources/tachidesk-server-debug-launcher.sh" "$release_name/"
cp "resources/tachidesk-server-electron-launcher.sh" "$release_name/"
cp "resources/tachidesk-server.desktop" "$release_name/"
cp "../../master/server/src/main/resources/icon/faviconlogo.png" \
"$release_name/tachidesk-server.png"
cp "resources/systemd"/* "$release_name/"
release="$release_name.tar.gz"
tar -I "gzip -9" -cvf "$release" "$release_name/"
}
make_macos_bundle() {
cp "$jar" "$release_name/Tachidesk.jar"
cp "resources/Tachidesk Browser Launcher.command" "$release_name/"
cp "resources/Tachidesk Debug Launcher.command" "$release_name/"
cp "resources/Tachidesk Electron Launcher.command" "$release_name/"
release="$release_name.zip"
zip -9 -r "$release" "$release_name/"
}
# https://wiki.debian.org/SimplePackagingTutorial
# https://www.debian.org/doc/manuals/packaging-tutorial/packaging-tutorial.pdf
make_deb_package() {
make_linux_bundle "$release_name" "$jar"
cp -r "resources/deb/" "$release_name/debian/"
sed -i "s/\$pkgver/$release_version/" "$release_name/debian/changelog"
sed -i "s/\$pkgrel/1/" "$release_name/debian/changelog"
# clean temporary directory on function return
local temp_dir="$(mktemp -d)"
trap "rm -rf $temp_dir" RETURN
#behind $release_version is underscore "_"
local source_dir="tachidesk-server-$release_version"
local upstream_source="tachidesk-server_$release_version.orig.tar.gz"
mv "$release_name/" "$temp_dir/$source_dir/"
mv "$release_name.tar.gz" "$temp_dir/$upstream_source"
sudo apt install devscripts build-essential dh-exec
cd "$temp_dir/$source_dir"
dpkg-buildpackage --no-sign --build=all
cd -
local deb="tachidesk-server_$release_version-1_all.deb"
release="$release_name.deb"
mv "$temp_dir/$deb" "$release"
}
make_windows_bundle() {
## I'll disable this section until someone find a solution to this error:
##E: Unable to correct problems, you have held broken packages.
##./bundler.sh: line 250: wine: command not found
## check if running under github actions
#if [ "$CI" = true ]; then
## change electron executable's icon
#sudo dpkg --add-architecture i386
#wget -qO - https://dl.winehq.org/wine-builds/winehq.key \
#| sudo apt-key add -
#sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
#sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu \
#$(lsb_release -cs) main"
#sudo apt install --install-recommends winehq-stable
#fi
## this script assumes that wine is installed here on out
#local rcedit="rcedit-x85.exe"
#local rcedit_url="https://github.com/electron/rcedit/releases/download/v0.1.1/$rcedit"
## change electron's icon
#if [ ! -f "$rcedit" ]; then
#curl -L "$rcedit_url" -o "$rcedit"
#fi
local icon="../../master/server/src/main/resources/icon/faviconlogo.ico"
#WINEARCH=win32 wine "$rcedit" "$release_name/electron/electron.exe" \
# --set-icon "$icon"
cp "$jar" "$release_name/Tachidesk.jar"
cp "resources/Tachidesk Browser Launcher.bat" "$release_name"
cp "resources/Tachidesk Debug Launcher.bat" "$release_name"
cp "resources/Tachidesk Electron Launcher.bat" "$release_name"
release="$release_name.zip"
zip -9 -r "$release" "$release_name"
}
make_windows_package() {
if [ "$CI" = true ]; then
sudo apt install -y wixl
fi
find "$release_name/jre" \
| wixl-heat --var var.SourceDir -p "$release_name/" \
--directory-ref jre --component-group jre >"$release_name/jre.wxs"
find "$release_name/electron" \
| wixl-heat --var var.SourceDir -p "$release_name/" \
--directory-ref electron --component-group electron >"$release_name/electron.wxs"
local icon="../../master/server/src/main/resources/icon/faviconlogo.ico"
local arch=${OS##*-}
release="$release_name.msi"
wixl -D ProductVersion="$release_version" -D SourceDir="$release_name" \
-D Icon="$icon" --arch "$arch" "resources/msi/tachidesk-server-$arch.wxs" \
"$release_name/jre.wxs" "$release_name/electron.wxs" -o "$release"
}
# Error handler
# set -u: Treat unset variables as an error when substituting.
# set -o pipefail: Prevents errors in pipeline from being masked.
# set -e: Immediatly exit if any command has a non-zero exit status.
# set -E: Inherit the trap ERR function before exiting by set.
#
# set -e is not recommended and unpredictable.
# see https://stackoverflow.com/questions/64786/error-handling-in-bash
# and http://mywiki.wooledge.org/BashFAO/105
set -euo pipefail
error() {
local parent_lineno="$1"
local message="$2"
local code="${3:-1}"
if [ -z "$message" ]; then
echo "$0: line $parent_lineno: exiting with status $code"
else
echo "$0: line $parent_lineno: $message: exiting with status $code"
fi
exit "$code"
}
trap 'error $LINENO ""' ERR
main "$@"; exit

View File

@@ -1,52 +0,0 @@
#!/bin/bash
# Copyright (C) Contributors to the Suwayomi project
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
echo "Creating DEB Package"
pkgname="tachidesk-server"
PkgName="Tachidesk-Server"
jar=$(ls ../server/build/*.jar | tail -n1)
pkgver="$(tmp="${jar%-*}" && echo "${tmp##*-}" | tr -d v)"
pkgrel=1
srcdir="$pkgname-$pkgver" # uses hyphen "-"
srctgz="${pkgname}_$pkgver.orig.tar.gz" # uses underscore "_"
deb="${pkgname}_$pkgver-${pkgrel}_all.deb"
Deb="${PkgName}_$pkgver-${pkgrel}_all.deb"
# Prepare
mkdir "$srcdir/"
cp "$jar" "$srcdir/$pkgname.jar"
cp "resources/$pkgname-browser-launcher.sh" "$srcdir/"
cp "resources/$pkgname-debug-launcher.sh" "$srcdir/"
cp "resources/$pkgname-electron-launcher.sh" "$srcdir/"
cp "resources/$pkgname.desktop" "$srcdir/"
cp "../server/src/main/resources/icon/faviconlogo.png" "$srcdir/$pkgname.png"
cp "resources/systemd"/* "$srcdir/"
GZIP=-9 tar -cvzf "$srctgz" "$srcdir/"
cp -r "resources/debian" "$srcdir/"
sed -i "s/\$pkgver/$pkgver/" "$srcdir/debian/changelog"
sed -i "s/\$pkgrel/$pkgrel/" "$srcdir/debian/changelog"
# Build
mkdir "debuild/"
mv "$srctgz" "$srcdir/" "debuild/"
sudo apt install devscripts build-essential dh-exec
# --lintian-opts --profile are for building Debian packages on Ubuntu
cd "debuild/$srcdir/debian"
debuild -uc -us --lintian-opts --profile debian
cd -
# clean up from possible previous runs
if [ -f "../server/build/$Deb" ]; then
rm "../server/build/$Deb"
fi
mv "debuild/$deb" "../server/build/$Deb"
rm -rf "debuild/"

View File

@@ -1,9 +1,9 @@
#!/bin/sh #!/bin/sh
if [ ! -f /usr/bin/electron ]; then if [ ! -f /usr/bin/electron ]; then
echo "Electron executable was not found! echo "Electron executable was not found!
In order to run this launcher, you need Electron installed." In order to run this launcher, you need Electron installed."
exit 1 exit 1
fi fi
exec /usr/bin/java \ exec /usr/bin/java \

View File

@@ -1,92 +0,0 @@
#!/bin/bash
# Copyright (C) Contributors to the Suwayomi project
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
electron_version="v14.0.0"
arch="$1"
os="$(echo $arch | cut -d '-' -f1)"
if [ "$arch" = "linux-all" ]; then
continue
elif [ "$arch" = "linux-x64" ]; then
jre="OpenJDK8U-jre_x64_linux_hotspot_8u302b08.tar.gz"
jre_release="jdk8u302-b08"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/$jre_release/$jre"
jre_dir="$jre_release-jre"
electron="electron-$electron_version-linux-x64.zip"
elif [ "$arch" = "macOS-x64" ]; then
jre="OpenJDK8U-jre_x64_mac_hotspot_8u302b08.tar.gz"
jre_release="jdk8u302-b08"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/$jre_release/$jre"
jre_dir="$jre_release-jre"
electron="electron-$electron_version-darwin-x64.zip"
elif [ "$arch" = "macOS-arm64" ]; then
jre="zulu8.56.0.23-ca-jre8.0.302-macosx_aarch64.tar.gz"
jre_release="zulu8.56.0.23-ca-jre8.0.302-macosx_aarch64"
jre_url="https://cdn.azul.com/zulu/bin/$jre"
jre_dir="$jre_release/zulu-8.jre"
electron="electron-$electron_version-darwin-arm64.zip"
else
echo "Unsupported arch value: $arch"
exit 1
fi
echo "creating $arch bundle"
jar="$(ls ../server/build/*.jar | tail -n1)"
jar_name="$(echo $jar | cut -d'/' -f4)"
release_name="$(echo $jar_name | sed 's/.jar//')-$arch"
mkdir "$release_name"
# download jre and electron
if [ "$arch" != "linux-all" ]; then
echo "Dealing with jre..."
if [ ! -f "$jre" ]; then
curl -L "$jre_url" -o "$jre"
fi
tar xvf "$jre"
mv "$jre_dir" "$release_name/jre"
echo "Dealing with electron"
if [ ! -f "$electron" ]; then
curl -L "https://github.com/electron/electron/releases/download/$electron_version/$electron" -o "$electron"
fi
unzip "$electron" -d "$release_name/electron"
fi
# copy artifacts
if [ "$os" = "linux" ]; then
cp "$jar" "$release_name/tachidesk-server.jar"
cp "resources/tachidesk-server-browser-launcher.sh" "$release_name"
cp "resources/tachidesk-server-debug-launcher.sh" "$release_name"
cp "resources/tachidesk-server-electron-launcher.sh" "$release_name"
cp "resources/tachidesk-server.desktop" "$release_name"
cp "../server/src/main/resources/icon/faviconlogo.png" "$release_name/tachidesk-server.png"
cp "resources/systemd"/* "$release_name"
elif [ "$os" = "macOS" ]; then
cp "$jar" "$release_name/Tachidesk.jar"
cp "resources/Tachidesk Browser Launcher.command" "$release_name"
cp "resources/Tachidesk Debug Launcher.command" "$release_name"
cp "resources/Tachidesk Electron Launcher.command" "$release_name"
fi
# archive then compress
archive_name=""
if [ "$os" = "linux" ]; then
archive_name="$release_name.tar.gz"
GZIP=-9 tar cvzf "$archive_name" "$release_name"
elif [ "$os" = "macOS" ]; then
archive_name="$release_name.zip"
zip -9 -r "$archive_name" "$release_name"
fi
# clean up from possible previous runs
if [ -f "../server/build/$archive_name" ]; then
rm "../server/build/$archive_name"
fi
rm -rf "$release_name"
mv "$archive_name" "../server/build/"

View File

@@ -1,104 +0,0 @@
#!/bin/bash
# Copyright (C) Contributors to the Suwayomi project
#
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at https://mozilla.org/MPL/2.0/.
electron_version="v14.0.0"
arch=$1
if [ $arch = "win32" ]; then
jre="OpenJDK8U-jre_x86-32_windows_hotspot_8u292b10.zip"
jre_release="jdk8u292-b10"
jre_url="https://github.com/AdoptOpenJDK/openjdk8-binaries/releases/download/$jre_release/$jre"
arch="windows-x86"
electron="electron-$electron_version-win32-ia32.zip"
else
jre="OpenJDK8U-jre_x64_windows_hotspot_8u302b08.zip"
jre_release="jdk8u302-b08"
jre_url="https://github.com/adoptium/temurin8-binaries/releases/download/$jre_release/$jre"
arch="windows-x64"
electron="electron-$electron_version-win32-x64.zip"
fi
jre_dir="$jre_release-jre"
echo "creating windows bundle"
jar=$(ls ../server/build/*.jar | tail -n1)
jar_name=$(echo $jar | cut -d'/' -f4)
release_name=$(echo $jar_name | sed 's/.jar//')-$arch
# make release dir
mkdir $release_name
echo "Dealing with jre..."
if [ ! -f $jre ]; then
curl -L $jre_url -o $jre
fi
unzip $jre
mv $jre_dir $release_name/jre
echo "Dealing with electron"
if [ ! -f $electron ]; then
curl -L "https://github.com/electron/electron/releases/download/$electron_version/$electron" -o $electron
fi
unzip $electron -d $release_name/electron
# change electron's icon
rcedit="rcedit-x86.exe"
if [ ! -f $rcedit ]; then
curl -L "https://github.com/electron/rcedit/releases/download/v1.1.1/$rcedit" -o $rcedit
fi
# check if running under github actions
if [ $CI = true ]; then
# change electron executable's icon
sudo dpkg --add-architecture i386
wget -qO - https://dl.winehq.org/wine-builds/winehq.key | sudo apt-key add -
sudo add-apt-repository ppa:cybermax-dexter/sdl2-backport
sudo apt-add-repository "deb https://dl.winehq.org/wine-builds/ubuntu $(lsb_release -cs) main"
sudo apt install --install-recommends winehq-stable
sudo apt install -y wixl
fi
# this script assumes that wine is installed here on out
WINEARCH=win32 wine $rcedit $release_name/electron/electron.exe --set-icon ../server/src/main/resources/icon/faviconlogo.ico
# copy artifacts
cp $jar $release_name/Tachidesk.jar
cp "resources/Tachidesk Browser Launcher.bat" $release_name
cp "resources/Tachidesk Debug Launcher.bat" $release_name
cp "resources/Tachidesk Electron Launcher.bat" $release_name
zip_name=$release_name.zip
zip -9 -r $zip_name $release_name
# create msi package
msi_name=$release_name.msi
release_ver=$(tmp=${jar%-*} && echo ${tmp##*-} | tr -d v)
icon="../server/src/main/resources/icon/faviconlogo.ico"
find $release_name/jre | wixl-heat --var var.SourceDir -p $release_name/ --directory-ref jre --component-group jre >jre.wxs
find $release_name/electron | wixl-heat --var var.SourceDir -p $release_name/ --directory-ref electron --component-group electron >electron.wxs
if [ $arch = "win32" ]; then
wixl -D ProductVersion=$release_ver -D SourceDir=$release_name -D Icon=$icon \
--arch x86 resources/msi/tachidesk-server-x86.wxs jre.wxs electron.wxs -o $msi_name
else
wixl -D ProductVersion=$release_ver -D SourceDir=$release_name -D Icon=$icon \
--arch x64 resources/msi/tachidesk-server-x64.wxs jre.wxs electron.wxs -o $msi_name
fi
rm -rf $release_name
# clean up from possible previous runs
if [ -f ../server/build/$zip_name ]; then
rm ../server/build/$zip_name
fi
if [ -f ../server/build/$msi_name ]; then
rm ../server/build/$msi_name
fi
mv $zip_name ../server/build/
mv $msi_name ../server/build/