name: 'MinedMap'
on: ['push', 'pull_request', 'workflow_dispatch']

jobs:
  build:
    name: 'Build MinedMap (${{ matrix.host }})'
    runs-on: 'ubuntu-20.04'
    strategy:
      fail-fast: false
      matrix:
        host:
          - 'x86_64-linux-gnu'
          - 'x86_64-w64-mingw32'
        include:
          - host: 'x86_64-linux-gnu'
            label: 'x86_64-linux-gnu'
            packages: ['g++', 'libpng-dev']
            prefix: '/usr'
            build_libpng: false
          - host: 'x86_64-w64-mingw32'
            label: 'Win64'
            packages: ['g++-mingw-w64-x86-64', 'libz-mingw-w64-dev']
            prefix: '/usr/x86_64-w64-mingw32'
            build_libpng: true
          - host: 'i686-w64-mingw32'
            label: 'Win32'
            packages: ['g++-mingw-w64-i686', 'libz-mingw-w64-dev']
            prefix: '/usr/i686-w64-mingw32'
            build_libpng: true

    env:
      CMAKE_TOOLCHAIN_FILE: '${{ github.workspace }}/.github/toolchains/${{ matrix.host }}.cmake'

    steps:
      - name: 'Checkout'
        uses: 'actions/checkout@v2'

      - name: 'Get version'
        id: 'tag'
        run: |
          set -o pipefail
          git fetch --prune --unshallow
          git describe --abbrev=7 --match='v*' | sed 's/^v/::set-output name=tag::/'

      - name: 'Dependencies (apt)'
        run: |
          sudo apt-get -y update
          sudo apt-get -y install ninja-build ${{ join(matrix.packages, ' ') }}
          sudo apt-get -y clean

      - name: 'Dependencies (libpng)'
        if: '${{ matrix.build_libpng }}'
        run: |
          pkgver=1.6.37
          pkghash=505e70834d35383537b6491e7ae8641f1a4bed1876dbfe361201fc80868d88ca

          mkdir -p build/libpng
          cd build/libpng
          wget http://downloads.sourceforge.net/sourceforge/libpng/libpng-$pkgver.tar.xz
          echo "$pkghash libpng-$pkgver.tar.xz" | sha256sum -c -
          tar xf libpng-$pkgver.tar.xz
          cd libpng-$pkgver
          ./configure \
            --prefix=${{ matrix.prefix }} \
            --host=${{ matrix.host }} \
            --disable-shared
          make -j$(nproc)
          sudo make install
          sudo rm ${{ matrix.prefix }}/lib/libpng*.la

      - name: 'Build'
        uses: lukka/run-cmake@v10
        with:
          configurePreset: 'ninja'
          buildPreset: 'ninja-release'

      - name: 'Install'
        run: |
          export DESTDIR="$(pwd)/build/install"
          ninja -C builds/ninja -f build-RelWithDebInfo.ninja install/strip

          pkgdir='build/pkg/MinedMap-${{ steps.tag.outputs.tag }}-${{ matrix.label }}'
          mkdir -p "$pkgdir"
          cp "$DESTDIR/usr/local/bin"/* "$pkgdir"/

      - name: 'Archive'
        uses: 'actions/upload-artifact@v2'
        with:
          name: 'MinedMap-${{ steps.tag.outputs.tag }}-${{ matrix.label }}'
          path: 'build/pkg'

  viewer:
    name: 'Package viewer'
    runs-on: 'ubuntu-20.04'

    steps:
      - name: 'Checkout'
        uses: 'actions/checkout@v2'

      - name: 'Get version'
        id: 'tag'
        run: |
          set -o pipefail
          git fetch --prune --unshallow
          git describe --abbrev=7 --match='v*' | sed 's/^v/::set-output name=tag::/'

      - name: 'Install'
        run: |
          pkgdir='build/pkg/MinedMap-${{ steps.tag.outputs.tag }}-viewer'
          mkdir -p "$pkgdir"
          cp -r viewer/* "$pkgdir"/

      - name: 'Archive'
        uses: 'actions/upload-artifact@v2'
        with:
          name: 'MinedMap-${{ steps.tag.outputs.tag }}-viewer'
          path: 'build/pkg'