From 3eba50a0d30839b507c7924e7f0c10fe30ee7a23 Mon Sep 17 00:00:00 2001 From: Jon Stelly <967068+jonstelly@users.noreply.github.com> Date: Wed, 25 Mar 2026 07:09:28 -0500 Subject: [PATCH] feat: workflow and build updates (#372) * feat: workflow and build updates - macos 15 runners - add linux arm build - combine pre-release and tagged-release workflows * remove old release job * rename x86-64 -> x86_64 * rename arm -> arm64 * downgrade arm runner to ubuntu-22.04 --------- Co-authored-by: Ferdinand Schober Co-authored-by: Ferdinand Schober --- .../{pre-release.yml => release.yml} | 96 ++++++++--- .github/workflows/tagged-release.yml | 154 ------------------ README.md | 5 + 3 files changed, 75 insertions(+), 180 deletions(-) rename .github/workflows/{pre-release.yml => release.yml} (62%) delete mode 100644 .github/workflows/tagged-release.yml diff --git a/.github/workflows/pre-release.yml b/.github/workflows/release.yml similarity index 62% rename from .github/workflows/pre-release.yml rename to .github/workflows/release.yml index fc28d5f..6c3cdcd 100644 --- a/.github/workflows/pre-release.yml +++ b/.github/workflows/release.yml @@ -1,10 +1,17 @@ -name: "pre-release" +name: "Release" +run-name: "Release - ${{ startsWith(github.ref, 'refs/tags/') && github.ref_name || github.event.inputs.name || github.ref_name }}" on: push: branches: [ "main" ] - - + tags: + - v** + workflow_dispatch: + inputs: + name: + description: 'Development release name' + required: false + default: '' env: CARGO_TERM_COLOR: always @@ -20,12 +27,33 @@ jobs: sudo apt-get install libx11-dev libxtst-dev sudo apt-get install libadwaita-1-dev libgtk-4-dev - name: Release Build - run: cargo build --release + run: | + cargo build --release + cp target/release/lan-mouse lan-mouse-linux-x86_64 - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: lan-mouse-linux - path: target/release/lan-mouse + name: lan-mouse-linux-x86_64 + path: lan-mouse-linux-x86_64 + + linux-arm64-release-build: + runs-on: ubuntu-22.04-arm + steps: + - uses: actions/checkout@v4 + - name: install dependencies + run: | + sudo apt-get update + sudo apt-get install libx11-dev libxtst-dev + sudo apt-get install libadwaita-1-dev libgtk-4-dev + - name: Release Build + run: | + cargo build --release + cp target/release/lan-mouse lan-mouse-linux-arm64 + - name: Upload build artifact + uses: actions/upload-artifact@v4 + with: + name: lan-mouse-linux-arm64 + path: lan-mouse-linux-arm64 windows-release-build: runs-on: windows-latest @@ -72,12 +100,12 @@ jobs: mkdir "lan-mouse-windows" Get-Childitem -Path "C:\\gtk-build\\gtk\\x64\\release\\bin\\*.dll" -File -Recurse | Copy-Item -Destination "lan-mouse-windows" Copy-Item -Path "target\release\lan-mouse.exe" -Destination "lan-mouse-windows" - Compress-Archive -Path "lan-mouse-windows\*" -DestinationPath lan-mouse-windows.zip + Compress-Archive -Path "lan-mouse-windows\*" -DestinationPath lan-mouse-windows-x86_64.zip - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: lan-mouse-windows - path: lan-mouse-windows.zip + name: lan-mouse-windows-x86_64 + path: lan-mouse-windows-x86_64.zip macos-release-build: runs-on: macos-15-intel @@ -109,8 +137,8 @@ jobs: name: lan-mouse-macos-intel path: target/release/bundle/osx/lan-mouse-macos-intel.zip - macos-aarch64-release-build: - runs-on: macos-14 + macos-arm64-release-build: + runs-on: macos-15 steps: - uses: actions/checkout@v4 - name: install dependencies @@ -120,7 +148,7 @@ jobs: - name: Release Build run: | cargo build --release - cp target/release/lan-mouse lan-mouse-macos-aarch64 + cp target/release/lan-mouse lan-mouse-macos-arm64 - name: Make icns run: scripts/makeicns.sh - name: Install cargo bundle @@ -132,29 +160,45 @@ jobs: - name: Zip bundle run: | cd target/release/bundle/osx - zip -r "lan-mouse-macos-aarch64.zip" "Lan Mouse.app" + zip -r "lan-mouse-macos-arm64.zip" "Lan Mouse.app" - name: Upload build artifact uses: actions/upload-artifact@v4 with: - name: lan-mouse-macos-aarch64 - path: target/release/bundle/osx/lan-mouse-macos-aarch64.zip + name: lan-mouse-macos-arm64 + path: target/release/bundle/osx/lan-mouse-macos-arm64.zip - pre-release: - name: "Pre Release" - needs: [windows-release-build, linux-release-build, macos-release-build, macos-aarch64-release-build] + release: + name: "Release" + needs: [windows-release-build, linux-release-build, linux-arm64-release-build, macos-release-build, macos-arm64-release-build] runs-on: "ubuntu-latest" steps: - name: Download build artifacts uses: actions/download-artifact@v4 - - name: Create Release - uses: "marvinpinto/action-automatic-releases@latest" + - name: Create Pre-Release + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + uses: softprops/action-gh-release@v2 with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - automatic_release_tag: "latest" + token: ${{ secrets.GITHUB_TOKEN }} + tag_name: ${{ github.event.inputs.name || github.ref_name }} + name: ${{ github.event.inputs.name || github.ref_name }} prerelease: true - title: "Development Build" + generate_release_notes: true files: | - lan-mouse-linux/lan-mouse + lan-mouse-linux-x86_64/lan-mouse-linux-x86_64 + lan-mouse-linux-arm64/lan-mouse-linux-arm64 lan-mouse-macos-intel/lan-mouse-macos-intel.zip - lan-mouse-macos-aarch64/lan-mouse-macos-aarch64.zip - lan-mouse-windows/lan-mouse-windows.zip + lan-mouse-macos-arm64/lan-mouse-macos-arm64.zip + lan-mouse-windows-x86_64/lan-mouse-windows-x86_64.zip + - name: Create Tagged Release + if: startsWith(github.ref, 'refs/tags/') + uses: softprops/action-gh-release@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: ${{ github.ref_name }} + generate_release_notes: true + files: | + lan-mouse-linux-x86_64/lan-mouse-linux-x86_64 + lan-mouse-linux-arm64/lan-mouse-linux-arm64 + lan-mouse-macos-intel/lan-mouse-macos-intel.zip + lan-mouse-macos-arm64/lan-mouse-macos-arm64.zip + lan-mouse-windows-x86_64/lan-mouse-windows-x86_64.zip diff --git a/.github/workflows/tagged-release.yml b/.github/workflows/tagged-release.yml deleted file mode 100644 index 6759617..0000000 --- a/.github/workflows/tagged-release.yml +++ /dev/null @@ -1,154 +0,0 @@ -name: "Tagged Release" - -on: - push: - tags: - - v** - -jobs: - linux-release-build: - runs-on: ubuntu-22.04 - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: | - sudo apt-get update - sudo apt-get install libx11-dev libxtst-dev - sudo apt-get install libadwaita-1-dev libgtk-4-dev - - name: Release Build - run: cargo build --release - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse-linux - path: target/release/lan-mouse - - windows-release-build: - runs-on: windows-latest - steps: - - uses: actions/setup-python@v5 - with: - python-version: '3.11' - # needed for cache restore - - name: create gtk dir - run: mkdir C:\gtk-build\gtk\x64\release - - uses: actions/cache@v3 - id: cache - with: - path: c:/gtk-build/gtk/x64/release/** - key: gtk-windows-build - restore-keys: gtk-windows-build - - name: Update path - run: | - echo "PKG_CONFIG=C:\gtk-build\gtk\x64\release\bin\pkgconf.exe" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append - echo "C:\pkg-config-lite-0.28-1\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo "C:\gtk-build\gtk\x64\release\bin" | Out-File -FilePath $env:GITHUB_PATH -Encoding utf8 -Append - echo $env:GITHUB_PATH - echo $env:PATH - - name: Install dependencies - if: steps.cache.outputs.cache-hit != 'true' - run: | - # choco install msys2 - # choco install visualstudio2022-workload-vctools - # choco install pkgconfiglite - py -m venv .venv - .venv\Scripts\activate.ps1 - py -m pip install gvsbuild - # see https://github.com/wingtk/gvsbuild/pull/1004 - Move-Item "C:\Program Files\Git\usr\bin" "C:\Program Files\Git\usr\notbin" - Move-Item "C:\Program Files\Git\bin" "C:\Program Files\Git\notbin" - gvsbuild build --msys-dir=C:\msys64 gtk4 libadwaita librsvg - Move-Item "C:\Program Files\Git\usr\notbin" "C:\Program Files\Git\usr\bin" - Move-Item "C:\Program Files\Git\notbin" "C:\Program Files\Git\bin" - - uses: actions/checkout@v4 - - name: Release Build - run: cargo build --release - - name: Create Archive - run: | - mkdir "lan-mouse-windows" - Get-Childitem -Path "C:\\gtk-build\\gtk\\x64\\release\\bin\\*.dll" -File -Recurse | Copy-Item -Destination "lan-mouse-windows" - Copy-Item -Path "target\release\lan-mouse.exe" -Destination "lan-mouse-windows" - Compress-Archive -Path "lan-mouse-windows\*" -DestinationPath lan-mouse-windows.zip - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse-windows - path: lan-mouse-windows.zip - - macos-release-build: - runs-on: macos-15-intel - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: | - brew install --cask inkscape - brew install gtk4 libadwaita imagemagick librsvg - - name: Release Build - run: | - cargo build --release - cp target/release/lan-mouse lan-mouse-macos-intel - - name: Make icns - run: scripts/makeicns.sh - - name: Install cargo bundle - run: cargo install cargo-bundle - - name: Bundle - run: | - cargo bundle --release - scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse" - - name: Zip bundle - run: | - cd target/release/bundle/osx - zip -r "lan-mouse-macos-intel.zip" "Lan Mouse.app" - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse-macos-intel.zip - path: target/release/bundle/osx/lan-mouse-macos-intel.zip - - macos-aarch64-release-build: - runs-on: macos-14 - steps: - - uses: actions/checkout@v4 - - name: install dependencies - run: | - brew install --cask inkscape - brew install gtk4 libadwaita imagemagick librsvg - - name: Release Build - run: | - cargo build --release - cp target/release/lan-mouse lan-mouse-macos-aarch64 - - name: Make icns - run: scripts/makeicns.sh - - name: Install cargo bundle - run: cargo install cargo-bundle - - name: Bundle - run: | - cargo bundle --release - scripts/copy-macos-dylib.sh "target/release/bundle/osx/Lan Mouse.app/Contents/MacOS/lan-mouse" - - name: Zip bundle - run: | - cd target/release/bundle/osx - zip -r "lan-mouse-macos-aarch64.zip" "Lan Mouse.app" - - name: Upload build artifact - uses: actions/upload-artifact@v4 - with: - name: lan-mouse-macos-aarch64.zip - path: target/release/bundle/osx/lan-mouse-macos-aarch64.zip - - tagged-release: - name: "Tagged Release" - needs: [windows-release-build, linux-release-build, macos-release-build, macos-aarch64-release-build] - runs-on: "ubuntu-latest" - steps: - - name: Download build artifacts - uses: actions/download-artifact@v4 - - name: Create Release - uses: "marvinpinto/action-automatic-releases@latest" - with: - repo_token: "${{ secrets.GITHUB_TOKEN }}" - prerelease: false - files: | - lan-mouse-linux/lan-mouse - lan-mouse-macos-intel/lan-mouse-macos-intel.zip - lan-mouse-macos-aarch64/lan-mouse-macos-aarch64.zip - lan-mouse-windows/lan-mouse-windows.zip diff --git a/README.md b/README.md index 00e9674..fe6fdc3 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,9 @@ # Lan Mouse + +[![CI](https://github.com/feschber/lan-mouse/actions/workflows/rust.yml/badge.svg)](https://github.com/feschber/lan-mouse/actions/workflows/rust.yml) [![Cachix](https://github.com/feschber/lan-mouse/actions/workflows/cachix.yml/badge.svg)](https://github.com/feschber/lan-mouse/actions/workflows/cachix.yml) [![Pre-release](https://github.com/feschber/lan-mouse/actions/workflows/pre-release.yml/badge.svg)](https://github.com/feschber/lan-mouse/actions/workflows/pre-release.yml) [![Tagged release](https://github.com/feschber/lan-mouse/actions/workflows/tagged-release.yml/badge.svg)](https://github.com/feschber/lan-mouse/actions/workflows/tagged-release.yml) + +[![crates.io](https://img.shields.io/crates/v/lan-mouse.svg)](https://crates.io/crates/lan-mouse) [![license](https://img.shields.io/crates/l/lan-mouse.svg)](https://github.com/feschber/lan-mouse/blob/main/Cargo.toml) + Lan Mouse is a *cross-platform* mouse and keyboard sharing software similar to universal-control on Apple devices. It allows for using multiple PCs via a single set of mouse and keyboard. This is also known as a Software KVM switch.