From d5c59ef4b32f9175c61051f6b22c22814649bb35 Mon Sep 17 00:00:00 2001 From: mutlusun Date: Fri, 27 Dec 2024 21:05:09 +0100 Subject: [PATCH 1/3] feat: add amd64 appimage build --- .github/workflows/build-appimage.yaml | 50 ++++++++++++++++++ appimage/AppRun | 12 +++++ appimage/build-appimage.sh | 74 +++++++++++++++++++++++++++ appimage/quarto.desktop | 7 +++ appimage/quarto.svg | 56 ++++++++++++++++++++ 5 files changed, 199 insertions(+) create mode 100644 .github/workflows/build-appimage.yaml create mode 100755 appimage/AppRun create mode 100644 appimage/build-appimage.sh create mode 100644 appimage/quarto.desktop create mode 100644 appimage/quarto.svg diff --git a/.github/workflows/build-appimage.yaml b/.github/workflows/build-appimage.yaml new file mode 100644 index 0000000..7a63984 --- /dev/null +++ b/.github/workflows/build-appimage.yaml @@ -0,0 +1,50 @@ +on: workflow_dispatch + +name: Build AppImage package + +jobs: + build-amd64: + runs-on: ubuntu-latest + name: Build AppImage package + + steps: + - name: Clone repo + uses: actions/checkout@v4 + + - name: Install necessary packages + run: | + sudo apt-get update + sudo apt-get -y install desktop-file-utils + + - name: Build AppImage + env: + TARGET_ARCH: amd64 + run: | + bash ./appimage/build-appimage.sh + + - name: Upload Artifact + uses: actions/upload-artifact@v4 + with: + name: Quarto-amd64.AppImage + path: Quarto-amd64.AppImage + + test-appimage: + runs-on: ubuntu-latest + name: Test Appimage Package + needs: build-amd64 + + steps: + - uses: actions/download-artifact@v4 + with: + name: Quarto-amd64.AppImage + path: . + + - run: | + mv Quarto-amd64.AppImage quarto + chmod a+x quarto + + - run: | + ls -lR + ./quarto check + ./quarto --paths + ./quarto --version diff --git a/appimage/AppRun b/appimage/AppRun new file mode 100755 index 0000000..2f9426c --- /dev/null +++ b/appimage/AppRun @@ -0,0 +1,12 @@ +#!/bin/sh +SELF=$(readlink -f "$0") +HERE=${SELF%/*} +export PATH="${HERE}/usr/bin/:${HERE}/usr/sbin/:${HERE}/usr/games/:${HERE}/bin/:${HERE}/sbin/${PATH:+:$PATH}" +export LD_LIBRARY_PATH="${HERE}/usr/lib/:${HERE}/usr/lib/i386-linux-gnu/:${HERE}/usr/lib/x86_64-linux-gnu/:${HERE}/usr/lib32/:${HERE}/usr/lib64/:${HERE}/lib/:${HERE}/lib/i386-linux-gnu/:${HERE}/lib/x86_64-linux-gnu/:${HERE}/lib32/:${HERE}/lib64/${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}" +export PYTHONPATH="${HERE}/usr/share/pyshared/${PYTHONPATH:+:$PYTHONPATH}" +export XDG_DATA_DIRS="${HERE}/usr/share/${XDG_DATA_DIRS:+:$XDG_DATA_DIRS}" +export PERLLIB="${HERE}/usr/share/perl5/:${HERE}/usr/lib/perl5/${PERLLIB:+:$PERLLIB}" +export GSETTINGS_SCHEMA_DIR="${HERE}/usr/share/glib-2.0/schemas/${GSETTINGS_SCHEMA_DIR:+:$GSETTINGS_SCHEMA_DIR}" +export QT_PLUGIN_PATH="${HERE}/usr/lib/qt4/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt4/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt4/plugins/:${HERE}/usr/lib32/qt4/plugins/:${HERE}/usr/lib64/qt4/plugins/:${HERE}/usr/lib/qt5/plugins/:${HERE}/usr/lib/i386-linux-gnu/qt5/plugins/:${HERE}/usr/lib/x86_64-linux-gnu/qt5/plugins/:${HERE}/usr/lib32/qt5/plugins/:${HERE}/usr/lib64/qt5/plugins/${QT_PLUGIN_PATH:+:$QT_PLUGIN_PATH}" +EXEC=$(grep -e '^Exec=.*' "${HERE}"/*.desktop | head -n 1 | cut -d "=" -f 2 | cut -d " " -f 1) +exec "${EXEC}" "$@" diff --git a/appimage/build-appimage.sh b/appimage/build-appimage.sh new file mode 100644 index 0000000..4d84af7 --- /dev/null +++ b/appimage/build-appimage.sh @@ -0,0 +1,74 @@ +#! /usr/bin/env bash + +# -e - Exit immediately if any command fails. +# -u - Exit if an unset variable is invoked. +# -o pipefail - Exit if a command in a piped series of commands fails. +set -euo pipefail + +DIR_OUTPUT="./AppDir" +URL_RELEASE="https://quarto.org/docs/download/_download.json" +PLATFORM_TARGET=$TARGET_ARCH + +get_current_release_build() { + echo "Trying to get latest release build." + + # Download release info document. + wget --output-document "release-info.json" $URL_RELEASE + + # Get latest download url. Matching here a fixed host as security + # precaution. + myurl=$(grep -oP "download_url\": \"\Khttps://github.com/quarto-dev/quarto-cli/.*-linux-${PLATFORM_TARGET}.*.tar.gz(?=\")" release-info.json) + + # Download release tarball. + wget --output-document "quarto-release.tar.gz" $myurl +} + +extract_relase_build() { + echo "Extracting latest release build." + + mkdir -p "quarto-release" + tar --strip-components=1 -xvf "quarto-release.tar.gz" --directory "quarto-release" +} + +get_appimage_builder() { + echo "Getting appimage builder." + + if [ $PLATFORM_TARGET = "amd64" ] + then + wget --output-document "appimagetool.AppImage" "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage" + elif [ $PLATFORM_TARGET = "arm64" ] + then + wget --output-document "appimagetool.AppImage" "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-aarch64.AppImage" + else + echo "Unsupported target platform." + exit 1 + fi + + chmod a+x ./appimagetool.AppImage +} + +prepare_appimage() { + echo "Preparing appimage directory." + + mkdir -p $DIR_OUTPUT + + # Copy files from release tarball. + cp -a -r ./quarto-release/ $DIR_OUTPUT/usr/ + + # Copy other necessary files. + cp ./appimage/AppRun $DIR_OUTPUT/ + cp ./appimage/quarto.desktop $DIR_OUTPUT/ + cp ./appimage/quarto.svg $DIR_OUTPUT/ +} + +build_appimage() { + echo "Building quarto appimage." + + ./appimagetool.AppImage $DIR_OUTPUT Quarto-${PLATFORM_TARGET}.AppImage +} + +get_current_release_build +extract_relase_build +get_appimage_builder +prepare_appimage +build_appimage diff --git a/appimage/quarto.desktop b/appimage/quarto.desktop new file mode 100644 index 0000000..942b892 --- /dev/null +++ b/appimage/quarto.desktop @@ -0,0 +1,7 @@ +[Desktop Entry] +Type=Application +Name=Quarto +Icon=quarto +Exec=quarto render %u +Terminal=true +Categories=Development;Building;Science; diff --git a/appimage/quarto.svg b/appimage/quarto.svg new file mode 100644 index 0000000..a4f067b --- /dev/null +++ b/appimage/quarto.svg @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + From b090b346da18a0e8d70267290bf38940aa9d7bd3 Mon Sep 17 00:00:00 2001 From: mutlusun Date: Fri, 27 Dec 2024 21:11:59 +0100 Subject: [PATCH 2/3] testing appimage workflow run --- .github/workflows/build-appimage.yaml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/build-appimage.yaml b/.github/workflows/build-appimage.yaml index 7a63984..9d5c393 100644 --- a/.github/workflows/build-appimage.yaml +++ b/.github/workflows/build-appimage.yaml @@ -1,9 +1,10 @@ -on: workflow_dispatch +#on: workflow_dispatch +on: push name: Build AppImage package jobs: - build-amd64: + build-appimage: runs-on: ubuntu-latest name: Build AppImage package @@ -31,7 +32,7 @@ jobs: test-appimage: runs-on: ubuntu-latest name: Test Appimage Package - needs: build-amd64 + needs: build-appimage steps: - uses: actions/download-artifact@v4 From db2a52dcd5db3c67783cb5f211d86ee904e358cd Mon Sep 17 00:00:00 2001 From: mutlusun Date: Wed, 1 Jan 2025 18:33:51 +0100 Subject: [PATCH 3/3] fix(appimage): fix typo --- appimage/build-appimage.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/appimage/build-appimage.sh b/appimage/build-appimage.sh index 4d84af7..e599c00 100644 --- a/appimage/build-appimage.sh +++ b/appimage/build-appimage.sh @@ -23,7 +23,7 @@ get_current_release_build() { wget --output-document "quarto-release.tar.gz" $myurl } -extract_relase_build() { +extract_release_build() { echo "Extracting latest release build." mkdir -p "quarto-release" @@ -68,7 +68,7 @@ build_appimage() { } get_current_release_build -extract_relase_build +extract_release_build get_appimage_builder prepare_appimage build_appimage