Skip to content

Commit

Permalink
Upstream: Restore appimage workflow
Browse files Browse the repository at this point in the history
  • Loading branch information
antoinevg committed Jul 30, 2024
1 parent f9f4219 commit 4ccec3d
Show file tree
Hide file tree
Showing 2 changed files with 200 additions and 1 deletion.
199 changes: 199 additions & 0 deletions .github/workflows/appimage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,199 @@
on:
push:
pull_request:
workflow_dispatch:

name: CI-DOCKER

env:
GTK_VERSION: 4.14.4
IMAGE_NAME: ${{ github.repository }}-gtk-4.14.4
IMAGE_TAG: ${{ github.ref_name }}

jobs:
create-docker-image:
permissions:
contents: read
packages: write
attestations: write
id-token: write

name: Create Docker image
runs-on: ubuntu-latest
outputs:
NAME: ${{ env.IMAGE_NAME }}
TAG: ${{ env.IMAGE_TAG }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Escape image tag
run: |
echo "IMAGE_TAG=$(echo ${{ env.IMAGE_TAG }} | sed -e 's/\//-/g')" >> $GITHUB_ENV
echo "IMAGE_NAME: ${{ env.IMAGE_NAME }}"
echo "IMAGE_TAG: ${{ env.IMAGE_TAG }}"
- name: Use 'main' Docker image tag if this is a PR from a fork
id: origin
shell: bash
if: github.event.pull_request.head.repo.fork
run: |
echo 'IMAGE_TAG=main' >> $GITHUB_ENV
- name: Check if Dockerfile has changed
uses: dorny/paths-filter@v3
id: changed
with:
base: ${{ github.ref_name }}
filters: |
dockerfile:
- "appimage/docker/**"
- name: Check if Docker image exists
id: exists
shell: bash
run: |
declare -a HEADERS=(
'-H' "Accept: application/vnd.oci.image.manifest.v1+json"
'-H' "Accept: application/vnd.oci.image.index.v1+json"
'-H' "Authorization: Bearer $(echo ${{ secrets.GITHUB_TOKEN }} | base64)"
)
RESULT=$(curl "${HEADERS[@]}" https://ghcr.io/v2/${IMAGE_NAME}/manifests/${IMAGE_TAG})
echo 'dockerimage<<EOF' >> $GITHUB_OUTPUT
echo ${RESULT} | jq 'has("manifests")' >> $GITHUB_OUTPUT
echo 'EOF' >> $GITHUB_OUTPUT
- name: Check if we need to build the Docker image
id: dockerimage
if: |
! github.event.pull_request.head.repo.fork &&
(steps.changed.outputs.dockerfile == 'true' || steps.exists.outputs.dockerimage == 'false')
run: |
echo 'build=true' >> $GITHUB_OUTPUT
- name: Debug Check
shell: bash
run: |
echo IMAGE_NAME: ${{ env.IMAGE_NAME }} # <repo-owner>/<repo>-test
echo IMAGE_TAG: ${{ env.IMAGE_TAG }} # <gh.ref_name>
echo
echo gh.actor: ${{ github.actor }} # antoinevg antoinevg
echo gh.trig_actor: ${{ github.triggering_actor }} # antoinevg antoinevg
echo gh.repo: ${{ github.repository }} # antoinevg/packetry greatscottgadgets/packetry
echo gh.repo_owner: ${{ github.repository_owner }} # antoinevg greatscottgadgets
echo gh.base_ref: ${{ github.base_ref }} # main
echo gh.head_ref: ${{ github.head_ref }} # antoinevg/fix-pr-403
echo gh.ref_name: ${{ github.ref_name }} # antoinevg/fix-pr-403 149/merge
echo
echo check.forked: ${{ github.event.pull_request.head.repo.fork }} # true
echo check.changed: ${{ steps.changed.outputs.dockerfile }} # true true
echo check.exists: ${{ steps.exists.outputs.dockerimage }} # false false
echo
echo build: ${{ steps.dockerimage.outputs.build }}
- name: Log in to the Container registry
if: steps.dockerimage.outputs.build
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Set up Docker Buildx
if: steps.dockerimage.outputs.build
uses: docker/setup-buildx-action@v3

- name: Build and push Docker image
if: steps.dockerimage.outputs.build
id: push
uses: docker/build-push-action@v6
with:
context: appimage/docker/
push: true
tags: ghcr.io/${{ env.IMAGE_NAME }}:${{ env.IMAGE_TAG }}
cache-from: type=gha, scope=${{ env.IMAGE_TAG }}
cache-to: type=gha, scope=${{ env.IMAGE_TAG }}, mode=max

- name: Generate artifact attestation
if: steps.dockerimage.outputs.build
uses: actions/attest-build-provenance@v1
with:
subject-name: ghcr.io/${{ env.IMAGE_NAME }}
subject-digest: ${{ steps.push.outputs.digest }}
push-to-registry: true


build-linux-appimage:
permissions:
contents: read
packages: read

needs: create-docker-image

name: Build Linux AppImage
runs-on: ubuntu-latest

container:
image: ghcr.io/${{ needs.create-docker-image.outputs.NAME }}:${{ needs.create-docker-image.outputs.TAG }}
credentials:
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Workaround issues when GitHub does not respect the HOME env var
run: |
# GitHub Actions only supports containers running as root
# see: https://github.com/actions/checkout/issues/1014
mv /home/runner/.cargo $HOME
mv /home/runner/.nvm $HOME
mv /home/runner/.rustup $HOME
- uses: Swatinem/rust-cache@v2

- name: Install toolchain
run: |
rustup toolchain install stable
rustup default stable
- name: Build packetry binary
run: |
cargo build --release
- name: Test under XVFB (Linux)
run: |
xvfb-run cargo test
if: runner.os == 'Linux'

- name: Install cargo-license (Linux)
uses: taiki-e/cache-cargo-install-action@v2
with:
tool: cargo-license

- name: Gather licenses (Linux)
# If the default shell is used, one command failing does not fail the action.
shell: bash
run: |
pip install license-expression
python wix/rust_licenses.py > appimage/packetry.AppDir/usr/share/doc/LICENSE-static-libraries.txt
mv wix/full-licenses appimage/packetry.AppDir/usr/share/doc
cp LICENSE appimage/packetry.AppDir/usr/share/doc/LICENSE-packetry.txt
- name: Run build appimage action (Linux)
# NB: The full path to the action is: ./appimage/action.yml
uses: ./appimage/
with:
executable: target/release/packetry
icon-file: appimage/dist/icon.png
desktop-file: appimage/dist/packetry.desktop
appdir: appimage/packetry.AppDir

- name: Upload AppImage binary (Linux)
uses: actions/upload-artifact@v4
with:
name: Linux AppImage binary
path: packetry-x86_64.AppImage
if-no-files-found: error
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ on:
name: CI-TEST

env:
IMAGE_NAME: ${{ github.repository }}-test
IMAGE_NAME: ${{ github.repository }}-gtk-4.14.4 #-test
IMAGE_TAG: ${{ github.ref_name }}

defaults:
Expand Down

0 comments on commit 4ccec3d

Please sign in to comment.