name: Build
on: [push, pull_request]

jobs:
  windows:
    name: Build for Windows
    runs-on: windows-2019
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.8'
          architecture: x86

      - name: Check Python install
        run: |
          which python
          python --version
          python -c "import struct; print(struct.calcsize('P') * 8)"
          which pip
          pip --version

      - name: Install Python dependencies
        run: |
          pip3 install -U setuptools wheel pip
          pip3 install -r requirements.txt
          pip3 install -r requirements_gui.txt
          pip3 install py2exe

      - name: Check Python dependencies
        run: |
          python3 -c "from PySide2 import __version__; print(__version__)"
          python3 -c "from PySide2.QtCore import __version__; print(__version__)"
          python3 -c "from PySide2.QtCore import QLibraryInfo; print(QLibraryInfo.location(QLibraryInfo.LibrariesPath))"

      - name: Build
        run: |
          $ver = (findstr version .\syncplay\__init__.py).split("'")[1]
          echo $ver
          echo "VER=$ver" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append
          python buildPy2exe.py
          New-Item -Path syncplay_v$ver -Name "syncplay.ini" -Value " "

      - name: Prepare for deployment
        run: dir

      - name: Deploy portable
        uses: actions/upload-artifact@v2
        with:
          name: Syncplay_${{ env.VER }}_Portable
          path: |
            syncplay_v${{ env.VER }}

      - name: Deploy installer
        uses: actions/upload-artifact@v2
        with:
          name: Syncplay-${{ env.VER }}-Setup.exe
          path: |
            Syncplay-${{ env.VER }}-Setup.exe

  macos:
    name: Build for macOS
    runs-on: macos-12
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Python
        run: |
          wget https://www.python.org/ftp/python/3.10.6/python-3.10.6-macos11.pkg
          sudo installer -verbose -pkg ./python-3.10.6-macos11.pkg -target /
          echo "/Library/Frameworks/Python.framework/Versions/3.10/bin" >> $GITHUB_PATH

      - name: Check Python install
        run: |
          which python3
          python3 --version
          which pip3
          pip3 --version
          file $(which python3)

      - name: Install Python dependencies
        run: |
          pip3 install -U pip setuptools wheel
          pip3 install -r requirements.txt
          pip3 install -r requirements_gui.txt
          pip3 install py2app

      - name: Install universal2 dependencies
        env:
          CFLAGS: -arch x86_64 -arch arm64
          ARCHFLAGS: -arch x86_64 -arch arm64
        run: |
          pip3 uninstall zope.interface -y
          pip3 install --no-binary :all: zope.interface

          pip3 uninstall cffi -y
          pip3 install --no-binary :all: cffi

          pip3 uninstall cryptography -y
          pip3 download --platform macosx_10_10_universal2 --only-binary :all: --no-deps --dest . cryptography
          pip3 install --no-cache-dir --no-index --find-links . cryptography

          pip3 uninstall charset-normalizer -y
          pip3 download --platform macosx_10_9_universal2 --only-binary :all: --no-deps --dest . charset-normalizer
          pip3 install --no-cache-dir --no-index --find-links . charset-normalizer

      - name: Check Python dependencies
        run: |
          python3 -c "from PySide6 import __version__; print(__version__)"
          python3 -c "from PySide6.QtCore import __version__; print(__version__)"
          python3 -c "from PySide6.QtCore import QLibraryInfo; print(QLibraryInfo.location(QLibraryInfo.LibrariesPath))"
          python3 -c "import ssl; print(ssl)"
          python3 -c "from py2app.recipes import pyside6"
          python3 -c 'from distutils.sysconfig import get_config_var; print(get_config_var("LDLIBRARY"))'

      - name: Build
        run: |
          python3 buildPy2app.py py2app

      - name: Prepare for deployment
        run: |
          ls -al
          export VER="$(cat syncplay/__init__.py | awk '/version/ {gsub("\047", "", $3); print $NF}')"
          echo "VER=$VER" >> $GITHUB_ENV
          mkdir dist_actions
          ci/macos-deploy.sh
          ls -al dist_actions

      - name: Deploy
        uses: actions/upload-artifact@v2
        with:
          name: Syncplay_${{ env.VER }}.dmg
          path: |
            dist_actions/Syncplay_${{ env.VER }}.dmg

  deb:
    name: Build Debian package
    runs-on: ubuntu-20.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Build
        run: ci/deb-script.sh

      - name: Build server
        run: ci/deb-server-script.sh

      - name: Test
        run: ci/deb-installation-test.sh

      - name: Prepare for deployment
        run: |
          ls -al
          export VER="$(cat syncplay/__init__.py | awk '/version/ {gsub("\047", "", $3); print $NF}')"
          echo "VER=$VER" >> $GITHUB_ENV
          mkdir dist_actions
          mv /tmp/syncplay.deb dist_actions/syncplay_${VER}.deb
          mv /tmp/syncplay-server.deb dist_actions/syncplay-server_${VER}.deb
          ls -al dist_actions

      - name: Deploy full deb
        uses: actions/upload-artifact@v2
        with:
          name: syncplay.deb
          path: |
            dist_actions/syncplay_*.deb

      - name: Deploy server deb
        uses: actions/upload-artifact@v2
        with:
          name: syncplay-server.deb
          path: |
            dist_actions/syncplay-server_*.deb
