name: Build Porymap
permissions:
  contents: write

on:
  push:
    branches:
    - master
    tags:
    - '*'
  pull_request:
    branches:
    - master

  # Allows you to run this workflow manually from the Actions tab
  workflow_dispatch:

jobs:
  build-qt5-linux:
    runs-on: ubuntu-latest
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: Cache Qt
        id: cache-qt
        uses: actions/cache@v1
        with:
          path: ../Qt
          key: ${{ runner.os }}-QtCache

      - name: Install Qt
        uses: jurplel/install-qt-action@v2
        with:
          version: '5.14.2'
          modules: 'qtwidgets qtqml'
          cached: ${{ steps.cache-qt.outputs.cache-hit }}

      - name: Configure
        run: qmake porymap.pro

      - name: Compile
        run: make

  build-macos:
    runs-on: macos-latest
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2

      - name: Cache Qt
        id: cache-qt
        uses: actions/cache@v1
        with:
          path: ../Qt
          key: ${{ runner.os }}-QtCache

      - name: Install Qt
        uses: jurplel/install-qt-action@v3
        with:
          version: '6.2.*'
          cached: ${{ steps.cache-qt.outputs.cache-hit }}

      - name: Configure
        run: qmake -config release porymap.pro

      - name: Compile
        run: make

      - name: Create Disk Image
        if: startsWith(github.ref, 'refs/tags/')
        run: macdeployqt porymap.app -dmg

      - name: Prep Release Directory
        if: startsWith(github.ref, 'refs/tags/')
        run: |
          mkdir porymap-macOS-${{ github.ref_name }}
          cp porymap.dmg porymap-macOS-${{ github.ref_name }}/porymap.dmg
          cp RELEASE-README.txt porymap-macOS-${{ github.ref_name }}/README.txt

      - name: Bundle Release Directory
        if: startsWith(github.ref, 'refs/tags/')
        run: zip -r porymap-macOS-${{ github.ref_name }}.zip porymap-macOS-${{ github.ref_name }}

      - name: Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: porymap-macOS-${{ github.ref_name }}.zip
        env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  build-static-windows:
    runs-on: windows-latest
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      
      - uses: dsaltares/fetch-gh-release-asset@master
        if: steps.cache-static-qt.outputs.cache-hit != 'true'
        with:
          repo: 'huderlem/porymap'
          version: 'tags/qt-static-6.0.1-windows'
          file: 'Qt-Static-Windows-mingw-6.0.1.zip'
          token: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Unzip Static Qt
        if: steps.cache-static-qt.outputs.cache-hit != 'true'
        run: powershell.exe -Command "Expand-Archive -Path Qt-Static-Windows-mingw-6.0.1.zip -DestinationPath ../Qt"
      
      - uses: dsaltares/fetch-gh-release-asset@master
        with:
          repo: 'huderlem/porymap'
          version: 'tags/qt-static-6.0.1-windows'
          file: 'mingw810_64.zip'
          token: ${{ secrets.GITHUB_TOKEN }}
      
      - name: Unzip mingw
        run: powershell.exe -Command "Expand-Archive -Path mingw810_64.zip -DestinationPath ../mingw810_64"
      
      - name: Add Qt Static to PATH
        run: echo "$env:GITHUB_WORKSPACE/../Qt/6.0.1/bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8

      - name: Add static config to .pro file
        run: echo "CONFIG += qt static" >> porymap.pro
      
      - name: Add static qmake flags to .pro file
        run: echo "QMAKE_LFLAGS += -static-libgcc -static-libstdc++ -static -lwinpthread" >> porymap.pro

      - name: Run Qmake
        env:
          QTDIR: ../Qt/6.0.1
        run: qmake.exe -o Makefile porymap.pro -spec win32-g++ "CONFIG+=qtquickcompiler"

      - name: Add mingw to PATH
        run: echo "$env:GITHUB_WORKSPACE/../mingw810_64/bin" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8

      - name: Compile
        env:
          QTDIR: ../Qt/6.0.1
        run: mingw32-make.exe -j8
      
      - name: Prep Release Directory
        if: startsWith(github.ref, 'refs/tags/')
        run: |
          mkdir porymap-windows-${{ github.ref_name }}
          cp release/porymap.exe porymap-windows-${{ github.ref_name }}/porymap.exe
          cp RELEASE-README.txt porymap-windows-${{ github.ref_name }}/README.txt
      
      - name: Bundle Release Directory
        if: startsWith(github.ref, 'refs/tags/')
        run: powershell.exe -Command "Compress-Archive -Path porymap-windows-${{ github.ref_name }} -DestinationPath porymap-windows-${{ github.ref_name }}.zip"
      
      - name: Create Release
        uses: softprops/action-gh-release@v1
        if: startsWith(github.ref, 'refs/tags/')
        with:
          files: porymap-windows-${{ github.ref_name }}.zip
        env:
            GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}