diff --git a/CHANGELOG.md b/CHANGELOG.md index 475b7474d..b43a0e087 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/). ### Fixed - (**Extension/API**) Fix GQL handling of extensions without an extension store +- (**Build/Bundler**) Fix build continuing if errors happen ## [v2.3.2223] + [WebUI: v20260509.01] - 2026-06-30 diff --git a/scripts/bundler.sh b/scripts/bundler.sh index ec636f0d1..ace3d1dd1 100755 --- a/scripts/bundler.sh +++ b/scripts/bundler.sh @@ -26,7 +26,7 @@ main() { set -- "${POSITIONAL_ARGS[@]}" OS="$1" - JAR="$(ls server/build/*.jar | tail -n1)" + JAR="$(ls server/build/*.jar | tail -n1)" || error $LINENO "No JAR found in server/build/" 1 RELEASE_NAME="$(echo "${JAR%.*}" | xargs basename)-$OS" RELEASE_VERSION=$(echo "$JAR" | grep -oP "v\K[0-9]+\.[0-9]+\.[0-9]+") #RELEASE_REVISION_NUMBER="$(tmp="${JAR%.*}" && echo "${tmp##*-}" | tr -d r)" @@ -34,12 +34,12 @@ main() { # clean temporary directory on function return trap "rm -rf $RELEASE_NAME/" RETURN - mkdir "$RELEASE_NAME/" + mkdir "$RELEASE_NAME/" || error $LINENO "Failed to create release directory" 1 download_launcher if [ ! -f scripts/resources/catch_abort.so ]; then - gcc -fPIC -shared scripts/resources/catch_abort.c -lpthread -o scripts/resources/catch_abort.so + gcc -fPIC -shared scripts/resources/catch_abort.c -lpthread -o scripts/resources/catch_abort.so || error $LINENO "Failed to compile catch_abort" 1 fi JRE_ZULU="25.34.17_25.0.3" @@ -67,7 +67,7 @@ main() { linux-assets) RELEASE="$RELEASE_NAME.tar.gz" copy_linux_package_assets_to "$RELEASE_NAME/" - tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" + tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" || error $LINENO "Failed to create tar.gz" 1 move_release_to_output_dir ;; linux-x64) @@ -145,52 +145,55 @@ move_release_to_output_dir() { if [ -f "$OUTPUT_DIR/$RELEASE" ]; then rm "$OUTPUT_DIR/$RELEASE" fi - mv "$RELEASE" "$OUTPUT_DIR/" + mv "$RELEASE" "$OUTPUT_DIR/" || error $LINENO "Failed to move release to output dir" 1 } download_launcher() { LAUNCHER_URL=$(curl -sf "https://api.github.com/repos/Suwayomi/Suwayomi-Launcher/releases/latest" | grep "browser_download_url" | grep ".jar" | head -n 1 | cut -d '"' -f 4) - curl -fL "$LAUNCHER_URL" -o "Suwayomi-Launcher.jar" - mv "Suwayomi-Launcher.jar" "$RELEASE_NAME/Suwayomi-Launcher.jar" + if [ -z "$LAUNCHER_URL" ]; then + error $LINENO "Failed to determine launcher URL from GitHub API" 1 + fi + curl -fL "$LAUNCHER_URL" -o "Suwayomi-Launcher.jar" || error $LINENO "Failed to download launcher JAR" 1 + mv "Suwayomi-Launcher.jar" "$RELEASE_NAME/Suwayomi-Launcher.jar" || error $LINENO "Failed to move launcher JAR" 1 } download_jogamp() { local platform="$1" if [ ! -f jogamp-all-platforms.7z ]; then - curl -f "https://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z" -o jogamp-all-platforms.7z + curl -f "https://jogamp.org/deployment/jogamp-current/archive/jogamp-all-platforms.7z" -o jogamp-all-platforms.7z || error $LINENO "Failed to download jogamp archive" 1 fi - 7z x jogamp-all-platforms.7z "jogamp-all-platforms/lib/$platform/" + 7z x jogamp-all-platforms.7z "jogamp-all-platforms/lib/$platform/" || error $LINENO "Failed to extract jogamp archive" 1 mkdir -p "$RELEASE_NAME/natives/" - mv jogamp-all-platforms/lib/* "$RELEASE_NAME/natives/" + mv jogamp-all-platforms/lib/* "$RELEASE_NAME/natives/" || error $LINENO "Failed to move natives" 1 rm -rf jogamp-all-platforms } download_electron() { if [ ! -f "$ELECTRON" ]; then - curl -fL "$ELECTRON_URL" -o "$ELECTRON" + curl -fL "$ELECTRON_URL" -o "$ELECTRON" || error $LINENO "Failed to download electron" 1 fi - unzip "$ELECTRON" -d "$RELEASE_NAME/electron/" + unzip "$ELECTRON" -d "$RELEASE_NAME/electron/" || error $LINENO "Failed to extract electron" 1 } setup_jre() { if [ -d "jre" ]; then - chmod +x ./jre/bin/java - chmod +x ./jre/lib/jspawnhelper - mv "jre" "$RELEASE_NAME/jre" + chmod +x ./jre/bin/java || error $LINENO "Failed to set java executable permission" 1 + chmod +x ./jre/lib/jspawnhelper || error $LINENO "Failed to set jspawnhelper executable permission" 1 + mv "jre" "$RELEASE_NAME/jre" || error $LINENO "Failed to move jre" 1 else if [ ! -f "$JRE" ]; then - curl -fL "$JRE_URL" -o "$JRE" + curl -fL "$JRE_URL" -o "$JRE" || error $LINENO "Failed to download JRE" 1 fi local ext="${JRE##*.}" if [ "$ext" = "zip" ]; then - unzip "$JRE" + unzip "$JRE" || error $LINENO "Failed to extract JRE zip" 1 else - tar xvf "$JRE" + tar xvf "$JRE" || error $LINENO "Failed to extract JRE tar" 1 fi - mv "$JRE_DIR" "$RELEASE_NAME/jre" + mv "$JRE_DIR" "$RELEASE_NAME/jre" || error $LINENO "Failed to move extracted JRE" 1 fi } @@ -198,31 +201,31 @@ copy_linux_package_assets_to() { local output_dir output_dir="$(readlink -e "$1" || exit 1)" - cp "scripts/resources/pkg/suwayomi-server.sh" "$output_dir/" - cp "scripts/resources/pkg/suwayomi-server.desktop" "$output_dir/" - cp "scripts/resources/pkg/suwayomi-launcher.sh" "$output_dir/" - cp "scripts/resources/pkg/suwayomi-launcher.desktop" "$output_dir/" - cp "scripts/resources/pkg/systemd"/* "$output_dir/" + cp "scripts/resources/pkg/suwayomi-server.sh" "$output_dir/" || error $LINENO "Failed to copy server script" 1 + cp "scripts/resources/pkg/suwayomi-server.desktop" "$output_dir/" || error $LINENO "Failed to copy server desktop file" 1 + cp "scripts/resources/pkg/suwayomi-launcher.sh" "$output_dir/" || error $LINENO "Failed to copy launcher script" 1 + cp "scripts/resources/pkg/suwayomi-launcher.desktop" "$output_dir/" || error $LINENO "Failed to copy launcher desktop file" 1 + cp "scripts/resources/pkg/systemd"/* "$output_dir/" || error $LINENO "Failed to copy systemd files" 1 cp "server/src/main/resources/icon/faviconlogo-128.png" \ - "$output_dir/suwayomi-server.png" + "$output_dir/suwayomi-server.png" || error $LINENO "Failed to copy icon" 1 } make_linux_bundle() { mkdir "$RELEASE_NAME/bin" - cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" - cp "scripts/resources/suwayomi-launcher.sh" "$RELEASE_NAME/" - cp "scripts/resources/suwayomi-server.sh" "$RELEASE_NAME/" - cp "scripts/resources/catch_abort.so" "$RELEASE_NAME/bin/" + cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" || error $LINENO "Failed to copy server jar" 1 + cp "scripts/resources/suwayomi-launcher.sh" "$RELEASE_NAME/" || error $LINENO "Failed to copy launcher script" 1 + cp "scripts/resources/suwayomi-server.sh" "$RELEASE_NAME/" || error $LINENO "Failed to copy server script" 1 + cp "scripts/resources/catch_abort.so" "$RELEASE_NAME/bin/" || error $LINENO "Failed to copy catch_abort" 1 - tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" + tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" || error $LINENO "Failed to create tar.gz" 1 } make_macos_bundle() { mkdir "$RELEASE_NAME/bin" - cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" - cp "scripts/resources/Suwayomi Launcher.command" "$RELEASE_NAME/" + cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" || error $LINENO "Failed to copy server jar" 1 + cp "scripts/resources/Suwayomi Launcher.command" "$RELEASE_NAME/" || error $LINENO "Failed to copy launcher command" 1 - tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" + tar -I "gzip -9" -cvf "$RELEASE" "$RELEASE_NAME/" || error $LINENO "Failed to create tar.gz" 1 } # https://wiki.debian.org/SimplePackagingTutorial @@ -233,28 +236,28 @@ make_deb_package() { #behind $RELEASE_VERSION is underscore "_" local upstream_source="suwayomi-server_$RELEASE_VERSION.orig.tar.gz" - mkdir "$RELEASE_NAME/$source_dir/" - mv "$RELEASE_NAME/natives" "$RELEASE_NAME/$source_dir/natives" - mv "$RELEASE_NAME/Suwayomi-Launcher.jar" "$RELEASE_NAME/$source_dir/Suwayomi-Launcher.jar" - cp "$JAR" "$RELEASE_NAME/$source_dir/Suwayomi-Server.jar" + mkdir "$RELEASE_NAME/$source_dir/" || error $LINENO "Failed to create source directory" 1 + mv "$RELEASE_NAME/natives" "$RELEASE_NAME/$source_dir/natives" || error $LINENO "Failed to move natives" 1 + mv "$RELEASE_NAME/Suwayomi-Launcher.jar" "$RELEASE_NAME/$source_dir/Suwayomi-Launcher.jar" || error $LINENO "Failed to move launcher jar" 1 + cp "$JAR" "$RELEASE_NAME/$source_dir/Suwayomi-Server.jar" || error $LINENO "Failed to copy server jar" 1 copy_linux_package_assets_to "$RELEASE_NAME/$source_dir/" - cp "scripts/resources/catch_abort.so" "$RELEASE_NAME/$source_dir/" - tar -I "gzip" -C "$RELEASE_NAME/" -cvf "$upstream_source" "$source_dir" + cp "scripts/resources/catch_abort.so" "$RELEASE_NAME/$source_dir/" || error $LINENO "Failed to copy catch_abort" 1 + tar -I "gzip" -C "$RELEASE_NAME/" -cvf "$upstream_source" "$source_dir" || error $LINENO "Failed to create source tar.gz" 1 - cp -r "scripts/resources/deb/" "$RELEASE_NAME/$source_dir/debian/" - sed -i "s/\$pkgver/$RELEASE_VERSION/" "$RELEASE_NAME/$source_dir/debian/changelog" - sed -i "s/\$pkgrel/1/" "$RELEASE_NAME/$source_dir/debian/changelog" + cp -r "scripts/resources/deb/" "$RELEASE_NAME/$source_dir/debian/" || error $LINENO "Failed to copy debian resources" 1 + sed -i "s/\$pkgver/$RELEASE_VERSION/" "$RELEASE_NAME/$source_dir/debian/changelog" || error $LINENO "Failed to update changelog" 1 + sed -i "s/\$pkgrel/1/" "$RELEASE_NAME/$source_dir/debian/changelog" || error $LINENO "Failed to update changelog" 1 if [ "${CI:-}" = true ]; then - sudo apt update - sudo apt install devscripts build-essential dh-exec + sudo apt update || error $LINENO "Failed to update apt" 1 + sudo apt install devscripts build-essential dh-exec || error $LINENO "Failed to install build deps" 1 fi - cd "$RELEASE_NAME/$source_dir/" - dpkg-buildpackage --no-sign --build=all - cd - + cd "$RELEASE_NAME/$source_dir/" || error $LINENO "Failed to change directory" 1 + dpkg-buildpackage --no-sign --build=all || error $LINENO "Debian package build failed" 1 + cd - || error $LINENO "Failed to return to previous directory" 1 local deb="suwayomi-server_$RELEASE_VERSION-1_all.deb" - mv "$RELEASE_NAME/$deb" "$RELEASE" + mv "$RELEASE_NAME/$deb" "$RELEASE" || error $LINENO "Failed to move resulting .deb" 1 } # https://linuxconfig.org/building-a-hello-world-appimage-on-linux @@ -262,20 +265,20 @@ make_appimage() { local APPIMAGE_URL="https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" local APPIMAGE_TOOLNAME="appimagetool-x86_64.AppImage" mkdir "$RELEASE_NAME/bin/" - cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" + cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" || error $LINENO "Failed to copy server jar" 1 - cp "scripts/resources/pkg/suwayomi-server.desktop" "$RELEASE_NAME/suwayomi-server.desktop" - cp "server/src/main/resources/icon/faviconlogo.png" "$RELEASE_NAME/suwayomi-server.png" - cp "scripts/resources/appimage/AppRun" "$RELEASE_NAME/AppRun" - chmod +x "$RELEASE_NAME/AppRun" + cp "scripts/resources/pkg/suwayomi-server.desktop" "$RELEASE_NAME/suwayomi-server.desktop" || error $LINENO "Failed to copy desktop file" 1 + cp "server/src/main/resources/icon/faviconlogo.png" "$RELEASE_NAME/suwayomi-server.png" || error $LINENO "Failed to copy icon" 1 + cp "scripts/resources/appimage/AppRun" "$RELEASE_NAME/AppRun" || error $LINENO "Failed to copy AppRun" 1 + chmod +x "$RELEASE_NAME/AppRun" || error $LINENO "Failed to make AppRun executable" 1 if [ "${CI:-}" = true ]; then - sudo apt update - sudo apt install libfuse2 + sudo apt update || error $LINENO "Failed to update apt" 1 + sudo apt install libfuse2 || error $LINENO "Failed to install libfuse2" 1 fi - curl -fL $APPIMAGE_URL -o $APPIMAGE_TOOLNAME - chmod +x $APPIMAGE_TOOLNAME - ARCH=x86_64 ./$APPIMAGE_TOOLNAME "$RELEASE_NAME" "$RELEASE" + curl -fL $APPIMAGE_URL -o $APPIMAGE_TOOLNAME || error $LINENO "Failed to download appimagetool" 1 + chmod +x $APPIMAGE_TOOLNAME || error $LINENO "Failed to make appimagetool executable" 1 + ARCH=x86_64 ./$APPIMAGE_TOOLNAME "$RELEASE_NAME" "$RELEASE" || error $LINENO "AppImage creation failed" 1 } make_windows_bundle() { @@ -300,7 +303,7 @@ make_windows_bundle() { #local rcedit_url="https://github.com/electron/rcedit/releases/download/v0.1.1/$rcedit" ## change electron's icon #if [ ! -f "$rcedit" ]; then - #curl -fL "$rcedit_url" -o "$rcedit" + #curl -fL "$rcedit_url" -o "$rcedit" || error $LINENO "Failed to download rcedit" 1 #fi #local icon="server/src/main/resources/icon/faviconlogo.ico" @@ -308,38 +311,38 @@ make_windows_bundle() { # --set-icon "$icon" mkdir "$RELEASE_NAME/bin" - cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" - cp "scripts/resources/Suwayomi Launcher.bat" "$RELEASE_NAME" + cp "$JAR" "$RELEASE_NAME/bin/Suwayomi-Server.jar" || error $LINENO "Failed to copy server jar" 1 + cp "scripts/resources/Suwayomi Launcher.bat" "$RELEASE_NAME" || error $LINENO "Failed to copy launcher bat" 1 - zip -9 -r "$RELEASE" "$RELEASE_NAME" + zip -9 -r "$RELEASE" "$RELEASE_NAME" || error $LINENO "Failed to create windows bundle zip" 1 } make_windows_package() { if [ "${CI:-}" = true ]; then - sudo apt update - sudo apt install -y wixl + sudo apt update || error $LINENO "Failed to update apt" 1 + sudo apt install -y wixl || error $LINENO "Failed to install wixl" 1 fi find "$RELEASE_NAME/jre" \ | wixl-heat --var var.SourceDir -p "$RELEASE_NAME/" \ - --directory-ref jre --component-group jre >"$RELEASE_NAME/jre.wxs" + --directory-ref jre --component-group jre >"$RELEASE_NAME/jre.wxs" || error $LINENO "Failed to heat jre" 1 find "$RELEASE_NAME/electron" \ | wixl-heat --var var.SourceDir -p "$RELEASE_NAME/" \ - --directory-ref electron --component-group electron >"$RELEASE_NAME/electron.wxs" + --directory-ref electron --component-group electron >"$RELEASE_NAME/electron.wxs" || error $LINENO "Failed to heat electron" 1 find "$RELEASE_NAME/natives" \ | wixl-heat --var var.SourceDir -p "$RELEASE_NAME/" \ - --directory-ref natives --component-group natives >"$RELEASE_NAME/natives.wxs" + --directory-ref natives --component-group natives >"$RELEASE_NAME/natives.wxs" || error $LINENO "Failed to heat natives" 1 find "$RELEASE_NAME/bin" \ | wixl-heat --var var.SourceDir -p "$RELEASE_NAME/" \ - --directory-ref bin --component-group bin >"$RELEASE_NAME/bin.wxs" + --directory-ref bin --component-group bin >"$RELEASE_NAME/bin.wxs" || error $LINENO "Failed to heat bin" 1 local icon="server/src/main/resources/icon/faviconlogo.ico" local arch=${OS##*-} wixl -D ProductVersion="$RELEASE_VERSION" -D SourceDir="$RELEASE_NAME" \ -D Icon="$icon" --arch "$arch" "scripts/resources/msi/suwayomi-server-$arch.wxs" \ - "$RELEASE_NAME/jre.wxs" "$RELEASE_NAME/electron.wxs" "$RELEASE_NAME/natives.wxs" "$RELEASE_NAME/bin.wxs" -o "$RELEASE" + "$RELEASE_NAME/jre.wxs" "$RELEASE_NAME/electron.wxs" "$RELEASE_NAME/natives.wxs" "$RELEASE_NAME/bin.wxs" -o "$RELEASE" || error $LINENO "Windows package build failed" 1 } # Error handler