From 8a909755f472846962d219b1e84d75126c69a275 Mon Sep 17 00:00:00 2001 From: Oliver Schantz Date: Mon, 24 Aug 2026 18:38:49 +0200 Subject: [PATCH] #37 using zsync for appimage updates --- .github/actions/build-appimage/action.yml | 29 +++++++++++++++++++++-- .github/workflows/build-and-package.yml | 8 +++++++ .github/workflows/build.yml | 1 + 3 files changed, 36 insertions(+), 2 deletions(-) diff --git a/.github/actions/build-appimage/action.yml b/.github/actions/build-appimage/action.yml index 339c2a6..aaaef4f 100644 --- a/.github/actions/build-appimage/action.yml +++ b/.github/actions/build-appimage/action.yml @@ -24,11 +24,18 @@ inputs: description: 'Release tag of appimagetool to download' required: false default: 'continuous' + update-information: + description: 'zsync update information string (empty disables delta-update embedding)' + required: false + default: 'gh-releases-zsync|frequency403|OpenSSH-GUI|latest|OpenSSH-GUI-x86_64.AppImage.zsync' outputs: appimage-name: description: 'Filename of the produced AppImage' value: ${{ steps.build.outputs.appimage-name }} + appimage-zsync-name: + description: 'Filename of the produced .zsync file (empty if update-information was not set)' + value: ${{ steps.build.outputs.appimage-zsync-name }} runs: using: composite @@ -38,7 +45,7 @@ runs: run: | set -euo pipefail sudo apt-get update -qq - sudo apt-get install -y --no-install-recommends librsvg2-bin appstream + sudo apt-get install -y --no-install-recommends librsvg2-bin appstream zsync - name: Download appimagetool shell: bash @@ -116,7 +123,15 @@ runs: # Assemble AppImage (--appimage-extract-and-run bypasses FUSE requirement) APPIMAGE_NAME="${ASSET_PREFIX}-x86_64.AppImage" - ARCH=x86_64 ./appimagetool --appimage-extract-and-run AppDir "$APPIMAGE_NAME" + UPDATE_INFO="${{ inputs.update-information }}" + + if [[ -n "$UPDATE_INFO" ]]; then + ARCH=x86_64 ./appimagetool --appimage-extract-and-run \ + -u "$UPDATE_INFO" \ + AppDir "$APPIMAGE_NAME" + else + ARCH=x86_64 ./appimagetool --appimage-extract-and-run AppDir "$APPIMAGE_NAME" + fi if [[ ! -f "$APPIMAGE_NAME" ]]; then echo "::error::appimagetool did not produce $APPIMAGE_NAME" @@ -124,4 +139,14 @@ runs: fi echo "appimage-name=$APPIMAGE_NAME" >> "$GITHUB_OUTPUT" + + ZSYNC_NAME="${APPIMAGE_NAME}.zsync" + if [[ -n "$UPDATE_INFO" ]]; then + if [[ ! -f "$ZSYNC_NAME" ]]; then + echo "::error::update-information was set but $ZSYNC_NAME was not produced (zsyncmake missing on PATH?)" + exit 1 + fi + echo "appimage-zsync-name=$ZSYNC_NAME" >> "$GITHUB_OUTPUT" + fi + echo "::notice::AppImage built successfully: $APPIMAGE_NAME" \ No newline at end of file diff --git a/.github/workflows/build-and-package.yml b/.github/workflows/build-and-package.yml index 34bcfd8..65b2f9d 100644 --- a/.github/workflows/build-and-package.yml +++ b/.github/workflows/build-and-package.yml @@ -88,6 +88,14 @@ jobs: name: ${{ steps.appimage.outputs.appimage-name }} path: ${{ steps.appimage.outputs.appimage-name }} if-no-files-found: error + + - name: Upload AppImage zsync file + if: matrix.target == 'linux-x64' && steps.appimage.outputs.appimage-zsync-name != '' + uses: actions/upload-artifact@v7 + with: + name: ${{ steps.appimage.outputs.appimage-zsync-name }} + path: ${{ steps.appimage.outputs.appimage-zsync-name }} + if-no-files-found: error - name: Upload .desktop file if: matrix.target == 'linux-x64' diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 327d1c6..7b2d143 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -149,6 +149,7 @@ jobs: "OpenSSH-GUI-${VERSION}-Setup.exe" \ "OpenSSH-GUI-osx-x64" \ "OpenSSH-GUI-x86_64.AppImage" \ + "OpenSSH-GUI-x86_64.AppImage.zsync" \ "appicon.png" \ "io.github.frequency403.openssh_gui.desktop" do