name: Build
on:
  push:
    branches-ignore:
      - master
      - main
    tags:
      - "v*"
jobs:
  linux:
    runs-on: ubuntu-16.04
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - uses: actions/setup-python@v2
        with:
          python-version: '3.9.x'
      - uses: actions/setup-node@v1
        with:
          node-version: '16.x'

      - uses: actions/cache@v2
        id: pip-cache
        with:
          path: ~/.cache/pip
          key: ${{ runner.os }}-16.04-pip-${{ hashFiles('**/requirements.txt') }}
          restore-keys: |
            ${{ runner.os }}-16.04-pip-

      - name: Get yarn cache directory path
        id: yarn-cache-dir-path
        run: echo "::set-output name=dir::$(yarn cache dir)"

      - uses: actions/cache@v2
        id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
        with:
          path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
          key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
          restore-keys: |
            ${{ runner.os }}-yarn-

      - name: install dependencies
        shell: bash
        run: |
          sudo apt-get update
          python -m pip install --upgrade pip
          python -m pip install wheel

          sudo apt-get install gettext

          # for wxPython
          sudo apt install glib-networking libsdl1.2-dev

          # for PyGObject
          sudo apt install libgirepository1.0-dev libcairo2-dev

          # for shapely
          sudo apt install libgeos-dev build-essential libgtk-3-dev

          uname -a
          python --version
          python -m pip --version
          python -m pip debug

          python -m pip install pycairo==1.11.1
          python -m pip install PyGObject==3.30.5

          # colormath - last official release: 3.0.0
          # we need already submitted fixes - so let's grab them from the github repository
          python -m pip install git+https://github.com/gtaylor/python-colormath

          python -m pip install -r requirements.txt
          python -m pip install pyinstaller
          
          echo "${{ env.pythonLocation }}\bin" >> $GITHUB_PATH
      - shell: bash
        run: |
          make dist
        env:
          BUILD: linux
      - uses: actions/upload-artifact@v2
        with:
          name: inkstitch-linux
          path: artifacts
  windows:
    runs-on: windows-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - uses: actions/setup-node@v1
        with:
          node-version: '16.x'
      - uses: actions/setup-python@v2
        with:
          python-version: '3.8.x'
          architecture: 'x86'
      - uses: microsoft/setup-msbuild@v1.0.2
      - name: install dependencies
        shell: bash
        run: |
          python -m pip install --upgrade pip
          python -m pip install wheel

          python -m pip install git+https://github.com/gtaylor/python-colormath

          python -m pip install -r requirements.txt
          python -m pip install pyinstaller

          echo "${{ env.pythonLocation }}\bin" >> $GITHUB_PATH
      - shell: bash
        run: |
          make dist
        env:
          BUILD: windows
      - uses: actions/upload-artifact@v2
        with:
          name: inkstitch-windows
          path: artifacts
  mac:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v2
        with:
          submodules: recursive
      - uses: actions/setup-python@v2
        with:
          python-version: '3.9.x'
      - uses: actions/setup-node@v1
        with:
          node-version: '16.x'
      - name: install dependencies
        shell: bash
        run: |
          brew update

          brew install gtk+3 pkg-config gobject-introspection geos libffi gettext || true

          export LDFLAGS="-L/usr/local/opt/libffi/lib"
          export PKG_CONFIG_PATH="/usr/local/opt/libffi/lib/pkgconfig"

          # for msgfmt
          echo "/usr/local/opt/gettext/bin" >> $GITHUB_PATH

          echo "GI_TYPELIB_PATH=/usr/local/lib/girepository-1.0/" >> $GITHUB_ENV

          pip install --upgrade pip
          pip --version
          pip install wheel
          pip install PyGObject
          pip install git+https://github.com/gtaylor/python-colormath

          pip install -r requirements.txt
          pip install pyinstaller==4.3

          echo "${{ env.pythonLocation }}/bin" >> $GITHUB_PATH
      - shell: bash
        run: |
          make dist
        env:
          BUILD: osx
      - uses: actions/upload-artifact@v2
        with:
          name: inkstitch-mac
          path: artifacts

  release:
    runs-on: ubuntu-latest
    needs: [linux, windows, mac]
    if: always()
    steps:
      - name: determine release info
        shell: bash
        run: |
          if [[ "${GITHUB_REF}" =~ ^refs/tags/v[0-9.]+$ ]]; then
            tag="${GITHUB_REF#refs/tags/}"
            echo "release_tag=${tag}" >> $GITHUB_ENV
            echo "prerelease=false" >> $GITHUB_ENV
            echo "title=${tag}" >> $GITHUB_ENV
          else
            branch="${GITHUB_REF#refs/heads/}"
            tag="dev-build-$(echo $branch | tr / -)"
            echo "release_tag=${tag}" >> $GITHUB_ENV
            echo "prerelease=true" >> $GITHUB_ENV
            echo "title=development build of $branch" >> $GITHUB_ENV
          fi
      - name: download linux
        uses: actions/download-artifact@v2
        with:
          name: 'inkstitch-linux'
          path: 'artifacts/'
      - name: download windows
        uses: actions/download-artifact@v2
        with:
          name: 'inkstitch-windows'
          path: 'artifacts/'
        if: always()
      - name: download mac
        uses: actions/download-artifact@v2
        with:
          name: 'inkstitch-mac'
          path: 'artifacts/'
        if: always()
      - name: create/update release
        uses: "marvinpinto/action-automatic-releases@latest"
        if: always()
        with:
          repo_token: "${{secrets.GITHUB_TOKEN}}"
          automatic_release_tag: "${{env.release_tag}}"
          prerelease: "${{env.prerelease}}"
          title: "${{env.title}}"
          files: |
            artifacts/*.zip
