Skip to content

#1263: Build Linux AppImage with modern appimagetool and zsync updates#1265

Open
Maxnflaxl wants to merge 2 commits into
masterfrom
issue/1263
Open

#1263: Build Linux AppImage with modern appimagetool and zsync updates#1265
Maxnflaxl wants to merge 2 commits into
masterfrom
issue/1263

Conversation

@Maxnflaxl

Copy link
Copy Markdown
Member

Addresses #1263.

Context

The Linux AppImage is currently packed/signed with the obsolete AppImageKit appimagetool, whose embedded runtime requires libfuse2 at runtime — a library that is no longer maintained (since 2019) and no longer shipped by default on many distributions. The issue reporter (@ivan-hc, maintainer of the AM AppImage package manager) recommended migrating to the modern AppImage/appimagetool.

Changes (.github/workflows/build.yml)

  • Migrate to the modern appimagetool. The Sign AppImage step now downloads from AppImage/appimagetool (continuous) instead of AppImage/AppImageKit, so the embedded runtime is the modern static one and end users no longer need libfuse2. The new tool requires ARCH=x86_64, and APPIMAGE_EXTRACT_AND_RUN=1 is set to avoid FUSE self-mount issues for the tooling in CI.
  • zsync delta updates. appimagetool now packs with -u "gh-releases-zsync|BeamMW|beam-ui|latest|*x86_64.AppImage.zsync", emitting a .zsync so clients can perform delta updates of the ~200 MB image. The .zsync is added to the uploaded artifact.
  • -x86_64 asset naming. The published AppImage (and its checksum/zsync) is now named Beam-Wallet…-<version>-x86_64.AppImage. A .zsync is bound to the exact filename it is generated against, so the AppImage is now produced directly under its final name in the Sign step rather than being renamed afterward. This -x86_64 suffix is per @ivan-hc's recommendation and also aligns with the AM install script, which selects the x86_64 asset by matching on x86_64.

Not included (manual release step)

Releases are published manually, so shipping the raw .AppImage on the GitHub Release (rather than the CI artifact .zip) remains a manual step. This workflow now provides the raw .AppImage, its .zsync, and the checksum in the artifact so they can be attached directly.

Verification

CI-only change — verification is the Build workflow's ubuntu job completing through the AppImage → Sign → Collect steps. The libfuse2-free runtime behaviour is a property of the new appimagetool and is validated on end-user machines rather than by the build itself.

Maxnflaxl added 2 commits July 3, 2026 14:35
Switch the AppImage signing/packing step from the obsolete AppImageKit
appimagetool to the modern AppImage/appimagetool build, so the embedded
runtime no longer requires libfuse2 on end-user machines. Pack with
zsync update information so clients can do delta updates, and produce
the AppImage directly under its final -x86_64 release name (the .zsync
binds to that filename, so the previous build-then-rename would break
it).
Setting APPIMAGE_EXTRACT_AND_RUN for the whole step made the final
--appimage-signature verification launch the Beam Qt GUI (which aborts
headless in CI) instead of letting the runtime print the signature.
Apply the flag only to the appimagetool invocation that needs it, and
drop the signature print since appimagetool already logs that signing
succeeded.
@ivan-hc

ivan-hc commented Jul 3, 2026

Copy link
Copy Markdown

Not included (manual release step)

Releases are published manually, so shipping the raw .AppImage on the GitHub Release (rather than the CI artifact .zip) remains a manual step. This workflow now provides the raw .AppImage, its .zsync, and the checksum in the artifact so they can be attached directly.

in the CI, as final step of the build procedure, you need actions/upload-artifact, this is an example from one of my repositories

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v6

    - name: build
      if: always()
      run: |
        sudo apt update && sudo apt install desktop-file-utils
        chmod a+x ./builder.sh
        ./builder.sh
        mkdir dist
        mv *AppImage* dist/

    - name: Upload artifact
      uses: actions/upload-artifact@v4.4.0
      with:
        name: AppImage
        path: 'dist'

as separate step, you need something to download such artifacts and automatically add them to the created tag.

Below, an example with two different actions I use (you can choose the one that fits better):

  release:
      needs: [build]
      permissions: write-all
      runs-on: ubuntu-latest

      steps:
        - uses: actions/download-artifact@v4.1.8
          with:
            name: AppImage

        # Snapshot Release
        - name: get date
          run: |
            SNAPSHOT_TAG="$(date --utc +'%Y%m%d-%H%M%S')"
            echo SNAPSHOT_TAG="${SNAPSHOT_TAG}" >> "${GITHUB_ENV}"
          continue-on-error: false
        - name: create snapshot
          uses: softprops/action-gh-release@v2
          with:
            name: "Snapshot ${{ env.SNAPSHOT_TAG}}"
            tag_name: "${{ env.SNAPSHOT_TAG}}"
            prerelease: false
            draft: false
            generate_release_notes: false
            make_latest: false
            files: |
              *.AppImage*
          continue-on-error: false

        # Continuous release
        - name: release
          uses: marvinpinto/action-automatic-releases@latest
          with:
            title: Continuous build
            automatic_release_tag: continuous
            prerelease: false
            draft: false
            files: |
              *.AppImage*
            repo_token: ${{ secrets.GITHUB_TOKEN }}

The above creates two tags:

  1. softprops/action-gh-release@v2 is the one I use for snapshot releases, but maybe you can use it by default, since its still maintained (v2 is old, you may need to use the more recent release... I haven't, since I have several repositories... and few time for them 😞 )
  2. marvinpinto/action-automatic-releases@latest is archivied from 4 years, but still works well, I use it for continuous releases (latest)

Again, use the one that you feel its better.

ivan-hc added a commit to ivan-hc/AM that referenced this pull request Jul 4, 2026
github-actions Bot pushed a commit to ivan-hc/AM that referenced this pull request Jul 4, 2026
github-actions Bot added a commit to pkgforge-community/AM-HF-SYNC that referenced this pull request Jul 4, 2026
github-actions Bot pushed a commit to pkgforge-community/AM-HF-SYNC that referenced this pull request Jul 4, 2026
…W/beam-ui#1265 (sync lists) [17eea9757bc91f58f49f6211f0c3b06f389fac0c]] ⌚
github-actions Bot pushed a commit to pkgforge-community/AM-HF-SYNC that referenced this pull request Jul 4, 2026
…W/beam-ui#1265 (sync lists) [17eea9757bc91f58f49f6211f0c3b06f389fac0c]] ⌚
github-actions Bot added a commit to pkgforge-community/AM-HF-SYNC that referenced this pull request Jul 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants