name: Building(CMake)

on:
  push:
    branches: [ master ]
    paths-ignore:
      - 'README.md'
      - 'LICENSE'
  pull_request:
    branches: [ master ]
    paths-ignore:
      - 'README.md'
      - 'LICENSE'

env:
  # Customize the CMake build type here (Release, Debug, RelWithDebInfo, etc.)
  BUILD_TYPE: RelWithDebInfo

jobs:
  linux-build:
    name: ${{ matrix.os}}
    runs-on: ${{ matrix.os }}
    strategy:
      matrix:
        os: [ubuntu-22.04]

    steps:
      - name: Checkout Source code
        if: github.event_name == 'push'
        uses: actions/checkout@v3

      - name: Checkout Source code
        if: github.event_name == 'pull_request'
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.sha }}

      - name: Install Dependencies
        run: |
          sudo apt-get -y -qq update
          sudo apt-get -y --no-install-recommends install \
            cmake \
            extra-cmake-modules \
            build-essential \
            qtbase5-dev \
            qttools5-dev-tools \
            qttools5-dev \
            libqt5dbus5 \
            libqt5network5 \
            libqt5core5a \
            libqt5widgets5 \
            libqt5gui5 \
            libqt5svg5-dev

      - name: Create Build Environment
        # Some projects don't allow in-source building, so create a separate build directory
        # We'll use this as our working directory for all subsequent commands
        run: cmake -E make_directory ${{runner.workspace}}/build

      - name: Configure CMake
        # Use a bash shell so we can use the same syntax for environment variable
        # access regardless of the host operating system
        shell: bash
        working-directory: ${{runner.workspace}}/build
        # Note the current convention is to use the -S and -B options here to specify source
        # and build directories, but this is only available with CMake 3.13 and higher.
        # The CMake binaries on the Github Actions machines are (as of this writing) 3.12
        #
        # We need to source the profile file to make sure conan is in PATH
        run: |
          cmake $GITHUB_WORKSPACE -DCMAKE_BUILD_TYPE=$BUILD_TYPE
      - name: Build
        working-directory: ${{runner.workspace}}/build
        shell: bash
        # Execute the build.  You can specify a specific target with "--target <NAME>"
        run: cmake --build . --config $BUILD_TYPE

      - name: Test
        working-directory: ${{runner.workspace}}/build
        shell: bash
        # Execute tests defined by the CMake configuration.
        # See https://cmake.org/cmake/help/latest/manual/ctest.1.html for more detail
        run: ctest -C $BUILD_TYPE

  windows-build:
    runs-on: ${{ matrix.config.os }}
    strategy:
      fail-fast: false
      matrix:
        config:
        - {
            name: "Windows 2019 MSVC",
            artifact: "Windows-MSVC.tar.xz",
            os: windows-2019,
            cc: "cl", cxx: "cl",
            environment_script: "C:/Program Files (x86)/Microsoft Visual Studio/2019/Enterprise/VC/Auxiliary/Build/vcvars64.bat"
          }

    steps:
      - uses: actions/checkout@v2

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

      - name: Install Qt
        uses: jurplel/install-qt-action@v2
        with:
          version: 5.15.2
          target:  desktop
          dir: '${{ github.workspace }}/build/'

      - name: Configure
        working-directory: build
        shell: powershell
        run: |
          cmake -DCMAKE_BUILD_TYPE=$env:BUILD_TYPE ../

      - name: Build
        working-directory: build
        shell: powershell
        run: |
          cmake --build . --config $env:BUILD_TYPE
