From c2b960e4c707fe75014e948fb317fb7aad41bcac Mon Sep 17 00:00:00 2001 From: Christian Date: Wed, 6 Sep 2023 20:12:21 +0200 Subject: [PATCH] Add AppImage builder workflow (#3) --- .dockerignore | 3 ++ .github/workflows/release.yml | 78 ++++++++++++++++++++++++++++++++++ Dockerfile | 19 +++++++++ dist/AppImageBuilder.yml | 49 +++++++++++++++++++++ dist/evdevhook2.png | Bin 0 -> 2914 bytes 5 files changed, 149 insertions(+) create mode 100644 .dockerignore create mode 100644 .github/workflows/release.yml create mode 100644 Dockerfile create mode 100644 dist/AppImageBuilder.yml create mode 100644 dist/evdevhook2.png diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..04f3214 --- /dev/null +++ b/.dockerignore @@ -0,0 +1,3 @@ +.git +.github +Dockerfile diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..09f3b4a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,78 @@ +name: Build and publish AppImages + +env: + UBUNTU_RELEASE: jammy + UBUNTU_PUBKEY: 871920D1991BC93C + +on: + push: + pull_request: + +jobs: + build: + runs-on: ubuntu-latest + strategy: + fail-fast: true + matrix: + platform: + - linux/amd64 + - linux/arm64 + steps: + - uses: actions/checkout@v4 + - uses: docker/setup-qemu-action@v2 + if: matrix.platform != 'linux/amd64' + - uses: docker/setup-buildx-action@v2 + - uses: docker/build-push-action@v4 + with: + platforms: ${{ matrix.platform }} + outputs: build + build-args: | + UBUNTU_RELEASE + - uses: rlespinasse/github-slug-action@v4 + - name: Prepare AppImage build + env: + TARGET_PLATFORM: ${{ matrix.platform }} + shell: bash + run: | + set -eu + find build -mindepth 1 -maxdepth 1 -type d | while read -r path; do + set -a + APPIMAGE_PATH="${path}" + APPIMAGE_VERSION="${GITHUB_REF_SLUG}" + APPIMAGE_APT_ARCH="${TARGET_PLATFORM#*/}" + APPIMAGE_APT_DISTRO="${UBUNTU_RELEASE}" + APPIMAGE_APT_PUBKEY="${UBUNTU_PUBKEY}" + APPIMAGE_ARCH="$(basename "${path}")" + printenv | grep ^APPIMAGE_ >>"${GITHUB_ENV}" + done + - uses: AppImageCrafters/build-appimage@v1 + with: + recipe: dist/AppImageBuilder.yml + - uses: actions/upload-artifact@v3 + with: + name: appimages + path: ./*.AppImage* + if-no-files-found: error + + release: + if: startsWith(github.ref, 'refs/tags/') + runs-on: ubuntu-latest + needs: + - build + permissions: + contents: write + steps: + - uses: actions/download-artifact@v3 + with: + name: appimages + path: assets + - 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 + - uses: softprops/action-gh-release@v1 + with: + files: assets/* diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..1433d23 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,19 @@ +ARG UBUNTU_RELEASE=jammy + +FROM ubuntu:$UBUNTU_RELEASE AS build-stage +RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ + git ca-certificates build-essential libudev-dev libevdev-dev zlib1g-dev valac libgee-0.8-dev meson +COPY . / +ARG BUILD_TYPE=release +ARG ENABLE_LTO=true +RUN meson setup \ + "--fatal-meson-warnings" \ + "--buildtype=${BUILD_TYPE}" \ + "-Db_lto=${ENABLE_LTO}" \ + "--prefix=/usr" \ + /build && \ + meson compile -C /build && \ + meson install "--destdir=/release/$(uname -m)" -C /build + +FROM scratch AS export-stage +COPY --from=build-stage /release/ / diff --git a/dist/AppImageBuilder.yml b/dist/AppImageBuilder.yml new file mode 100644 index 0000000..653509a --- /dev/null +++ b/dist/AppImageBuilder.yml @@ -0,0 +1,49 @@ +version: 1 + +script: +- | + icon_path="{{APPIMAGE_PATH}}/usr/share/icons/hicolor/128x128/apps" + mkdir -p "${icon_path}" + cp -a dist/evdevhook2.png "${icon_path}" + +AppDir: + path: "{{APPIMAGE_PATH}}" + + app_info: + id: org.v1993.evdevhook2 + name: evdevhook2 + version: "{{APPIMAGE_VERSION}}" + icon: evdevhook2 + exec: usr/bin/evdevhook2 + exec_args: $@ + + apt: + arch: + - "{{APPIMAGE_APT_ARCH}}" + sources: + - sourceline: deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ "{{APPIMAGE_APT_DISTRO}}" main + key_url: "http://keyserver.ubuntu.com/pks/lookup?op=get&search=0x{{APPIMAGE_APT_PUBKEY}}" + - sourceline: deb [arch=amd64] http://archive.ubuntu.com/ubuntu/ "{{APPIMAGE_APT_DISTRO}}"-updates main + - sourceline: deb [arch=amd64] http://security.ubuntu.com/ubuntu/ "{{APPIMAGE_APT_DISTRO}}"-security main + - sourceline: deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ "{{APPIMAGE_APT_DISTRO}}" main + - sourceline: deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ "{{APPIMAGE_APT_DISTRO}}"-updates main + - sourceline: deb [arch=arm64] http://ports.ubuntu.com/ubuntu-ports/ "{{APPIMAGE_APT_DISTRO}}"-security main + include: + - libudev1 + - libevdev2 + - libglib2.0-0 + - libgee-0.8-2 + + files: + exclude: + - usr/share/man + - usr/share/doc/*/README.* + - usr/share/doc/*/changelog.* + - usr/share/doc/*/NEWS.* + - usr/share/doc/*/TODO.* + - usr/share/lintian + - usr/lib/*/glib-2.0 + +AppImage: + arch: "{{APPIMAGE_ARCH}}" + update-information: "gh-releases-zsync|v1993|evdevhook2|latest|evdevhook2-*-{{APPIMAGE_ARCH}}.AppImage.zsync" diff --git a/dist/evdevhook2.png b/dist/evdevhook2.png new file mode 100644 index 0000000000000000000000000000000000000000..b37ee33071c60f3c1a62e28fc9f04df8f25450cd GIT binary patch literal 2914 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 M07*qoM6N<$f?6bcRR910 literal 0 HcmV?d00001