diff --git a/.github/workflows/rolling-release.yml b/.github/workflows/rolling-release.yml index 6334a4724..0baea6acd 100644 --- a/.github/workflows/rolling-release.yml +++ b/.github/workflows/rolling-release.yml @@ -91,7 +91,7 @@ jobs: linux-build: - runs-on: ubuntu-20.04 + runs-on: ubuntu-18.04 steps: - uses: actions/checkout@v2.3.1 with: @@ -110,7 +110,7 @@ jobs: cd build cmake -DCMAKE_BUILD_TYPE=Release -DBUILD_SDL_FRONTEND=ON -DBUILD_QT_FRONTEND=ON -DUSE_SDL2=ON -G Ninja .. ninja - ../appimage/generate-appimages.sh $(pwd) + ../appimage/generate_appimages.sh $(pwd) - name: Upload SDL AppImage uses: actions/upload-artifact@v1 diff --git a/appimage/generate-appimages.sh b/appimage/generate_appimages.sh similarity index 67% rename from appimage/generate-appimages.sh rename to appimage/generate_appimages.sh index 28d2a7797..45e840815 100755 --- a/appimage/generate-appimages.sh +++ b/appimage/generate_appimages.sh @@ -6,14 +6,14 @@ echo "APPIMAGE_RESOURCES_DIR set to ${APPIMAGE_RESOURCES_DIR}" if [[ "$#" -ne 1 ]]; then echo "Wrong number of arguments (\$# = $# args) provided." - echo "Usage: create-appimage.sh " + echo "Usage: generate_appimages.sh " + echo "AppImages will be generated in the path this script is called from." exit 1 else BUILD_DIR=$(readlink -f $1) echo "BUILD_DIR set to ${BUILD_DIR}" fi -# Acquire linuxdeploy and linuxdeploy-plugin-qt wget --timestamping --directory-prefix=${BUILD_DIR} \ https://artifacts.assassinate-you.net/artifactory/list/linuxdeploy/travis-456/linuxdeploy-x86_64.AppImage chmod a+x ${BUILD_DIR}/linuxdeploy-x86_64.AppImage @@ -22,28 +22,33 @@ wget --timestamping --directory-prefix=${BUILD_DIR} \ https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage chmod a+x ${BUILD_DIR}/linuxdeploy-plugin-qt-x86_64.AppImage +wget --timestamping --directory-prefix=${BUILD_DIR} \ + https://github.com/linuxdeploy/linuxdeploy-plugin-appimage/releases/download/continuous/linuxdeploy-plugin-appimage-x86_64.AppImage +chmod a+x ${BUILD_DIR}/linuxdeploy-plugin-appimage-x86_64.AppImage + # Copy icons into the /. directory structure that linuxdeploy nominally expects, # e.g. 16x16/duckstation-qt.png, 32x32/duckstation-qt.png, etc. FRONTENDS=("qt" "sdl") ICONS_QT=() ICONS_SDL=() -ICON_PNG_RESOLUTIONS=($(seq 16 16 64)) # 16, 32, 48, 64 -for res in ${ICON_PNG_RESOLUTIONS[@]}; do +for filename in ${APPIMAGE_RESOURCES_DIR}/icon-*px.png; do + [[ ${filename} =~ ${APPIMAGE_RESOURCES_DIR}/icon-(.*)px.png ]]; + res=${BASH_REMATCH[1]} mkdir -p ${BUILD_DIR}/AppImage-icons/${res}x${res} for frontend in ${FRONTENDS[@]}; do # Copy icon to proper directory - cp ${APPIMAGE_RESOURCES_DIR}/icon-${res}px.png ${BUILD_DIR}/AppImage-icons/${res}x${res}/duckstation-${frontend}.png + cp -v ${APPIMAGE_RESOURCES_DIR}/icon-${res}px.png ${BUILD_DIR}/AppImage-icons/${res}x${res}/duckstation-${frontend}.png # Append icon filepath to array that will later be passed to linuxdeploy eval "ICONS_${frontend^^}+=(${BUILD_DIR}/AppImage-icons/${res}x${res}/duckstation-${frontend}.png)" done done # Add data files into the AppDir -DATA_DIR=$(dirname $(realpath "${BASH_SOURCE[0]}"))/../data +DATA_DIR=${APPIMAGE_RESOURCES_DIR}/../data echo "Data directory is: ${DATA_DIR}" for frontend in ${FRONTENDS[@]}; do - CURRENT_APPDIR=${BUILD_DIR}/AppDir-duckstation-${frontend} + CURRENT_APPDIR=${BUILD_DIR}/duckstation-${frontend}.AppDir mkdir -p ${CURRENT_APPDIR}/usr/bin cp -av ${DATA_DIR}/* ${CURRENT_APPDIR}/usr/bin done @@ -52,7 +57,7 @@ done TRANSLATIONS_DIR=${BUILD_DIR}/bin/translations echo "Translation directory is: ${BUILD_DIR}" for frontend in ${FRONTENDS[@]}; do - CURRENT_APPDIR=${BUILD_DIR}/AppDir-duckstation-${frontend} + CURRENT_APPDIR=${BUILD_DIR}/duckstation-${frontend}.AppDir mkdir -p ${CURRENT_APPDIR}/usr/bin cp -av ${TRANSLATIONS_DIR} ${CURRENT_APPDIR}/usr/bin done @@ -60,24 +65,27 @@ done # Pass UPDATE_INFORMATION and OUTPUT variables (used by linuxdeploy-plugin-appimage) # to the environment of the linuxdeploy commands -UPDATE_INFORMATION="zsync|https://github.com/stenzek/duckstation/releases/download/latest/duckstation-qt-x64.AppImage.zsync" \ -OUTPUT="duckstation-qt-x64.AppImage" \ ${BUILD_DIR}/linuxdeploy-x86_64.AppImage \ - --appdir=${BUILD_DIR}/AppDir-duckstation-qt \ + --appdir=${BUILD_DIR}/duckstation-qt.AppDir \ --executable=${BUILD_DIR}/bin/duckstation-qt \ --desktop-file=${APPIMAGE_RESOURCES_DIR}/duckstation-qt.desktop \ ${ICONS_QT[@]/#/--icon-file=} \ - --plugin=qt \ - --output=appimage + --plugin=qt + +# Patch AppRun to work around system Qt libraries being loaded ahead of bundled libraries +sed -i 's|exec "$this_dir"/AppRun.wrapped "$@"|exec env LD_LIBRARY_PATH="$this_dir"/usr/lib:$LD_LIBRARY_PATH "$this_dir"/AppRun.wrapped "$@"|' \ + ${BUILD_DIR}/duckstation-qt.AppDir/AppRun + +UPDATE_INFORMATION="zsync|https://github.com/stenzek/duckstation/releases/download/latest/duckstation-qt-x64.AppImage.zsync" \ +OUTPUT="duckstation-qt-x64.AppImage" \ +${BUILD_DIR}/linuxdeploy-plugin-appimage-x86_64.AppImage \ + --appdir=${BUILD_DIR}/duckstation-qt.AppDir UPDATE_INFORMATION="zsync|https://github.com/stenzek/duckstation/releases/download/latest/duckstation-sdl-x64.AppImage.zsync" \ OUTPUT="duckstation-sdl-x64.AppImage" \ ${BUILD_DIR}/linuxdeploy-x86_64.AppImage \ - --appdir=${BUILD_DIR}/AppDir-duckstation-sdl \ + --appdir=${BUILD_DIR}/duckstation-sdl.AppDir \ --executable=${BUILD_DIR}/bin/duckstation-sdl \ --desktop-file=${APPIMAGE_RESOURCES_DIR}/duckstation-sdl.desktop \ ${ICONS_SDL[@]/#/--icon-file=} \ --output=appimage - -# Resulting AppImages and zsync files will be created in the directory this script is called from; -# move them into the user's specified build directory