---
name: mingw

on:
  pull_request:
    types: [opened, synchronize]
    paths-ignore:
      - '**.md'
      - '.mailmap'
      - 'ChangeLog*'
      - 'whatsnew*'
      - 'LICENSE'
  push:
    paths-ignore:
      - '**.md'
      - '.mailmap'
      - 'ChangeLog*'
      - 'whatsnew*'
      - 'LICENSE'

jobs:
  autotools:
    runs-on: windows-2019
    if: "!contains(github.event.head_commit.message, 'ci skip')"
    strategy:
      fail-fast: false
      matrix:
        EVENT_MATRIX:
          - none
          - disable-openssl
          - disable-thread-support
          - disable-debug-mode
          - disable-malloc-replacement

    steps:
      - uses: actions/checkout@v2.0.0

      - name: Cache MinGW
        id: cache-mingw
        uses: actions/cache@v1.1.2
        with:
          path: D:\a\_temp\msys
          key: windows-mingw

      - name: Cache Build
        uses: actions/cache@v1.1.2
        with:
          path: build
          key: mingw-autotools-${{ matrix.EVENT_MATRIX }}-v2

      - uses: numworks/setup-msys2@v1
        if: steps.cache-mingw.outputs.cache-hit != 'true'
        with:
          msystem: MINGW64

      - name: Install Dependes
        if: steps.cache-mingw.outputs.cache-hit != 'true'
        run: |
          msys2do pacman -S --noconfirm mingw-w64-x86_64-gcc autoconf automake libtool mingw-w64-x86_64-openssl

      - name: Build And Test
        shell: powershell
        run: |
          $env:EVENT_CONFIGURE_OPTIONS=""
          if ( "${{ matrix.EVENT_MATRIX }}" -ne "none" ) {
            $env:EVENT_CONFIGURE_OPTIONS="--${{ matrix.EVENT_MATRIX }}"
          }
          $env:EVENT_TESTS_PARALLEL=1
          $env:EVENT_BUILD_PARALLEL=10

          $script='
          export PATH="/mingw64/bin:/usr/bin:/bin:/usr/local/bin:/opt/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl:$PATH"
          ./autogen.sh 2>&1 3>&1
          [[ $? -ne 0 ]] && exit 1
          mkdir -p build
          cd build
          [[ $? -ne 0 ]] && exit 1
          LDFLAGS="-L/mingw64/lib" CFLAGS="-I/mingw64/include" ../configure $EVENT_CONFIGURE_OPTIONS 2>&1
          [[ $? -ne 0 ]] && exit 1
          make -j $EVENT_BUILD_PARALLEL 2>&1
          [[ $? -ne 0 ]] && exit 1
          make verify -j $EVENT_TESTS_PARALLEL 2>&1 '
          D:\a\_temp\msys\msys64\usr\bin\bash.exe -c $script

      - uses: actions/upload-artifact@v1
        if: failure()
        with:
          name: mingw-${{ matrix.EVENT_MATRIX }}-build
          path: build

  cmake:
    runs-on: windows-2019
    if: "!contains(github.event.head_commit.message, 'ci skip')"
    strategy:
      fail-fast: false
      matrix:
        EVENT_MATRIX:
          - NONE
          - DISABLE_OPENSSL
          - DISABLE_THREAD_SUPPORT
          - DISABLE_DEBUG_MODE
          - DISABLE_MM_REPLACEMENT

    steps:
      - uses: actions/checkout@v2.0.0

      - name: Cache MinGW
        id: cache-mingw-cmake
        uses: actions/cache@v1.1.2
        with:
          path: D:\a\_temp\msys
          key: windows-mingw-cmake

      - name: Cache Build
        uses: actions/cache@v1.1.2
        with:
          path: build
          key: mingw-cmake-${{ matrix.EVENT_MATRIX }}-v2

      - uses: numworks/setup-msys2@v1
        if: steps.cache-mingw-cmake.outputs.cache-hit != 'true'
        with:
          msystem: MINGW64

      - name: Install Dependes
        if: steps.cache-mingw-cmake.outputs.cache-hit != 'true'
        run: |
          msys2do pacman -S --noconfirm mingw-w64-x86_64-gcc mingw-w64-x86_64-openssl

      - name: Build And Test
        shell: powershell
        run: |
          $EVENT_CONFIGURE_OPTIONS=""
          if ( "${{ matrix.EVENT_MATRIX }}" -ne "NONE" ) {
            $EVENT_CONFIGURE_OPTIONS="-DEVENT__${{ matrix.EVENT_MATRIX }}=ON"
          }
          $env:PATH="D:\a\_temp\msys\msys64\mingw64\bin;D:\a\_temp\msys\msys64\usr\bin;$env:PATH"
          mkdir build -ea 0
          cd build
          cmake .. -G "MSYS Makefiles" $EVENT_CONFIGURE_OPTIONS -DCMAKE_C_FLAGS=-w
          cmake --build .
          ctest -V

      - uses: actions/upload-artifact@v1
        if: failure()
        with:
          name: mingw-${{ matrix.EVENT_MATRIX }}-build
          path: build
