name: build_server on: [push] jobs: build_i686_x64_release: name: Build FreeDATA packages runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: os: [ubuntu-20.04, macos-latest, windows-latest] include: - os: ubuntu-20.04 zip_name: freedata-server_ubuntu generator: Unix Makefiles modem_binary_name: freedata-server - os: macos-latest zip_name: freedata-server_macos generator: Unix Makefiles modem_binary_name: freedata-server - os: windows-latest zip_name: freedata-server_windows generator: Visual Studio 16 2019 modem_binary_name: freedata-server.exe steps: - name: Checkout code for ${{ matrix.platform.name }} uses: actions/checkout@v4 with: repository: DJ2LS/FreeDATA - name: Set up Python 3.11 uses: actions/setup-python@v5 with: python-version: "3.11" - name: Create modem/dist working-directory: modem run: | mkdir -p dist - name: Create modem/dist/modem working-directory: modem run: | mkdir -p dist/modem - name: Install Linux dependencies # if: matrix.os == 'ubuntu-20.04' if: ${{startsWith(matrix.os, 'ubuntu')}} run: | sudo apt install -y portaudio19-dev libhamlib-dev libhamlib-utils build-essential cmake python3-libhamlib2 patchelf - name: Install MacOS pyAudio if: ${{startsWith(matrix.os, 'macos')}} run: | brew install portaudio python -m pip install --upgrade pip pip3 install pyaudio - name: Install Python dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - name: Add MacOS certs if: ${{startsWith(matrix.os, 'macos')}} run: chmod +x add-osx-cert.sh && ./add-osx-cert.sh env: CERTIFICATE_OSX_APPLICATION: ${{ secrets.CERTIFICATE_OSX_APPLICATION }} CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }} - name: Build binaries working-directory: modem run: | python3 -m nuitka --remove-output --assume-yes-for-downloads --follow-imports --include-data-dir=lib=lib --include-data-files=lib/codec2/*=lib/codec2/ --include-data-files=config.ini.example=config.ini --standalone server.py --output-filename=freedata-server #- name: Download Portaudio binaries Linux macOS # if: ${{!startsWith(matrix.os, 'windows')}} # working-directory: modem # run: | # if ! test -d "server.dist/modem/_sounddevice_data"; then # git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries # fi #- name: Download Portaudio binaries Windows # if: ${{startsWith(matrix.os, 'windows')}} # working-directory: modem # run: | # if(Test-Path -Path "server.dist/modem/_sounddevice_data"){ # echo "sounddevice folder already exists" # } else { # git clone https://github.com/spatialaudio/portaudio-binaries dist/modem/_sounddevice_data/portaudio-binaries # } - name: LIST ALL FILES run: ls -R - name: cleanup on macos before code signing if: ${{startsWith(matrix.os, 'macos')}} run: | ls -l # find . -type d -name .git -exec rm -r {} \; find . -type d -o -name ".git" -delete - name: Compress Modem uses: thedoctor0/zip-release@master with: type: 'zip' filename: '${{ matrix.zip_name }}.zip' directory: ./modem/server.dist path: . # exclusions: '*.git* /*node_modules/* .editorconfig' - name: LIST ALL FILES run: ls -R - name: Upload artifact uses: actions/upload-artifact@v4 with: name: '${{ matrix.zip_name }}' path: ./modem/server.dist/${{ matrix.zip_name }}.zip - name: Release Modem uses: softprops/action-gh-release@v1 if: startsWith(github.ref, 'refs/tags/v') with: draft: true files: ./modem/server.dist/${{ matrix.zip_name }}.zip - name: LIST ALL FILES run: ls -R