name: Package bygfoot

on:
  push:
    tags:
      - '*'
    branches:
      - unofficial-trunk
  pull_request:

env:
  UBUNTU_BUILD_DEPENDENCIES: libglib2.0-dev libgtk2.0-dev libpango1.0-dev libatk1.0-dev libfreetype6-dev ninja-build cmake libjson-c-dev unzip
  LINUX_BUILD_DEPENDENCIES: libglib2.0-dev libgtk2.0-dev libpango1.0-dev libatk1.0-dev libfreetype6-dev ninja-build cmake

jobs:

  set-variables:
    runs-on:
      - ubuntu-latest
    outputs:
      is-tag: ${{ steps.vars.outputs.is-tag }}
      bygfoot-version: ${{ steps.vars.outputs.bygfoot-version }}
    steps:
      - id: vars
        run: |
          if echo ${{ github.ref }} | grep '^refs/tags'; then
            is_tag=1
            bygfoot_version=`echo ${{ github.ref }} | cut -d / -f 3`
          else
            is_tag=0
            bygfoot_version=${{ github.head_ref }}-${{ github.sha }}
          fi

          tarname=bygfoot-$bygfoot_version-${{ matrix.name }}
          echo "::set-output name=is-tag::$is_tag"
          echo "::set-output name=bygfoot-version::$bygfoot_version"

  package-linux:
    needs:
      - set-variables
    runs-on:
      - ubuntu-latest
    container:
      image: ${{ matrix.container-image }}
    env:
      BYGFOOT_VERSION: ${{ needs.set-variables.outputs.bygfoot-version }}
    strategy:
      fail-fast: false
      matrix:
        include:
          - name: ubuntu-18.04
            container-image: docker.io/ubuntu:18.04
            dependencies: "$UBUNTU_BUILD_DEPENDENCIES"
            test: true
          - name: ubuntu-20.04
            container-image: docker.io/ubuntu:20.04
            dependencies: "$UBUNTU_BUILD_DEPENDENCIES"
            test: true
          - name: ubuntu-20.10
            container-image: docker.io/ubuntu:20.10
            dependencies: "$UBUNTU_BUILD_DEPENDENCIES"
            test: true
          - name: ubuntu-21.04
            container-image: docker.io/ubuntu:21.04
            dependencies: "$UBUNTU_BUILD_DEPENDENCIES"
            test: true
          - name: linux
            container-image: docker.io/ubuntu:18.04
            dependencies: "$LINUX_BUILD_DEPENDENCIES"
            test: false

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

      - name: Install dependencies
        env:
          DEBIAN_FRONTEND: noninteractive
        run: |
          apt-get update
          apt-get -y install ${{ matrix.dependencies }}

      - name: Package Bygfoot
        id: package
        run: |
              tarname=bygfoot-${{ env.BYGFOOT_VERSION }}-${{ matrix.name }}
              echo "::set-output name=tardir::$tarname"
              echo "::set-output name=tarfile::$tarname.tar.bz2"
              ./scripts/package.sh . $tarname

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: "bygfoot-${{ env.BYGFOOT_VERSION }}-${{ matrix.name }}"
          path: "${{ steps.package.outputs.tarfile }}"

      - uses: actions/download-artifact@v2
        if: ${{ github.event_name == 'pull_request' && matrix.test }}
        with:
          path: tests-${{ matrix.name }}
          name: "bygfoot-${{ env.BYGFOOT_VERSION }}-${{ matrix.name }}"

      - name: Run Tests
        if: ${{ github.event_name == 'pull_request' && matrix.test }}
        working-directory: tests-${{ matrix.name }}
        run: |
          tar -xjf ${{ steps.package.outputs.tarfile }}
          bash ../test/test-load-save.sh ${{ steps.package.outputs.tardir }}/bygfoot
          bash ../test/test-country-defs.sh ${{ steps.package.outputs.tardir }}/bygfoot


  package-windows:
    needs:
      - set-variables
    runs-on:
      - windows-2016
    env:
      BYGFOOT_VERSION: ${{ needs.set-variables.outputs.bygfoot-version }}
    steps:
      - name: Checkout sources
        uses: actions/checkout@v2

      - name: Install ninja
        run: pip install ninja

      - name: Download dependencies
        run: |
          curl -O -L https://download.gnome.org/binaries/win64/gtk+/2.22/gtk+-bundle_2.22.1-20101229_win64.zip
          unzip gtk+-bundle_2.22.1-20101229_win64.zip

        shell: bash

      - name: Copy dependencies intall package directory
        shell: bash
        run: |
          mkdir -p bygfoot-$BYGFOOT_VERSION
          cp bin/*.dll bygfoot-$BYGFOOT_VERSION
          cp ./share/doc/gtk+-2.22.1/COPYING bygfoot-$BYGFOOT_VERSION/COPYING.gtk+
          cp ./share/doc/glib-2.26.1/COPYING bygfoot-$BYGFOOT_VERSION/COPYING.glib

      - name: Package Bygfoot
        env:
          CC: gcc
          CXX: g++
          PkgConfig_DIR: ./
        run: |
          export PKG_CONFIG=`pwd`/bin/pkg-config.exe
          # Add gtk+ directory to PATH so that cmake can find the correct zlib
          # library.
          export PATH=`pwd`/bin:$PATH
          ./scripts/package.sh . bygfoot-${{ env.BYGFOOT_VERSION }}-win64
        shell: bash

      - name: Upload artifact
        uses: actions/upload-artifact@v2
        with:
          name: "bygfoot-${{ env.BYGFOOT_VERSION }}-win64"
          path: "*.bz2"

  create_release:
    if: ${{ startswith(github.ref, 'refs/tags') }}
    needs:
      - package-linux
      - package-windows
    runs-on: ubuntu-latest

    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v2
        with:
          path: 'artifacts'

      - name: Install Dependencies
        run:  pip install PyGithub

      - name: Create Release
        shell: python
        run: |
          import github
          import os
          prerelease = False
          tag = '${{ github.ref }}'.split('/')[-1]
          if 'alpha' in tag or 'beta' in tag or 'rc' in tag:
            prerelease = True
          context = github.Github('${{ github.token }}')
          repo = context.get_repo('${{ github.repository }}')
          release = repo.create_git_release(tag = tag, name = tag, message = tag,
                                            prerelease = prerelease)
          for dir in os.listdir('artifacts'):
            print(dir)
            for f in os.listdir('artifacts' + '/' + dir):
              print(f)
              release.upload_asset('artifacts' + '/' + dir + '/' + f)
