diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index ea5ef3c7..c2488795 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -28,6 +28,9 @@ jobs:
uses: mxschmitt/action-tmate@v3
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled }}
+ - name: Update apt sources
+ run: sudo apt-get update
+
- name: Install Qt
uses: jurplel/install-qt-action@v2
@@ -89,6 +92,79 @@ jobs:
name: linux-latest-appimage
path: Scripts/*.AppImage
+ build-linux-deb:
+ runs-on: ubuntu-latest
+ steps:
+ - uses: actions/checkout@v2
+ - name: Setup interactive shell session
+ uses: mxschmitt/action-tmate@v3
+ if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.debug_enabled }}
+
+ - name: Update apt sources
+ run: sudo apt-get update
+
+ - name: Install Qt
+ run: sudo apt-get install qtbase5-dev
+
+ - name: Install sndfile
+ run: sudo apt-get install libsndfile1-dev
+
+ - name: Install Volk
+ run: sudo apt-get install libvolk2-dev
+
+ - name: Install cURL
+ run: sudo apt-get install libcurl4-openssl-dev
+
+ - name: Install FFTW3
+ run: sudo apt-get install libfftw3-dev
+
+ - name: Install SoapySDR modules
+ run: sudo apt-get install soapysdr-module-all
+
+ - name: Install SoapySDR development files
+ run: sudo apt-get install libsoapysdr-dev
+
+ - name: Install libxml2
+ run: sudo apt-get install libxml2-dev
+
+ - name: Install portaudio
+ run: sudo apt-get install portaudio19-dev
+
+ - name: Install ALSA libraries
+ run: sudo apt-get install libasound2-dev
+
+ - name: Download linuxdeployqt AppImage
+ run: wget https://github.com/probonopd/linuxdeployqt/releases/download/continuous/linuxdeployqt-continuous-x86_64.AppImage
+
+ - name: Install linuxdeployqt system-wide
+ run: |
+ sudo mv linuxdeployqt-continuous-x86_64.AppImage /usr/bin/linuxdeployqt
+ sudo chmod a+x /usr/bin/linuxdeployqt
+
+ - name: Get short hash
+ id: vars
+ run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
+
+ - name: Build & Distribute (SigDigger)
+ run: |
+ cd Scripts
+ chmod a+x dist-deb.sh
+ export LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$PWD"/deploy-root/lib
+ ./dist-deb.sh 0.3.0-${{steps.vars.outputs.sha_short}}
+ cd ..
+
+ - name: Upload deb artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: sigdigger_0.3.0-${{steps.vars.outputs.sha_short}}_amd64.deb
+ path: Scripts/build-root/sigdigger_0.3.0-${{steps.vars.outputs.sha_short}}_amd64.deb
+
+ - name: Upload dev deb artifact
+ uses: actions/upload-artifact@v2
+ with:
+ name: sigdigger-dev_0.3.0-${{steps.vars.outputs.sha_short}}_amd64.deb
+ path: Scripts/build-root/sigdigger-dev_0.3.0-${{steps.vars.outputs.sha_short}}_amd64.deb
+
build-macos:
runs-on: macos-11
steps:
diff --git a/Scripts/dist-deb.sh b/Scripts/dist-deb.sh
new file mode 100755
index 00000000..f5501b69
--- /dev/null
+++ b/Scripts/dist-deb.sh
@@ -0,0 +1,108 @@
+#!/bin/bash
+#
+# dist-dist.sh: Deploy SigDigger in a debian package
+#
+# Copyright (C) 2023 Ángel Ruiz Fernández
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as
+# published by the Free Software Foundation, version 3.
+#
+# This program is distributed in the hope that it will be useful, but
+# WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this program. If not, see
+#
+#
+
+if [ "$#" != "1" ]; then
+ echo $0: Usage:
+ echo " $0 version"
+ exit 1
+fi
+
+PKG_VERSION=$1
+
+shift
+
+# build SigDigger
+. dist-common.sh
+
+build
+
+PKG_ARCH=`dpkg --print-architecture`
+PKG_DEPENDS='libsuscan (>= 0.3.0-1), libsuwidgets (>= 0.3.0-1)'
+PKG_DEV_DEPENDS='libsuscan-dev (>= 0.3.0-1), libsuwidgets-dev (>= 0.3.0-1)'
+
+BINDIR=sigdigger_${PKG_VERSION}_${PKG_ARCH}
+DEVDIR=sigdigger-dev_${PKG_VERSION}_${PKG_ARCH}
+############################ Binary package ####################################
+# create structure
+rm -Rf $BINDIR
+mkdir $BINDIR
+cd $BINDIR
+mkdir -p usr/bin/
+mkdir -p usr/share/applications/
+mkdir -p usr/share/icons/hicolor/256x256/apps/
+mkdir -p DEBIAN/
+
+# create debian thing
+rm -f DEBIAN/control
+cat <>DEBIAN/control
+Package: sigdigger
+Version: $PKG_VERSION
+Section: hamradio
+Priority: optional
+Architecture: $PKG_ARCH
+Depends: $PKG_DEPENDS
+Maintainer: arf20
+Description: The Free Digital Signal Analyzer
+EOF
+
+# copy files
+cp ../SigDigger/SigDigger usr/bin/
+cp ../SigDigger/SigDigger.desktop ../SigDigger/RMSViewer.desktop usr/share/applications/
+cp ../SigDigger/icons/SigDigger.png usr/share/icons/hicolor/256x256/apps/
+
+# set permissions
+cd ..
+chmod 755 -R $BINDIR/
+
+# build deb
+dpkg-deb --build $BINDIR
+
+############################ Development package ###############################
+# create structure
+rm -Rf $DEVDIR
+mkdir $DEVDIR
+cd $DEVDIR
+mkdir -p usr/include/x86_64-linux-gnu/qt5/SigDigger/Suscan/Messages/
+mkdir -p DEBIAN/
+
+# create debian thing
+rm -f DEBIAN/control
+cat <>DEBIAN/control
+Package: sigdigger-dev
+Version: $PKG_VERSION
+Section: libdevel
+Priority: optional
+Architecture: $PKG_ARCH
+Depends: sigdigger (= $PKG_VERSION), $PKG_DEV_DEPENDS, pkg-config
+Maintainer: arf20
+Description: The Free Digital Signal Analyzer development files
+EOF
+
+# copy files
+cp ../SigDigger/include/AppConfig.h ../SigDigger/include/Application.h ../SigDigger/include/AppUI.h ../SigDigger/include/AudioFileSaver.h ../SigDigger/include/AudioPlayback.h ../SigDigger/include/Averager.h ../SigDigger/include/ColorConfig.h ../SigDigger/include/ConfigTab.h ../SigDigger/include/FeatureFactory.h ../SigDigger/include/GuiConfig.h ../SigDigger/include/InspectionWidgetFactory.h ../SigDigger/include/SigDiggerHelpers.h ../SigDigger/include/MainSpectrum.h ../SigDigger/include/MainWindow.h ../SigDigger/include/Palette.h ../SigDigger/include/PersistentWidget.h ../SigDigger/include/TabWidgetFactory.h ../SigDigger/include/TLESourceConfig.h ../SigDigger/include/ToolWidgetFactory.h ../SigDigger/include/UIComponentFactory.h ../SigDigger/include/UIListenerFactory.h ../SigDigger/include/UIMediator.h ../SigDigger/include/GenericDataSaver.h ../SigDigger/include/Version.h usr/include/x86_64-linux-gnu/qt5/SigDigger/
+cp ../SigDigger/include/Suscan/AnalyzerRequestTracker.h ../SigDigger/include/Suscan/CancellableTask.h ../SigDigger/include/Suscan/Analyzer.h ../SigDigger/include/Suscan/AnalyzerParams.h ../SigDigger/include/Suscan/Channel.h ../SigDigger/include/Suscan/Compat.h ../SigDigger/include/Suscan/Config.h ../SigDigger/include/Suscan/Estimator.h ../SigDigger/include/Suscan/Library.h ../SigDigger/include/Suscan/Logger.h ../SigDigger/include/Suscan/Message.h ../SigDigger/include/Suscan/MQ.h ../SigDigger/include/Suscan/MultitaskController.h ../SigDigger/include/Suscan/Object.h ../SigDigger/include/Suscan/Plugin.h ../SigDigger/include/Suscan/Serializable.h ../SigDigger/include/Suscan/Source.h ../SigDigger/include/Suscan/SpectrumSource.h usr/include/x86_64-linux-gnu/qt5/SigDigger/Suscan/
+cp ../SigDigger/include/Suscan/Messages/ChannelMessage.h ../SigDigger/include/Suscan/Messages/GenericMessage.h ../SigDigger/include/Suscan/Messages/InspectorMessage.h ../SigDigger/include/Suscan/Messages/PSDMessage.h ../SigDigger/include/Suscan/Messages/SamplesMessage.h ../SigDigger/include/Suscan/Messages/SourceInfoMessage.h ../SigDigger/include/Suscan/Messages/StatusMessage.h usr/include/x86_64-linux-gnu/qt5/SigDigger/Suscan/Messages/
+
+# set permissions
+cd ..
+chmod 755 -R $DEVDIR
+
+# build deb
+dpkg-deb --build $DEVDIR