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'

      - 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 $null

      - 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-10.15
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Setup Python
        uses: actions/setup-python@v2
        with:
          python-version: '3.7'

      - name: Check Python install
        run: |
          which python3
          python3 --version
          which pip3
          pip3 --version

      - name: Install Python dependencies
        run: |
          pip3 install -U setuptools wheel pip
          pip3 install twisted[tls] appnope requests certifi
          pip3 install shiboken2==5.13.1 pyside2==5.13.1
          pip3 install py2app

      - 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))"
          python3 -c "import ssl; print(ssl)"
          python3 -c "from py2app.recipes import pyside2"
          echo $DYLD_LIBRARY_PATH
          echo $DYLD_FRAMEWORK_PATH
          python3 -c 'from distutils.sysconfig import get_config_var; print(get_config_var("LDLIBRARY"))'

      - name: Build
        run: |
          python3 ci/pyside2_linker.py
          export LIBPYTHON_FOLDER="$(python3 -c 'from distutils.sysconfig import get_config_var; print(get_config_var("LIBDIR"))')"
          ln -s $LIBPYTHON_FOLDER/libpython3.7m.dylib $LIBPYTHON_FOLDER/libpython3.7.dylib
          export DYLD_FRAMEWORK_PATH="$(python3 -c 'from PySide2.QtCore import QLibraryInfo; print(QLibraryInfo.location(QLibraryInfo.LibrariesPath))')"
          export DYLD_LIBRARY_PATH="$(python3 -c 'import os.path, PySide2; print(os.path.dirname(PySide2.__file__))'):$(python3 -c 'import os.path, shiboken2; print(os.path.dirname(shiboken2.__file__))')"
          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

  appimage:
    name: Build AppImage
    runs-on: ubuntu-18.04
    steps:
      - name: Checkout
        uses: actions/checkout@v2

      - name: Install dependencies
        run: |
          sudo apt-get install --no-install-recommends \
            libglib2.0-0 \
            libxkbcommon-x11-0 \
            libxcb1 \
          ;

      - name: Build
        run: ci/appimage-script.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
          ci/appimage-deploy.sh
          ls -al dist_actions

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

  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
