Pārlūkot izejas kodu

add release workflow, linux and windows packages

UwU 2 mēneši atpakaļ
vecāks
revīzija
e3968deb58

+ 73 - 0
.github/workflows/release.yml

@@ -0,0 +1,73 @@
+name: build
+
+on:
+  push:
+    branches: [master]
+    tags: ['v*']
+  pull_request:
+  workflow_dispatch:
+
+jobs:
+  build:
+    strategy:
+      fail-fast: false
+      matrix:
+        include:
+          - os: ubuntu-latest
+            rid: linux-x64
+          - os: windows-latest
+            rid: win-x64
+    runs-on: ${{ matrix.os }}
+    steps:
+      - uses: actions/checkout@v7
+      - uses: actions/setup-dotnet@v5
+        with:
+          dotnet-version: 8.0.x
+      - run: dotnet publish -c Release -r ${{ matrix.rid }} --self-contained -o publish
+      - name: Package tarball
+        if: runner.os == 'Linux'
+        run: tar -czf SLAM-Cross-${{ matrix.rid }}.tar.gz -C publish .
+      - name: Build AppImage
+        if: runner.os == 'Linux'
+        run: sh packaging/build-appimage.sh
+      - name: Build deb and rpm
+        if: runner.os == 'Linux'
+        run: |
+          v=0.0.0
+          case "$GITHUB_REF" in refs/tags/v*) v=${GITHUB_REF_NAME#v} ;; esac
+          curl -sfL https://github.com/goreleaser/nfpm/releases/download/v2.47.0/nfpm_2.47.0_Linux_x86_64.tar.gz | tar xz nfpm
+          VERSION=$v ./nfpm package -f packaging/nfpm.yaml -p deb
+          VERSION=$v ./nfpm package -f packaging/nfpm.yaml -p rpm
+      - name: Package zip
+        if: runner.os == 'Windows'
+        run: Compress-Archive -Path publish/* -DestinationPath SLAM-Cross-${{ matrix.rid }}.zip
+      - uses: actions/upload-artifact@v7
+        with:
+          name: SLAM-Cross-${{ matrix.rid }}
+          path: |
+            SLAM-Cross-*.tar.gz
+            SLAM-Cross-*.zip
+            SLAM-Cross-*.AppImage
+            slam-cross*.deb
+            slam-cross*.rpm
+
+  release:
+    if: startsWith(github.ref, 'refs/tags/v')
+    needs: build
+    runs-on: ubuntu-latest
+    permissions:
+      contents: write
+    steps:
+      - uses: actions/download-artifact@v8
+        with:
+          merge-multiple: true
+      - name: Create release
+        env:
+          GH_TOKEN: ${{ github.token }}
+        run: >
+          gh release create ${{ github.ref_name }}
+          SLAM-Cross-linux-x64.tar.gz SLAM-Cross-win-x64.zip
+          SLAM-Cross-x86_64.AppImage slam-cross*.deb slam-cross*.rpm
+          --repo ${{ github.repository }}
+          --title ${{ github.ref_name }}
+          --generate-notes

+ 8 - 6
Services/AudioService.cs

@@ -137,14 +137,16 @@ public class LinuxAudioService : IAudioService
 
 public class WindowsAudioService : IAudioService
 {
-    private NAudio.Wave.WaveOut? _waveOut;
+    private NAudio.Wave.WaveOutEvent? _waveOut;
 
     public List<AudioDevice> GetOutputDevices()
     {
         var list = new List<AudioDevice>();
-        for (int i = 0; i < NAudio.Wave.WaveOut.DeviceCount; i++)
+        int count = NAudio.Wave.WaveInterop.waveOutGetNumDevs();
+        int size = System.Runtime.InteropServices.Marshal.SizeOf<NAudio.Wave.WaveOutCapabilities>();
+        for (int i = 0; i < count; i++)
         {
-            var caps = NAudio.Wave.WaveOut.GetCapabilities(i);
+            NAudio.Wave.WaveInterop.waveOutGetDevCaps((IntPtr)i, out var caps, size);
             list.Add(new AudioDevice(i, caps.ProductName));
         }
         return list;
@@ -153,9 +155,9 @@ public class WindowsAudioService : IAudioService
     public List<AudioDevice> GetInputDevices()
     {
         var list = new List<AudioDevice>();
-        for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++)
+        for (int i = 0; i < NAudio.Wave.WaveInEvent.DeviceCount; i++)
         {
-            var caps = NAudio.Wave.WaveIn.GetCapabilities(i);
+            var caps = NAudio.Wave.WaveInEvent.GetCapabilities(i);
             list.Add(new AudioDevice(i, caps.ProductName));
         }
         return list;
@@ -188,7 +190,7 @@ public class WindowsAudioService : IAudioService
             reader = wave;
         }
 
-        _waveOut = new NAudio.Wave.WaveOut { DeviceNumber = deviceIndex };
+        _waveOut = new NAudio.Wave.WaveOutEvent { DeviceNumber = deviceIndex };
         _waveOut.Init(reader);
         _waveOut.Play();
     }

+ 1 - 1
ViewModels/MainWindowViewModel.cs

@@ -638,7 +638,7 @@ public partial class MainWindowViewModel : ViewModelBase
         File.AppendAllText("errorlog.txt", $"----{DateTime.UtcNow} UTC----\n{ex}\n");
     }
 
-    private const bool DebugLogging = false; // flip to true to log to slam_debug.log
+    private static readonly bool DebugLogging = false; // flip to true to log to slam_debug.log
 
     private static void DebugLog(string msg)
     {

+ 20 - 0
packaging/build-appimage.sh

@@ -0,0 +1,20 @@
+#!/bin/sh
+set -e
+
+rm -rf AppDir
+mkdir -p AppDir/usr/lib/slam-cross
+cp -a publish/. AppDir/usr/lib/slam-cross/
+cp packaging/slam-cross.desktop packaging/slam-cross.png AppDir/
+
+cat > AppDir/AppRun <<'EOF'
+#!/bin/sh
+here="$(dirname "$(readlink -f "$0")")"
+exec "$here/usr/lib/slam-cross/SLAM-Cross" "$@"
+EOF
+chmod +x AppDir/AppRun
+
+if [ ! -x appimagetool ]; then
+    curl -sfLo appimagetool https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-x86_64.AppImage
+    chmod +x appimagetool
+fi
+ARCH=x86_64 ./appimagetool --appimage-extract-and-run AppDir SLAM-Cross-x86_64.AppImage

+ 23 - 0
packaging/nfpm.yaml

@@ -0,0 +1,23 @@
+name: slam-cross
+arch: amd64
+platform: linux
+version: ${VERSION}
+maintainer: WallpaperEngineLover <ax3lhack@proton.me>
+description: |
+  Soundboard for CS2, Discord and TeamSpeak.
+  Play music through your mic via a virtual audio cable.
+homepage: https://github.com/WallpaperEngineLover/SLAM-Cross
+section: sound
+recommends:
+  - ffmpeg
+contents:
+  - src: publish
+    dst: /usr/lib/slam-cross
+    type: tree
+  - src: /usr/lib/slam-cross/SLAM-Cross
+    dst: /usr/bin/slam-cross
+    type: symlink
+  - src: packaging/slam-cross.desktop
+    dst: /usr/share/applications/slam-cross.desktop
+  - src: packaging/slam-cross.png
+    dst: /usr/share/icons/hicolor/256x256/apps/slam-cross.png

+ 8 - 0
packaging/slam-cross.desktop

@@ -0,0 +1,8 @@
+[Desktop Entry]
+Type=Application
+Name=SLAM Cross
+Comment=Soundboard for CS2 and voice chat apps
+Exec=slam-cross
+Icon=slam-cross
+Terminal=false
+Categories=AudioVideo;Audio;

BIN
packaging/slam-cross.png