Skip to content

Build and publish AppImages #9

Build and publish AppImages

Build and publish AppImages #9

Workflow file for this run

name: Build and publish AppImages
on:
release:
types: [published]
workflow_dispatch:
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
target:
- platform: linux/amd64
arch: amd64
- platform: linux/arm64
arch: arm64
base:
- os: ubuntu
codename: focal
pubkey: 871920D1991BC93C
recipe: AppImageBuilder.ubuntu-focal.yml
- os: ubuntu
codename: jammy
pubkey: 871920D1991BC93C
recipe: AppImageBuilder.yml
- os: ubuntu
codename: noble
pubkey: 871920D1991BC93C
recipe: AppImageBuilder.yml
- os: debian
codename: bullseye
pubkey: 0E98404D386FA1D9
pubkey_security: 54404762BBB6E853
recipe: AppImageBuilder.debian-bullseye.yml
- os: debian
codename: bookworm
pubkey: 0E98404D386FA1D9
pubkey_security: 54404762BBB6E853
recipe: AppImageBuilder.debian.yml
- os: debian
codename: trixie
pubkey: 0E98404D386FA1D9
pubkey_security: 54404762BBB6E853
recipe: AppImageBuilder.debian.yml
steps:
- uses: actions/checkout@v4
- uses: rlespinasse/github-slug-action@v4
- name: Setup qemu for docker
uses: docker/setup-qemu-action@v3
if: matrix.target.platform != 'linux/amd64'
- name: Setup buildx for docker
uses: docker/setup-buildx-action@v3
- name: Compile in docker
uses: docker/build-push-action@v5
with:
platforms: ${{ matrix.target.platform }}
outputs: build
build-args: |
BASE_OS=${{ matrix.base.os }}
BASE_CODENAME=${{ matrix.base.codename }}
- name: Prepare environment to build AppImage
env:
TARGET_PLATFORM: ${{ matrix.target.platform }}
shell: bash
run: |
set -eua
if [ -r build/.build-metadata.env ]; then
. build/.build-metadata.env
rm build/.build-metadata.env
fi
APPIMAGE_SOURCE=build
APPIMAGE_VERSION="${GITHUB_REF_SLUG}-${{ matrix.base.codename }}"
APPIMAGE_APT_ARCH="${TARGETARCH}"
APPIMAGE_APT_DISTRO="${{ matrix.base.codename }}"
APPIMAGE_APT_PUBKEY="${{ matrix.base.pubkey }}"
APPIMAGE_APT_PUBKEY_SECURITY="${{ matrix.base.pubkey_security }}"
APPIMAGE_ARCH="${TARGETMACHINE}"
printenv | grep ^APPIMAGE_ >>"${GITHUB_ENV}"
- name: Build AppImage
uses: AppImageCrafters/build-appimage@v1.3
with:
recipe: "${{ matrix.base.recipe }}"
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: appimage-${{ matrix.base.codename }}-${{ matrix.target.arch }}
path: |
./*.AppImage
./*.AppImage.zsync
if-no-files-found: error
test:
runs-on: ubuntu-latest
needs:
- build
strategy:
fail-fast: false
matrix:
target:
- platform: linux/amd64
arch: amd64
base:
- os: ubuntu
codename: focal
- os: ubuntu
codename: jammy
- os: ubuntu
codename: noble
- os: debian
codename: bullseye
- os: debian
codename: bookworm
- os: debian
codename: trixie
- os: fedora
codename: "39"
- os: fedora
codename: "40"
- os: archlinux
codename: base
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Download artifacts
uses: actions/download-artifact@v4
with:
pattern: appimage-*-${{ matrix.target.arch }}
path: appimages
merge-multiple: true
- name: Setup qemu for docker
uses: docker/setup-qemu-action@v3
if: matrix.target.platform != 'linux/amd64'
- name: Setup buildx for docker
uses: docker/setup-buildx-action@v3
- name: Test AppImages
uses: docker/build-push-action@v5
with:
file: AppImageBuilder.test.Dockerfile
context: appimages
platforms: ${{ matrix.target.platform }}
build-args: |
BASE_OS=${{ matrix.base.os }}
BASE_CODENAME=${{ matrix.base.codename }}
release:
if: startsWith(github.ref, 'refs/tags/')
runs-on: ubuntu-latest
needs:
- build
- test
permissions:
contents: write
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
pattern: appimage-*
path: assets
merge-multiple: true
- name: Create checksum for release assets
shell: bash
run: |
algo="${SHA_ALGORITHM:-256}"
find assets -type f | while read -r asset; do
shasum --binary --algorithm "${algo}" "${asset}" >"${asset}.sha${algo}"
done
- name: Upload artifacts to GitHub release
uses: softprops/action-gh-release@v1
with:
files: assets/*