From 2e0f8189057c2d9a3d76a9d88afe59f8daf41b08 Mon Sep 17 00:00:00 2001 From: Piper McCorkle Date: Mon, 24 Oct 2022 13:19:30 -0500 Subject: [PATCH 1/3] Add a snapcraft.yml for building Snaps The included snapcraft.yml can be used to build a Snap (the application format used by Canonical's modern package manager) out of Prism. If the project wants in the future, Prism can publish these Snaps to the Snap Store so the Prism Launcher can be installed through the Ubuntu Software app on vanilla Ubuntu. I haven't registered the Snap name, so it's currently free for anyone to reserve. I'd suggest that a Prism developer register the name prismlauncher at https://snapcraft.io/register-snap to ensure the name belongs to the project, even if there are no plans of setting up CI to publish snaps in the short term. I have also modified JavaUtils.cpp to be able to autodetect the Java versions included in the Snap, and added "*.snap" to the .gitignore so the compiled Snap isn't accidentally committed to the repository. Signed-off-by: Piper McCorkle --- .gitignore | 3 ++ launcher/java/JavaUtils.cpp | 25 +++++++++++------ snap/snapcraft.yaml | 55 +++++++++++++++++++++++++++++++++++++ 3 files changed, 75 insertions(+), 8 deletions(-) create mode 100644 snap/snapcraft.yaml diff --git a/.gitignore b/.gitignore index f5917a46..b9a793d2 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,6 @@ result/ # Flatpak .flatpak-builder flatbuild + +# Snap +*.snap \ No newline at end of file diff --git a/launcher/java/JavaUtils.cpp b/launcher/java/JavaUtils.cpp index 6c0c60cd..5efbc7a8 100644 --- a/launcher/java/JavaUtils.cpp +++ b/launcher/java/JavaUtils.cpp @@ -439,19 +439,28 @@ QList JavaUtils::FindJavaPaths() javas.append(FS::PathCombine(prefix, "bin/java")); } }; + // java installed in a snap is installed in the standard directory, but underneath $SNAP + auto snap = qEnvironmentVariable("SNAP"); + auto scanJavaDirs = [&](const QString & dirPath) + { + scanJavaDir(dirPath); + if (!snap.isNull()) { + scanJavaDir(snap + dirPath); + } + }; // oracle RPMs - scanJavaDir("/usr/java"); + scanJavaDirs("/usr/java"); // general locations used by distro packaging - scanJavaDir("/usr/lib/jvm"); - scanJavaDir("/usr/lib64/jvm"); - scanJavaDir("/usr/lib32/jvm"); + scanJavaDirs("/usr/lib/jvm"); + scanJavaDirs("/usr/lib64/jvm"); + scanJavaDirs("/usr/lib32/jvm"); // javas stored in Prism Launcher's folder - scanJavaDir("java"); + scanJavaDirs("java"); // manually installed JDKs in /opt - scanJavaDir("/opt/jdk"); - scanJavaDir("/opt/jdks"); + scanJavaDirs("/opt/jdk"); + scanJavaDirs("/opt/jdks"); // flatpak - scanJavaDir("/app/jdk"); + scanJavaDirs("/app/jdk"); javas = addJavasFromEnv(javas); javas.removeDuplicates(); return javas; diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml new file mode 100644 index 00000000..f64e5b0a --- /dev/null +++ b/snap/snapcraft.yaml @@ -0,0 +1,55 @@ +name: prismlauncher +license: GPL-3.0-only +base: core20 +website: https://prismlauncher.org/ +source-code: https://github.com/PrismLauncher/PrismLauncher +issues: https://github.com/PrismLauncher/PrismLauncher/issues +donation: https://opencollective.com/prismlauncher +contact: https://discord.gg/prismlauncher +summary: A custom Minecraft launcher with modpack support +adopt-info: prismlauncher + +grade: devel +confinement: strict + +architectures: + - build-on: amd64 + - build-on: arm64 + +parts: + prismlauncher: + parse-info: + - usr/share/metainfo/org.prismlauncher.PrismLauncher.metainfo.xml + plugin: cmake + build-packages: + - default-jdk-headless + stage-packages: + - openjdk-17-jre + - openjdk-8-jre + source: . + override-pull: | + snapcraftctl pull + # Fix the icon reference in the desktop file + sed -i.bak -e 's|Icon=org.prismlauncher.PrismLauncher|Icon=/usr/share/icons/hicolor/scalable/apps/org.prismlauncher.PrismLauncher.svg|g' program_info/org.prismlauncher.PrismLauncher.desktop.in + # Remove the build directory so that local development doesn't interfere with Snap compilation + rm -rf build + cmake-generator: Ninja + cmake-parameters: + - "-DCMAKE_INSTALL_PREFIX=/usr" + - "-DCMAKE_BUILD_TYPE=RelWithDebInfo" + - "-DENABLE_LTO=ON" + - "-DLauncher_BUILD_PLATFORM=snap" + +apps: + prismlauncher: + common-id: org.prismlauncher.PrismLauncher + desktop: usr/share/applications/org.prismlauncher.PrismLauncher.desktop + command: usr/bin/prismlauncher + extensions: + - kde-neon + plugs: + - home + - opengl + - network + - network-bind + - audio-playback \ No newline at end of file From aacf7938ae6cf3447d02847a1a4f606bd0b2f2cf Mon Sep 17 00:00:00 2001 From: Piper McCorkle Date: Wed, 26 Oct 2022 06:11:19 -0500 Subject: [PATCH 2/3] Add CI build for Snap Signed-off-by: Piper McCorkle --- .github/workflows/build.yml | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac701c1e..31e4112a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -412,5 +412,25 @@ jobs: with: name: PrismLauncher-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage path: PrismLauncher-${{ runner.os }}-${{ env.VERSION }}-${{ inputs.build_type }}-x86_64.AppImage - - + snap: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + submodules: 'true' + - name: Set short version + shell: bash + run: | + ver_short=`git rev-parse --short HEAD` + echo "VERSION=$ver_short" >> $GITHUB_ENV + - name: Package Snap (Linux) + id: snapcraft + if: runner.os == 'Linux' && matrix.qt_ver != 5 + uses: snapcore/action-build@v1 + - name: Upload Snap (Linux) + if: runner.os == 'Linux' && matrix.qt_ver != 5 + uses: actions/upload-artifact@v3 + with: + name: prismlauncher_${{ env.VERSION }}_amd64.snap + path: ${{ steps.snapcraft.outputs.snap }} From bdac2a5f4d8b3a87a103fb008b9e790671c0b930 Mon Sep 17 00:00:00 2001 From: Sefa Eyeoglu Date: Sat, 5 Nov 2022 11:09:35 +0100 Subject: [PATCH 3/3] fix: add missing newline Signed-off-by: Sefa Eyeoglu --- .gitignore | 2 +- snap/snapcraft.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b9a793d2..010bc323 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,4 @@ result/ flatbuild # Snap -*.snap \ No newline at end of file +*.snap diff --git a/snap/snapcraft.yaml b/snap/snapcraft.yaml index f64e5b0a..8e647eea 100644 --- a/snap/snapcraft.yaml +++ b/snap/snapcraft.yaml @@ -52,4 +52,4 @@ apps: - opengl - network - network-bind - - audio-playback \ No newline at end of file + - audio-playback