Skip to content

Build

Build #162

Workflow file for this run

name: Build
on:
push:
tags: ['v*']
workflow_dispatch:
env:
FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: true
jobs:
build-linux-ubuntu2404:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
arch: x86_64
deb_arch: amd64
- os: ubuntu-24.04-arm
arch: arm64
deb_arch: arm64
name: Ubuntu 24.04 (${{ matrix.deb_arch }})
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y \
qt5-qmake qtbase5-dev libqt5serialport5-dev \
qtmultimedia5-dev libqt5websockets5-dev \
libopus-dev libeigen3-dev \
portaudio19-dev librtaudio-dev \
libhidapi-dev libudev-dev libpulse-dev \
libcodec2-dev \
cmake autoconf automake libtool curl \
openssl dpkg-dev
- name: Build RADE
run: |
cd resources/radae_nopy
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
- name: Build
run: |
qmake wfweb.pro
make -j$(nproc)
- name: Install rig definitions
run: |
sudo mkdir -p /usr/local/share/wfview/rigs
sudo cp rigs/*.rig /usr/local/share/wfview/rigs/
- name: Run tests
run: |
sudo apt-get install -y python3-pytest python3-requests
python3 -m pytest tests/ -v
- name: Get version
id: version
run: echo "version=$(grep '#define WFWEB_VERSION' include/wfweb_version.h | grep -oP '[\d.]+')" >> $GITHUB_OUTPUT
- name: Build .deb
run: |
VERSION=${{ steps.version.outputs.version }}
DEB_ROOT=$(pwd)/deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}
sudo make install INSTALL_ROOT=${DEB_ROOT}
sudo chown -R $(id -u):$(id -g) $(pwd)/deb-build
# Bundle librade.so (not packaged by distros yet)
mkdir -p ${DEB_ROOT}/usr/lib
cp resources/radae_nopy/build/src/librade.so* ${DEB_ROOT}/usr/lib/
# Install license files
mkdir -p ${DEB_ROOT}/usr/share/doc/wfweb
cp LICENSE THIRD_PARTY_LICENSES ${DEB_ROOT}/usr/share/doc/wfweb/
mkdir -p ${DEB_ROOT}/DEBIAN
cat > ${DEB_ROOT}/DEBIAN/control << EOF
Package: wfweb
Version: ${VERSION}
Architecture: ${{ matrix.deb_arch }}
Maintainer: Alain De Carolis <adecarolis@users.noreply.github.com>
Depends: openssl, libqt5core5t64, libqt5gui5t64,
libqt5network5t64, libqt5serialport5, libqt5multimedia5,
libqt5websockets5,
libopus0, libportaudio2, libpulse0, libhidapi-libusb0,
libudev1, librtaudio6, libcodec2-1.2
Section: hamradio
Priority: optional
Homepage: https://github.com/adecarolis/wfweb
Description: wfview fork with built-in web interface for browser-based ham radio remote control.
wfweb adds an HTTPS/WebSocket server to wfview, enabling full radio
control and real-time audio streaming from any browser without
installing client software. Based on wfview by Elliott H. Liggett W6EL
and Phil E. Taylor M0VSE (https://gitlab.com/eliggett/wfview).
EOF
sed -i 's/^ //' ${DEB_ROOT}/DEBIAN/control
printf '#!/bin/sh\nset -e\nldconfig || true\n' > ${DEB_ROOT}/DEBIAN/postinst
printf 'if command -v systemctl >/dev/null 2>&1 && systemctl is-system-running --quiet 2>/dev/null; then\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf ' systemctl daemon-reload || true\nfi\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo "wfweb installed. To start automatically at boot, run:"\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo " systemctl enable --now wfweb@\$USER"\n' >> ${DEB_ROOT}/DEBIAN/postinst
chmod 755 ${DEB_ROOT}/DEBIAN/postinst
dpkg-deb --build --root-owner-group ${DEB_ROOT}
BRANCH_SAFE=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9-]/-/g')
case "${{ github.ref }}" in
refs/tags/v*) DEV_SUFFIX="" ;;
*) DEV_SUFFIX="-dev-${BRANCH_SAFE}" ;;
esac
mv deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}.deb \
wfweb_${VERSION}${DEV_SUFFIX}-ubuntu2404_${{ matrix.deb_arch }}.deb
- name: Upload deb artifact
uses: actions/upload-artifact@v7
with:
name: wfweb-${{ matrix.arch }}-ubuntu2404-deb
path: wfweb_*-ubuntu2404_${{ matrix.deb_arch }}.deb
retention-days: 30
build-linux-debian12:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
arch: x86_64
deb_arch: amd64
- os: ubuntu-24.04-arm
arch: arm64
deb_arch: arm64
name: Debian 12 Bookworm (${{ matrix.deb_arch }})
runs-on: ${{ matrix.os }}
container: debian:bookworm
steps:
- name: Install git
run: |
apt-get update
apt-get install -y git
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: |
apt-get install -y \
qt5-qmake qtbase5-dev libqt5serialport5-dev \
qtmultimedia5-dev libqt5websockets5-dev \
libopus-dev libeigen3-dev \
portaudio19-dev librtaudio-dev \
libhidapi-dev libudev-dev libpulse-dev \
libcodec2-dev \
cmake autoconf automake libtool curl \
openssl dpkg-dev
- name: Build RADE
run: |
cd resources/radae_nopy
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
- name: Build
run: |
qmake wfweb.pro
make -j$(nproc)
- name: Install rig definitions
run: |
mkdir -p /usr/local/share/wfview/rigs
cp rigs/*.rig /usr/local/share/wfview/rigs/
- name: Run tests
run: |
apt-get install -y python3-pytest python3-requests
python3 -m pytest tests/ -v
- name: Get version
id: version
run: echo "version=$(grep '#define WFWEB_VERSION' include/wfweb_version.h | grep -oP '[\d.]+')" >> $GITHUB_OUTPUT
- name: Build .deb
run: |
VERSION=${{ steps.version.outputs.version }}
DEB_ROOT=$(pwd)/deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}
make install INSTALL_ROOT=${DEB_ROOT}
# Bundle librade.so
mkdir -p ${DEB_ROOT}/usr/lib
cp resources/radae_nopy/build/src/librade.so* ${DEB_ROOT}/usr/lib/
# Install license files
mkdir -p ${DEB_ROOT}/usr/share/doc/wfweb
cp LICENSE THIRD_PARTY_LICENSES ${DEB_ROOT}/usr/share/doc/wfweb/
mkdir -p ${DEB_ROOT}/DEBIAN
cat > ${DEB_ROOT}/DEBIAN/control << EOF
Package: wfweb
Version: ${VERSION}
Architecture: ${{ matrix.deb_arch }}
Maintainer: Alain De Carolis <adecarolis@users.noreply.github.com>
Depends: openssl, libqt5core5a, libqt5gui5,
libqt5network5, libqt5serialport5, libqt5multimedia5,
libqt5websockets5,
libopus0, libportaudio2, libpulse0, libhidapi-libusb0,
libudev1, librtaudio6, libcodec2-1.0
Section: hamradio
Priority: optional
Homepage: https://github.com/adecarolis/wfweb
Description: wfview fork with built-in web interface for browser-based ham radio remote control.
wfweb adds an HTTPS/WebSocket server to wfview, enabling full radio
control and real-time audio streaming from any browser without
installing client software. Based on wfview by Elliott H. Liggett W6EL
and Phil E. Taylor M0VSE (https://gitlab.com/eliggett/wfview).
EOF
sed -i 's/^ //' ${DEB_ROOT}/DEBIAN/control
printf '#!/bin/sh\nset -e\nldconfig || true\n' > ${DEB_ROOT}/DEBIAN/postinst
printf 'if command -v systemctl >/dev/null 2>&1 && systemctl is-system-running --quiet 2>/dev/null; then\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf ' systemctl daemon-reload || true\nfi\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo "wfweb installed. To start automatically at boot, run:"\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo " systemctl enable --now wfweb@\$USER"\n' >> ${DEB_ROOT}/DEBIAN/postinst
chmod 755 ${DEB_ROOT}/DEBIAN/postinst
dpkg-deb --build --root-owner-group ${DEB_ROOT}
BRANCH_SAFE=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9-]/-/g')
case "${{ github.ref }}" in
refs/tags/v*) DEV_SUFFIX="" ;;
*) DEV_SUFFIX="-dev-${BRANCH_SAFE}" ;;
esac
mv deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}.deb \
wfweb_${VERSION}${DEV_SUFFIX}-debian12_${{ matrix.deb_arch }}.deb
- name: Upload deb artifact
uses: actions/upload-artifact@v7
with:
name: wfweb-${{ matrix.arch }}-debian12-deb
path: wfweb_*-debian12_${{ matrix.deb_arch }}.deb
retention-days: 30
build-linux-debian13:
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-24.04
arch: x86_64
deb_arch: amd64
- os: ubuntu-24.04-arm
arch: arm64
deb_arch: arm64
name: Debian 13 Trixie (${{ matrix.deb_arch }})
runs-on: ${{ matrix.os }}
container: debian:trixie
steps:
- name: Install git
run: |
apt-get update
apt-get install -y git
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: |
apt-get install -y \
qt5-qmake qtbase5-dev libqt5serialport5-dev \
qtmultimedia5-dev libqt5websockets5-dev \
libopus-dev libeigen3-dev \
portaudio19-dev librtaudio-dev \
libhidapi-dev libudev-dev libpulse-dev \
libcodec2-dev \
cmake autoconf automake libtool curl \
openssl dpkg-dev
- name: Build RADE
run: |
cd resources/radae_nopy
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
- name: Build
run: |
qmake wfweb.pro
make -j$(nproc)
- name: Install rig definitions
run: |
mkdir -p /usr/local/share/wfview/rigs
cp rigs/*.rig /usr/local/share/wfview/rigs/
- name: Run tests
run: |
apt-get install -y python3-pytest python3-requests
python3 -m pytest tests/ -v
- name: Get version
id: version
run: echo "version=$(grep '#define WFWEB_VERSION' include/wfweb_version.h | grep -oP '[\d.]+')" >> $GITHUB_OUTPUT
- name: Build .deb
run: |
VERSION=${{ steps.version.outputs.version }}
DEB_ROOT=$(pwd)/deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}
make install INSTALL_ROOT=${DEB_ROOT}
# Bundle librade.so
mkdir -p ${DEB_ROOT}/usr/lib
cp resources/radae_nopy/build/src/librade.so* ${DEB_ROOT}/usr/lib/
# Install license files
mkdir -p ${DEB_ROOT}/usr/share/doc/wfweb
cp LICENSE THIRD_PARTY_LICENSES ${DEB_ROOT}/usr/share/doc/wfweb/
mkdir -p ${DEB_ROOT}/DEBIAN
cat > ${DEB_ROOT}/DEBIAN/control << EOF
Package: wfweb
Version: ${VERSION}
Architecture: ${{ matrix.deb_arch }}
Maintainer: Alain De Carolis <adecarolis@users.noreply.github.com>
Depends: openssl, libqt5core5t64, libqt5gui5t64,
libqt5network5t64, libqt5serialport5, libqt5multimedia5,
libqt5websockets5,
libopus0, libportaudio2, libpulse0, libhidapi-libusb0,
libudev1, librtaudio7, libcodec2-1.2
Section: hamradio
Priority: optional
Homepage: https://github.com/adecarolis/wfweb
Description: wfview fork with built-in web interface for browser-based ham radio remote control.
wfweb adds an HTTPS/WebSocket server to wfview, enabling full radio
control and real-time audio streaming from any browser without
installing client software. Based on wfview by Elliott H. Liggett W6EL
and Phil E. Taylor M0VSE (https://gitlab.com/eliggett/wfview).
EOF
sed -i 's/^ //' ${DEB_ROOT}/DEBIAN/control
printf '#!/bin/sh\nset -e\nldconfig || true\n' > ${DEB_ROOT}/DEBIAN/postinst
printf 'if command -v systemctl >/dev/null 2>&1 && systemctl is-system-running --quiet 2>/dev/null; then\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf ' systemctl daemon-reload || true\nfi\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo "wfweb installed. To start automatically at boot, run:"\n' >> ${DEB_ROOT}/DEBIAN/postinst
printf 'echo " systemctl enable --now wfweb@\$USER"\n' >> ${DEB_ROOT}/DEBIAN/postinst
chmod 755 ${DEB_ROOT}/DEBIAN/postinst
dpkg-deb --build --root-owner-group ${DEB_ROOT}
BRANCH_SAFE=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9-]/-/g')
case "${{ github.ref }}" in
refs/tags/v*) DEV_SUFFIX="" ;;
*) DEV_SUFFIX="-dev-${BRANCH_SAFE}" ;;
esac
mv deb-build/wfweb_${VERSION}_${{ matrix.deb_arch }}.deb \
wfweb_${VERSION}${DEV_SUFFIX}-debian13_${{ matrix.deb_arch }}.deb
- name: Upload deb artifact
uses: actions/upload-artifact@v7
with:
name: wfweb-${{ matrix.arch }}-debian13-deb
path: wfweb_*-debian13_${{ matrix.deb_arch }}.deb
retention-days: 30
build-macos:
name: macOS (Apple Silicon)
runs-on: macos-14
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Install dependencies
run: brew install qt@5 portaudio opus openssl@3 codec2 cmake autoconf automake libtool
- name: Clone sibling dependencies
run: |
git clone --depth 1 https://github.com/thestk/rtaudio.git ../rtaudio
git clone --depth 1 https://gitlab.com/libeigen/eigen.git ../eigen
git clone --depth 1 https://github.com/xiph/opus.git ../opus
mkdir -p ../r8brain-free-src
- name: Build RADE
run: |
cd resources/radae_nopy
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(sysctl -n hw.ncpu)
- name: Build
run: |
/opt/homebrew/opt/qt@5/bin/qmake wfweb.pro
make -j$(sysctl -n hw.ncpu)
- name: Run tests
run: |
pip3 install --break-system-packages pytest requests
python3 -m pytest tests/ -v
- name: Package zip
run: |
BRANCH_SAFE=$(echo "${{ github.ref_name }}" | sed 's/[^a-zA-Z0-9-]/-/g')
case "${{ github.ref }}" in
refs/tags/v*) DEV_SUFFIX="" ;;
*) DEV_SUFFIX="-dev-${BRANCH_SAFE}" ;;
esac
mkdir -p wfweb-macos-arm64
cp wfweb wfweb-macos-arm64/
cp -r rigs wfweb-macos-arm64/
cp LICENSE THIRD_PARTY_LICENSES wfweb-macos-arm64/
# RADE is compiled directly into the binary on macOS (no dylibs needed)
zip -r wfweb${DEV_SUFFIX}-macos-arm64.zip wfweb-macos-arm64
- name: Upload artifact
uses: actions/upload-artifact@v7
with:
name: wfweb-macos-arm64
path: wfweb*-macos-arm64.zip
retention-days: 30
build-windows:
name: Windows x86_64
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v6
with:
submodules: true
- name: Install Qt 5.15.2
uses: jurplel/install-qt-action@v4
with:
version: '5.15.2'
host: 'windows'
target: 'desktop'
arch: 'win64_msvc2019_64'
- name: Install vcpkg packages
run: vcpkg install eigen3:x64-windows portaudio:x64-windows hidapi:x64-windows openssl:x64-windows
- name: Clone rtaudio
run: git clone --depth 1 https://github.com/thestk/rtaudio.git ..\rtaudio
- name: Setup MSVC
uses: ilammy/msvc-dev-cmd@v1
with:
arch: x64
- name: Build RADE custom Opus (MSYS2)
shell: C:\msys64\usr\bin\bash.exe -l {0}
run: |
pacman -S --noconfirm autoconf automake libtool make patch gcc cmake
cd "$GITHUB_WORKSPACE/resources/radae_nopy"
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Release ..
make -j$(nproc)
- name: Patch Opus headers for MSVC
shell: pwsh
run: |
$nnet = "resources\radae_nopy\build\build_opus-prefix\src\build_opus\dnn\nnet.h"
(Get-Content $nnet -Raw) -replace `
'#define RADE_EXPORT __attribute__\(\(visibility\("default"\)\)\)', `
"#ifdef _MSC_VER`n #define RADE_EXPORT`n #else`n #define RADE_EXPORT __attribute__((visibility(""default"")))`n #endif" `
| Set-Content $nnet
$api = "resources\radae_nopy\src\rade_api.h"
(Get-Content $api -Raw) -replace `
'#if IS_BUILDING_RADE_API', `
"#if defined(RADE_STATIC)`n#define RADE_EXPORT`n#elif IS_BUILDING_RADE_API" `
| Set-Content $api
- name: Build custom Opus (MSVC)
shell: cmd
run: |
cmake -S resources\radae_nopy\build\build_opus-prefix\src\build_opus -B resources\radae_nopy\build\opus_msvc_build -DOPUS_DRED=ON -DOPUS_OSCE=ON -DBUILD_SHARED_LIBS=OFF -DOPUS_BUILD_PROGRAMS=OFF -DOPUS_BUILD_TESTING=OFF -A x64
cmake --build resources\radae_nopy\build\opus_msvc_build --config Release
- name: Clone codec2
run: git clone --depth 1 https://github.com/drowe67/codec2.git codec2
- name: Build codec2 (FreeDV) via MSYS2 MinGW
shell: C:\msys64\usr\bin\bash.exe -l {0}
run: |
pacman -S --noconfirm --needed mingw-w64-x86_64-cmake mingw-w64-x86_64-gcc mingw-w64-x86_64-make mingw-w64-x86_64-tools-git
export PATH="/mingw64/bin:$PATH"
CODEC2="$(cygpath "$GITHUB_WORKSPACE")/codec2"
cd "$CODEC2"
mkdir -p build_mingw && cd build_mingw
/mingw64/bin/cmake -G "MinGW Makefiles" \
-DCMAKE_BUILD_TYPE=Release \
-DBUILD_SHARED_LIBS=ON \
-DUNITTEST=OFF \
-DCMAKE_C_COMPILER=/mingw64/bin/gcc.exe \
-DCMAKE_MAKE_PROGRAM=/mingw64/bin/mingw32-make.exe \
..
/mingw64/bin/mingw32-make -j$(nproc) codec2
- name: Install codec2 into vcpkg prefix
shell: pwsh
run: |
$vcpkg = "C:\vcpkg\installed\x64-windows"
# DLL for runtime
Copy-Item "codec2\build_mingw\src\libcodec2.dll" "$vcpkg\bin\" -Force
# Generate MSVC import lib from MinGW DLL
& C:\msys64\mingw64\bin\gendef.exe codec2\build_mingw\src\libcodec2.dll
lib /def:libcodec2.def /out:"$vcpkg\lib\codec2.lib" /machine:x64
# Headers
New-Item -ItemType Directory -Force -Path "$vcpkg\include\codec2" | Out-Null
$headers = @("codec2.h", "codec2_fdmdv.h", "codec2_fifo.h", "codec2_cohpsk.h",
"codec2_fm.h", "codec2_ofdm.h", "freedv_api.h", "reliable_text.h",
"comp.h", "modem_stats.h")
foreach ($h in $headers) { Copy-Item "codec2\src\$h" "$vcpkg\include\codec2\" -Force }
Copy-Item "codec2\build_mingw\codec2\version.h" "$vcpkg\include\codec2\" -Force
- name: Build
shell: cmd
run: |
qmake wfweb.pro CONFIG+=release "VCPKG_DIR=C:/vcpkg/installed/x64-windows" "DEFINES-=FTDI_SUPPORT"
nmake release
- name: Deploy Qt runtime
shell: cmd
run: windeployqt --release --no-translations --no-opengl-sw wfweb-release\wfweb.exe
- name: Deploy vcpkg DLLs and assets
shell: pwsh
run: |
$vcpkgBin = "C:\vcpkg\installed\x64-windows\bin"
$out = "wfweb-release"
# vcpkg DLLs (opus is statically linked via RADE custom build)
foreach ($dll in @("portaudio.dll", "hidapi.dll",
"libcodec2.dll",
"libssl-3-x64.dll", "libcrypto-3-x64.dll")) {
$src = Join-Path $vcpkgBin $dll
if (Test-Path $src) { Copy-Item $src $out -Force }
}
# MinGW runtime DLLs required by libcodec2.dll (built via MSYS2 MinGW)
$mingwBin = "C:\msys64\mingw64\bin"
foreach ($dll in @("libgcc_s_seh-1.dll", "libstdc++-6.dll", "libwinpthread-1.dll")) {
$src = Join-Path $mingwBin $dll
if (Test-Path $src) { Copy-Item $src $out -Force }
}
# OpenSSL 1.1 aliases for Qt 5.15
if (!(Test-Path "$out\libssl-1_1-x64.dll") -and (Test-Path "$out\libssl-3-x64.dll")) {
Copy-Item "$out\libssl-3-x64.dll" "$out\libssl-1_1-x64.dll"
}
if (!(Test-Path "$out\libcrypto-1_1-x64.dll") -and (Test-Path "$out\libcrypto-3-x64.dll")) {
Copy-Item "$out\libcrypto-3-x64.dll" "$out\libcrypto-1_1-x64.dll"
}
# Rig files
New-Item -ItemType Directory -Force -Path "$out\rigs" | Out-Null
Copy-Item "rigs\*.rig" "$out\rigs\" -Force
# License files
Copy-Item "LICENSE" "$out\" -Force
Copy-Item "THIRD_PARTY_LICENSES" "$out\" -Force
- name: Create ZIP
shell: pwsh
run: |
$branchSafe = "${{ github.ref_name }}" -replace '[^a-zA-Z0-9-]', '-'
$devSuffix = if ("${{ github.ref }}" -like "refs/tags/v*") { "" } else { "-dev-$branchSafe" }
Compress-Archive -Path wfweb-release -DestinationPath "wfweb${devSuffix}-windows-x86_64.zip"
- name: Upload artifact
uses: actions/upload-artifact@v7
with:
name: wfweb-windows-x86_64
path: wfweb*-windows-x86_64.zip
retention-days: 30
release:
name: Publish release
needs: [build-linux-ubuntu2404, build-linux-debian12, build-linux-debian13, build-macos, build-windows]
runs-on: ubuntu-24.04
if: startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch'
permissions:
contents: write
steps:
- name: Download artifacts
uses: actions/download-artifact@v8
- name: Create GitHub Release
uses: softprops/action-gh-release@v2
with:
tag_name: ${{ startsWith(github.ref, 'refs/tags/v') && github.ref_name || format('dev-{0}', github.ref_name) }}
name: ${{ startsWith(github.ref, 'refs/tags/v') && github.ref_name || format('Development Build ({0})', github.ref_name) }}
prerelease: ${{ !startsWith(github.ref, 'refs/tags/v') }}
files: |
wfweb-x86_64-ubuntu2404-deb/*.deb
wfweb-arm64-ubuntu2404-deb/*.deb
wfweb-x86_64-debian12-deb/*.deb
wfweb-arm64-debian12-deb/*.deb
wfweb-x86_64-debian13-deb/*.deb
wfweb-arm64-debian13-deb/*.deb
wfweb-macos-arm64/wfweb*-macos-arm64.zip
wfweb-windows-x86_64/wfweb*-windows-x86_64.zip
generate_release_notes: ${{ startsWith(github.ref, 'refs/tags/v') }}
overwrite: true