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@v4
        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
