From 682d9cd89d820e96cc4b44bba87bcd8f9bc5851c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Thu, 21 Nov 2024 02:15:30 +0100 Subject: [PATCH 1/7] Create AppImage compilation script --- .github/workflows/appimage.yaml | 41 ++++++++++++++++++++++++++++ build-aux/appimage-build.sh | 48 +++++++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 .github/workflows/appimage.yaml create mode 100755 build-aux/appimage-build.sh diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml new file mode 100644 index 0000000..3313195 --- /dev/null +++ b/.github/workflows/appimage.yaml @@ -0,0 +1,41 @@ +# Copyright 2024 the Cartero authors +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation, either version 3 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . +# +# SPDX-License-Identifier: GPL-3.0-or-later + +on: + pull_request: + branches: + - trunk +name: AppImage +jobs: + stable: + name: Build (default profile) + runs-on: ubuntu-24.04 + steps: + - name: Install dependencies + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb + - uses: actions/checkout@v4 + - name: Build + run: build-aux/appimage-build.sh stable + devel: + name: Build (development profile) + runs-on: ubuntu-24.04 + steps: + - name: Install dependencies + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb + - uses: actions/checkout@v4 + - name: Build + run: build-aux/appimage-build.sh devel \ No newline at end of file diff --git a/build-aux/appimage-build.sh b/build-aux/appimage-build.sh new file mode 100755 index 0000000..06406cd --- /dev/null +++ b/build-aux/appimage-build.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +set -e +cd "$(dirname "$0")/.." + +case "$1" in + devel) + MESON_FLAGS="-Dprofile=development" + ICON_PATH="AppDir/usr/share/icons/hicolor/scalable/apps/es.danirod.Cartero.Devel.svg" + DESKTOP_PATH="AppDir/usr/share/applications/es.danirod.Cartero.Devel.desktop" + ;; + stable) + MESON_FLAGS="-Dprofile=default" + ICON_PATH="AppDir/usr/share/icons/hicolor/scalable/apps/es.danirod.Cartero.svg" + DESKTOP_PATH="AppDir/usr/share/applications/es.danirod.Cartero.desktop" + ;; + *) + echo "Usage: $0 [devel / stable]" + exit 1 + ;; +esac + +meson setup build --prefix="/" $MESON_FLAGS +ninja -C build +DESTDIR=$PWD/build/appimagetool/AppDir/usr ninja -C build install + +cd build/appimagetool +[ -x appimagetool-x86_64.AppImage ] || curl -OL https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage +[ -x linuxdeploy-x86_64.AppImage ] || curl -OL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage +[ -x linuxdeploy-plugin-gtk.sh ] || curl -OL https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh +chmod +x appimagetool-x86_64.AppImage linuxdeploy-x86_64.AppImage linuxdeploy-plugin-gtk.sh + +DEPLOY_GTK_VERSION=4 + +export DEPLOY_GTK_VERSION + +# First iteration +./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin gtk --output appimage \ + --executable AppDir/usr/bin/cartero \ + --icon-file "$ICON_PATH" \ + --desktop-file "$DESKTOP_PATH" + +# Patch the hook in order to support Adwaita theme. +sed -i '/GTK_THEME/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh +sed -i '/GDK_BACKEND/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh + +# Recompile with the changes. +./appimagetool-x86_64.AppImage AppDir \ No newline at end of file From feda7b35c544ffabf38697ca718b00efcd7ad480 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Thu, 21 Nov 2024 02:25:23 +0100 Subject: [PATCH 2/7] Require libfuse2 in order for the package to build --- .github/workflows/appimage.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml index 3313195..6eed406 100644 --- a/.github/workflows/appimage.yaml +++ b/.github/workflows/appimage.yaml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh stable @@ -35,7 +35,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh devel \ No newline at end of file From c2d035e0430cdddc2115e29a55f9377b13fab35d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Thu, 21 Nov 2024 02:25:28 +0100 Subject: [PATCH 3/7] Upload the generated artifact (if any) --- .github/workflows/appimage.yaml | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml index 6eed406..772874d 100644 --- a/.github/workflows/appimage.yaml +++ b/.github/workflows/appimage.yaml @@ -30,6 +30,11 @@ jobs: - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh stable + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: es.danirod.Cartero-AppImage + path: build/appimagetool/Cartero-x86_64.AppImage devel: name: Build (development profile) runs-on: ubuntu-24.04 @@ -38,4 +43,9 @@ jobs: run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 - uses: actions/checkout@v4 - name: Build - run: build-aux/appimage-build.sh devel \ No newline at end of file + run: build-aux/appimage-build.sh devel + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: es.danirod.Cartero.Devel-AppImage + path: build/appimagetool/Cartero-x86_64.AppImage \ No newline at end of file From 8b89c8baef64750efe0ea930893cb07f89b820d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Thu, 21 Nov 2024 23:28:30 +0100 Subject: [PATCH 4/7] Build icon cache for the application icons --- .github/workflows/appimage.yaml | 4 ++-- build-aux/appimage-build.sh | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml index 772874d..22aaeb3 100644 --- a/.github/workflows/appimage.yaml +++ b/.github/workflows/appimage.yaml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh stable @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh devel diff --git a/build-aux/appimage-build.sh b/build-aux/appimage-build.sh index 06406cd..8f862b9 100755 --- a/build-aux/appimage-build.sh +++ b/build-aux/appimage-build.sh @@ -44,5 +44,8 @@ export DEPLOY_GTK_VERSION sed -i '/GTK_THEME/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh sed -i '/GDK_BACKEND/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh +# Extra fixes for the icon theme. +gtk4-update-icon-cache -q -t -f AppDir/usr/share/icons/hicolor + # Recompile with the changes. ./appimagetool-x86_64.AppImage AppDir \ No newline at end of file From c3d59b9b63f48efb9f8ea9a44cfc4d9c4421a936 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Fri, 22 Nov 2024 00:53:06 +0100 Subject: [PATCH 5/7] Vendor additional data files (themes, SourceView...) --- build-aux/appimage-build.sh | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/build-aux/appimage-build.sh b/build-aux/appimage-build.sh index 8f862b9..e5266eb 100755 --- a/build-aux/appimage-build.sh +++ b/build-aux/appimage-build.sh @@ -25,16 +25,36 @@ ninja -C build DESTDIR=$PWD/build/appimagetool/AppDir/usr ninja -C build install cd build/appimagetool + +# Vendor extra files +if [ -d /usr/share/icons/Adwaita ]; then + mkdir -p AppDir/usr/share/icons + cp -rv /usr/share/icons/Adwaita AppDir/usr/share/icons + gtk4-update-icon-cache -q -t -f AppDir/usr/share/icons/Adwaita +else + echo "Warning: cannot vendor Adwaita icons" +fi +if [ -d /usr/share/themes/Adwaita ]; then + mkdir -p AppDir/usr/share/themes + cp -rv /usr/share/themes/Adwaita AppDir/usr/share/themes +else + echo "Warning: cannot vendor Adwaita themes" +fi +if [ -d /usr/share/gtksourceview-5 ]; then + cp -rv /usr/share/gtksourceview-5 AppDir/usr/share/ +else + echo "Warning: cannot vendor GtkSourceView 5 data files" +fi +gtk4-update-icon-cache -q -t -f AppDir/usr/share/icons/hicolor + +# Start packaging process [ -x appimagetool-x86_64.AppImage ] || curl -OL https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage [ -x linuxdeploy-x86_64.AppImage ] || curl -OL https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage [ -x linuxdeploy-plugin-gtk.sh ] || curl -OL https://raw.githubusercontent.com/linuxdeploy/linuxdeploy-plugin-gtk/master/linuxdeploy-plugin-gtk.sh chmod +x appimagetool-x86_64.AppImage linuxdeploy-x86_64.AppImage linuxdeploy-plugin-gtk.sh -DEPLOY_GTK_VERSION=4 - -export DEPLOY_GTK_VERSION - # First iteration +export DEPLOY_GTK_VERSION=4 ./linuxdeploy-x86_64.AppImage --appdir AppDir --plugin gtk --output appimage \ --executable AppDir/usr/bin/cartero \ --icon-file "$ICON_PATH" \ @@ -44,8 +64,5 @@ export DEPLOY_GTK_VERSION sed -i '/GTK_THEME/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh sed -i '/GDK_BACKEND/d' AppDir/apprun-hooks/linuxdeploy-plugin-gtk.sh -# Extra fixes for the icon theme. -gtk4-update-icon-cache -q -t -f AppDir/usr/share/icons/hicolor - # Recompile with the changes. ./appimagetool-x86_64.AppImage AppDir \ No newline at end of file From 41ad12ead5a42793d7d458f6cfc3d600c7d99554 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Fri, 22 Nov 2024 01:37:27 +0100 Subject: [PATCH 6/7] Declare librsvg 2.2 as dependency during compile time Because apparently linuxdeploy will not pack the gdk-pixbuf SVG loader if the library is not installed. --- .github/workflows/appimage.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml index 22aaeb3..624f17f 100644 --- a/.github/workflows/appimage.yaml +++ b/.github/workflows/appimage.yaml @@ -26,7 +26,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh stable @@ -40,7 +40,7 @@ jobs: runs-on: ubuntu-24.04 steps: - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common - uses: actions/checkout@v4 - name: Build run: build-aux/appimage-build.sh devel From 85c6c7c909f6ddea7626def8a4d835f408ade315 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Dani=20Rodr=C3=ADguez?= Date: Fri, 22 Nov 2024 19:21:47 +0100 Subject: [PATCH 7/7] Split appimage.yaml into build actions --- .github/workflows/appimage.yaml | 51 --------------------------------- .github/workflows/nightly.yaml | 14 +++++++++ .github/workflows/stable.yaml | 14 +++++++++ 3 files changed, 28 insertions(+), 51 deletions(-) delete mode 100644 .github/workflows/appimage.yaml diff --git a/.github/workflows/appimage.yaml b/.github/workflows/appimage.yaml deleted file mode 100644 index 624f17f..0000000 --- a/.github/workflows/appimage.yaml +++ /dev/null @@ -1,51 +0,0 @@ -# Copyright 2024 the Cartero authors -# -# This program is free software: you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation, either version 3 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . -# -# SPDX-License-Identifier: GPL-3.0-or-later - -on: - pull_request: - branches: - - trunk -name: AppImage -jobs: - stable: - name: Build (default profile) - runs-on: ubuntu-24.04 - steps: - - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common - - uses: actions/checkout@v4 - - name: Build - run: build-aux/appimage-build.sh stable - - name: Upload - uses: actions/upload-artifact@v4 - with: - name: es.danirod.Cartero-AppImage - path: build/appimagetool/Cartero-x86_64.AppImage - devel: - name: Build (development profile) - runs-on: ubuntu-24.04 - steps: - - name: Install dependencies - run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common - - uses: actions/checkout@v4 - - name: Build - run: build-aux/appimage-build.sh devel - - name: Upload - uses: actions/upload-artifact@v4 - with: - name: es.danirod.Cartero.Devel-AppImage - path: build/appimagetool/Cartero-x86_64.AppImage \ No newline at end of file diff --git a/.github/workflows/nightly.yaml b/.github/workflows/nightly.yaml index 9f863d0..88169d5 100644 --- a/.github/workflows/nightly.yaml +++ b/.github/workflows/nightly.yaml @@ -106,3 +106,17 @@ jobs: with: name: es.danirod.Cartero-${{ runner.os }}-${{ runner.arch }} path: build/Cartero-*.dmg + appimage: + name: "AppImage (GNU/Linux, glibc 2.38+)" + runs-on: ubuntu-24.04 + steps: + - name: Install dependencies + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common + - uses: actions/checkout@v4 + - name: Build + run: build-aux/appimage-build.sh devel + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: es.danirod.Cartero.Devel-AppImage + path: build/appimagetool/Cartero-x86_64.AppImage diff --git a/.github/workflows/stable.yaml b/.github/workflows/stable.yaml index 296dc6b..e5c5c17 100644 --- a/.github/workflows/stable.yaml +++ b/.github/workflows/stable.yaml @@ -105,3 +105,17 @@ jobs: with: name: es.danirod.Cartero-${{ runner.os }}-${{ runner.arch }} path: build/Cartero-*.dmg + appimage: + name: "AppImage (GNU/Linux, glibc 2.38+)" + runs-on: ubuntu-24.04 + steps: + - name: Install dependencies + run: sudo apt update && sudo apt install -y --no-install-recommends gettext meson libgtk-4-dev libadwaita-1-dev libgtksourceview-5-dev desktop-file-utils xvfb libfuse2 libgtk-4-bin librsvg2-common + - uses: actions/checkout@v4 + - name: Build + run: build-aux/appimage-build.sh stable + - name: Upload + uses: actions/upload-artifact@v4 + with: + name: es.danirod.Cartero-AppImage + path: build/appimagetool/Cartero-x86_64.AppImage