name: electron-linux-arm64 on: push: branches: [ main ] tags: [ 'v*' ] pull_request: branches: [ main ] workflow_dispatch: jobs: electron-linux-arm64: runs-on: arm64-native steps: - uses: actions/checkout@v4 - name: Install Linux packages for electron build run: | set -eu apt-get update DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \ build-essential curl git python3 python3-pip xz-utils libgtk-3-0 libnotify4 libnss3 libxss1 libasound2 libatk1.0-0 libatk-bridge2.0-0 libglib2.0-0 libx11-6 libgdk-pixbuf2.0-0 libpango-1.0-0 libxrandr2 libxinerama1 libxcursor1 libxi6 libfontconfig1 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install npm dependencies run: | set -eu npm ci - name: Build AppImage (arm64) run: | set -eu npm run build:linux:arm64 - name: Collect single consumer artifact (no-FUSE compatible) run: | set -eu rm -rf artifacts mkdir -p artifacts appimage=$(find dist -maxdepth 1 -type f -name '*.AppImage' | head -n 1 || true) [ -n "$appimage" ] || { echo 'AppImage missing'; exit 1; } out="artifacts/electron_tray_demo-linux-arm64-run${{ github.run_number }}.AppImage" cat > "$out" <<'SH' #!/usr/bin/env sh set -eu self="$0" workdir="$(mktemp -d)" cleanup() { rm -rf "$workdir"; } trap cleanup EXIT INT TERM payload="$workdir/app.AppImage" awk 'found { print } /^__APPIMAGE_PAYLOAD_BELOW__$/ { found=1; next }' "$self" | base64 -d > "$payload" chmod +x "$payload" APPIMAGE_EXTRACT_AND_RUN=1 "$payload" "$@" exit $? __APPIMAGE_PAYLOAD_BELOW__ SH # remove YAML indentation from embedded launcher script sed -i 's/^ //' "$out" base64 -w 0 "$appimage" >> "$out" echo >> "$out" chmod +x "$out" - name: Upload artifacts uses: actions/upload-artifact@v3 with: name: electron_tray_demo-linux-arm64-run${{ github.run_number }} path: artifacts/ retention-days: 14