From 790ccdf73b814dd211ff86aa57af7457006dedaf Mon Sep 17 00:00:00 2001 From: snekxs <26660858+snekxs@users.noreply.github.com> Date: Wed, 4 Nov 2026 15:28:00 -0600 Subject: [PATCH 1/2] Add AppImage metadata and update Node 24 actions --- .github/workflows/ci.yml | 6 ++-- .github/workflows/gpui-build.yml | 30 +++++++++++-------- .github/workflows/release.yml | 22 +++++++------- .github/workflows/update-mouse-protocol.yml | 4 +-- .../linux/io.openmouse.bridge.appdata.xml | 17 +++++++++++ 5 files changed, 50 insertions(+), 29 deletions(-) create mode 100644 packaging/linux/io.openmouse.bridge.appdata.xml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e3ef991..6340f3f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -30,7 +30,7 @@ jobs: contents: read pull-requests: read steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 with: persist-credentials: false - uses: actions/github-script@v7 @@ -67,12 +67,12 @@ jobs: - name: Clippy if: steps.changes.outputs.result != 'true' run: cargo clippy --locked --all-targets -- -D warnings - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm cache-dependency-path: native-hid/package-lock.json - - uses: actions/cache@v4 + - uses: actions/cache@v5 id: native-hid-cache with: path: native-hid/node_modules diff --git a/.github/workflows/gpui-build.yml b/.github/workflows/gpui-build.yml index 2f76305..7260ee8 100644 --- a/.github/workflows/gpui-build.yml +++ b/.github/workflows/gpui-build.yml @@ -33,7 +33,7 @@ jobs: APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt @@ -41,12 +41,12 @@ jobs: - uses: Swatinem/rust-cache@v2 with: shared-key: gpui-macos - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm cache-dependency-path: native-hid/package-lock.json - - uses: actions/cache@v4 + - uses: actions/cache@v5 id: native-hid-cache with: path: native-hid/node_modules @@ -128,7 +128,7 @@ jobs: test -d "$RUNNER_TEMP/dmg/OpenMouse Bridge.app" codesign --verify --deep --strict "$RUNNER_TEMP/dmg/OpenMouse Bridge.app" hdiutil detach "$RUNNER_TEMP/dmg" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-macos-dmg path: | @@ -144,7 +144,7 @@ jobs: runs-on: ubuntu-22.04 timeout-minutes: 60 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install build dependencies # HID (udev), TLS, and what GPUI draws and takes input through # (Wayland, X11/XCB, xkbcommon, Vulkan, fontconfig). No GTK: Linux has @@ -157,19 +157,19 @@ jobs: libwayland-dev libxkbcommon-dev libxkbcommon-x11-dev \ libx11-xcb-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \ libvulkan-dev libgl1-mesa-dev libfontconfig-dev libfreetype-dev \ - libasound2-dev + libasound2-dev appstream - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 with: shared-key: gpui-linux - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm cache-dependency-path: native-hid/package-lock.json - - uses: actions/cache@v4 + - uses: actions/cache@v5 id: native-hid-cache with: path: native-hid/node_modules @@ -198,6 +198,8 @@ jobs: cp assets/fonts/DM-Sans-OFL.txt README.md "$appdir/usr/bin/" cp assets/openmouse-app-icon.png "$appdir/io.openmouse.bridge.png" cp assets/openmouse-app-icon.png "$appdir/.DirIcon" + install -Dm644 packaging/linux/io.openmouse.bridge.appdata.xml \ + "$appdir/usr/share/metainfo/io.openmouse.bridge.appdata.xml" cat > "$appdir/io.openmouse.bridge.desktop" <<'DESKTOP' [Desktop Entry] Type=Application @@ -214,6 +216,7 @@ jobs: exec "$HERE/usr/bin/openmouse-bridge" "$@" APPRUN chmod +x "$appdir/AppRun" + appstreamcli validate "$appdir/usr/share/metainfo/io.openmouse.bridge.appdata.xml" - name: Build the AppImage run: | set -euo pipefail @@ -231,9 +234,10 @@ jobs: test -x squashfs-root/usr/bin/native-hid/node/bin/node test -f squashfs-root/usr/bin/native-hid/src/apply.mjs test -f squashfs-root/usr/bin/DM-Sans-OFL.txt + test -f squashfs-root/usr/share/metainfo/io.openmouse.bridge.appdata.xml # Every shared library the binary needs must resolve on this machine. ! ldd squashfs-root/usr/bin/openmouse-bridge | grep 'not found' - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-linux-appimage path: | @@ -249,19 +253,19 @@ jobs: WINDOWS_CERTIFICATE_BASE64: ${{ secrets.WINDOWS_CERTIFICATE_BASE64 }} WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 with: shared-key: gpui-windows - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm cache-dependency-path: native-hid/package-lock.json - - uses: actions/cache@v4 + - uses: actions/cache@v5 id: native-hid-cache with: path: native-hid/node_modules @@ -319,7 +323,7 @@ jobs: if ($LASTEXITCODE -ne 0) { throw 'Installer signing failed' } $checksum = (Get-FileHash OpenMouse-Bridge-windows-x64-setup.exe -Algorithm SHA256).Hash.ToLower() + ' OpenMouse-Bridge-windows-x64-setup.exe' + "`n" [IO.File]::WriteAllText('OpenMouse-Bridge-windows-x64-setup.exe.sha256', $checksum, [Text.UTF8Encoding]::new($false)) - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-windows path: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 0081026..d68fc14 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,12 +21,12 @@ jobs: WINDOWS_CERTIFICATE_BASE64: ${{ secrets.WINDOWS_CERTIFICATE_BASE64 }} WINDOWS_CERTIFICATE_PASSWORD: ${{ secrets.WINDOWS_CERTIFICATE_PASSWORD }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm @@ -99,7 +99,7 @@ jobs: if ($LASTEXITCODE -ne 0) { throw 'Installer signing failed' } $checksum = (Get-FileHash OpenMouse-Bridge-windows-x64-setup.exe -Algorithm SHA256).Hash.ToLower() + ' OpenMouse-Bridge-windows-x64-setup.exe' + "`n" [IO.File]::WriteAllText('OpenMouse-Bridge-windows-x64-setup.exe.sha256', $checksum, [Text.UTF8Encoding]::new($false)) - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-windows path: | @@ -123,13 +123,13 @@ jobs: APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} APPLE_APP_PASSWORD: ${{ secrets.APPLE_APP_PASSWORD }} steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt targets: aarch64-apple-darwin,x86_64-apple-darwin - uses: Swatinem/rust-cache@v2 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm @@ -224,7 +224,7 @@ jobs: test -d "$RUNNER_TEMP/dmg/OpenMouse Bridge.app" codesign --verify --deep --strict "$RUNNER_TEMP/dmg/OpenMouse Bridge.app" hdiutil detach "$RUNNER_TEMP/dmg" - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-macos path: | @@ -239,14 +239,14 @@ jobs: name: Linux x64 runs-on: ubuntu-24.04 steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Install Linux HID and GUI dependencies run: sudo apt-get update && sudo apt-get install -y build-essential clang cmake pkg-config libudev-dev libssl-dev libwayland-dev libxkbcommon-dev libxkbcommon-x11-dev libx11-xcb-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libvulkan-dev libgl1-mesa-dev libfontconfig-dev libfreetype-dev libasound2-dev - uses: dtolnay/rust-toolchain@stable with: components: clippy, rustfmt - uses: Swatinem/rust-cache@v2 - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm @@ -283,7 +283,7 @@ jobs: packaging/bridge/build-bridge-package.sh openmouse-bridge openmouse-bridge-linux-x64.zip openmouse-app-icon.png rm openmouse-bridge openmouse-app-icon.png sha256sum openmouse-bridge-linux-x64.zip > openmouse-bridge-linux-x64.zip.sha256 - - uses: actions/upload-artifact@v4 + - uses: actions/upload-artifact@v6 with: name: bridge-linux path: | @@ -296,10 +296,10 @@ jobs: needs: [windows, macos, linux] runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Verify tag matches Cargo version run: test "v$(sed -n 's/^version = "\(.*\)"/\1/p' Cargo.toml | head -1)" = "${{ github.ref_name }}" - - uses: actions/download-artifact@v4 + - uses: actions/download-artifact@v7 with: path: artifacts merge-multiple: true diff --git a/.github/workflows/update-mouse-protocol.yml b/.github/workflows/update-mouse-protocol.yml index 485df58..a6bfe76 100644 --- a/.github/workflows/update-mouse-protocol.yml +++ b/.github/workflows/update-mouse-protocol.yml @@ -13,7 +13,7 @@ jobs: update: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Check automation token env: PROTOCOL_UPDATE_TOKEN: ${{ secrets.PROTOCOL_UPDATE_TOKEN }} @@ -22,7 +22,7 @@ jobs: echo 'Set the PROTOCOL_UPDATE_TOKEN repository secret to a scoped GitHub App or personal token.' >&2 exit 1 fi - - uses: actions/setup-node@v4 + - uses: actions/setup-node@v5 with: node-version: 24 cache: npm diff --git a/packaging/linux/io.openmouse.bridge.appdata.xml b/packaging/linux/io.openmouse.bridge.appdata.xml new file mode 100644 index 0000000..2498f91 --- /dev/null +++ b/packaging/linux/io.openmouse.bridge.appdata.xml @@ -0,0 +1,17 @@ + + + io.openmouse.bridge + CC0-1.0 + MIT + OpenMouse Bridge + Local mouse companion for the OpenMouse control panel + + OpenMouse Bridge connects the OpenMouse control panel to supported mice. It applies device settings, shows battery status, and displays profile notifications on your desktop. + + io.openmouse.bridge.desktop + https://openmouse.app/ + https://github.com/OpenMouse-Project/OpenMouse-Bridge/issues + + openmouse-bridge + + From 4f9a949ab83a381c3359c4e5cd5aa9bad02ce6c0 Mon Sep 17 00:00:00 2001 From: snekxs <26660858+snekxs@users.noreply.github.com> Date: Wed, 4 Nov 2026 15:31:26 -0600 Subject: [PATCH 2/2] Install AppImage desktop entry in standard path --- .github/workflows/gpui-build.yml | 5 +++++ packaging/linux/io.openmouse.bridge.appdata.xml | 1 + 2 files changed, 6 insertions(+) diff --git a/.github/workflows/gpui-build.yml b/.github/workflows/gpui-build.yml index 7260ee8..01962ea 100644 --- a/.github/workflows/gpui-build.yml +++ b/.github/workflows/gpui-build.yml @@ -210,6 +210,10 @@ jobs: Categories=Utility; Terminal=false DESKTOP + install -Dm644 "$appdir/io.openmouse.bridge.desktop" \ + "$appdir/usr/share/applications/io.openmouse.bridge.desktop" + install -Dm644 assets/openmouse-app-icon.png \ + "$appdir/usr/share/icons/hicolor/512x512/apps/io.openmouse.bridge.png" cat > "$appdir/AppRun" <<'APPRUN' #!/bin/sh HERE="$(dirname "$(readlink -f "$0")")" @@ -235,6 +239,7 @@ jobs: test -f squashfs-root/usr/bin/native-hid/src/apply.mjs test -f squashfs-root/usr/bin/DM-Sans-OFL.txt test -f squashfs-root/usr/share/metainfo/io.openmouse.bridge.appdata.xml + test -f squashfs-root/usr/share/applications/io.openmouse.bridge.desktop # Every shared library the binary needs must resolve on this machine. ! ldd squashfs-root/usr/bin/openmouse-bridge | grep 'not found' - uses: actions/upload-artifact@v6 diff --git a/packaging/linux/io.openmouse.bridge.appdata.xml b/packaging/linux/io.openmouse.bridge.appdata.xml index 2498f91..4cfcd88 100644 --- a/packaging/linux/io.openmouse.bridge.appdata.xml +++ b/packaging/linux/io.openmouse.bridge.appdata.xml @@ -11,6 +11,7 @@ io.openmouse.bridge.desktop https://openmouse.app/ https://github.com/OpenMouse-Project/OpenMouse-Bridge/issues + openmouse-bridge
OpenMouse Bridge connects the OpenMouse control panel to supported mice. It applies device settings, shows battery status, and displays profile notifications on your desktop.