# This is a basic workflow to help you get started with Actions

name: CI

# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the master branch
on:
  push:
    branches:
    - master
  pull_request:
    branches:
    - master

# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
  formatting-check:
    name: check-clang-format
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Run clang-format style check.
      uses: jidicula/clang-format-action@v4.5.0
      with:
        clang-format-version: '14'
        check-path: '.'
        
  build-linux:
    needs: formatting-check
    # The type of runner that the job will run on
    runs-on: ubuntu-latest

    # Steps represent a sequence of tasks that will be executed as part of the job
    steps:
      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
      - uses: actions/checkout@v2
      
      - name: Install dependencies
        uses: awalsh128/cache-apt-pkgs-action@latest
        with:
          packages: qt5-qmake libqt5websockets5-dev g++ make
          version: 1.0
          
      # Runs a set of commands using the runners shell
      - name: qmake and build
        run: |
          cd $GITHUB_WORKSPACE
          qmake project-akashi.pro
          make
          mv bin/config_sample bin/config
          
      - name: Run tests
        run: |
            cd ${{github.workspace}}/bin_tests/
            for test in ./unittest_*; do
              LD_LIBRARY_PATH=../bin:$LD_LIBRARY_PATH ./$test
            done;
          
      - name: Upload binary
        uses: actions/upload-artifact@v2
        with:
          name: akashi-linux
          path: bin/
  
  # coverage:
  #   runs-on: ubuntu-latest

  #   steps:
  #      # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it
  #     - uses: actions/checkout@v2
      
  #     - name: Install dependencies
  #       uses: awalsh128/cache-apt-pkgs-action@latest
  #       with:
  #         packages: qt5-qmake libqt5websockets5-dev g++ make
  #         version: 1.0
          
  #     # Runs a set of commands using the runners shell
  #     - name: qmake and build
  #       run: |
  #         cd $GITHUB_WORKSPACE
  #         qmake CONFIG+=coverage project-akashi.pro
  #         make
          
  #     - name: Run tests
  #       run: |
  #           cd ${{github.workspace}}/bin_tests/
  #           for test in ./unittest_*; do
  #             LD_LIBRARY_PATH=../bin:$LD_LIBRARY_PATH ./$test
  #           done;

  #     - name: Copy coverage files
  #       run: |
  #         mkdir coverage
  #         cd ${{github.workspace}}
  #         gcov *.o
  #         cp *.gcov ../coverage/

  #     - name: Codecov
  #       uses: codecov/codecov-action@v3.1.0
  #       with:
  #         files: coverage/*

  #     - name: Upload coverage files
  #       uses: actions/upload-artifact@v2
  #       with:
  #         name: coverage statistics
  #         path: coverage/

  build-windows:
    needs: formatting-check
    runs-on: windows-latest
    
    steps:
      - uses: actions/checkout@v2
      - uses: ilammy/msvc-dev-cmd@v1
      
      - name: Cache Qt
        id: cache-qt
        uses: actions/cache@v1  # not v2!
        with:
          path: ../Qt
          key: ${{ runner.os }}-QtCache

      - name: Install Qt
        uses: jurplel/install-qt-action@v2
        with:
          cached: ${{ steps.cache-qt.outputs.cache-hit }}
     
      - name: Build
        run: |
          cd $Env:GITHUB_WORKSPACE
          qmake "CONFIG += qtquickcompiler" project-akashi.pro
          nmake
          windeployqt bin\akashi.exe --release --no-opengl-sw
          mv bin\config_sample bin\config

# As QTest seems to be non-functional on Windows runners this is commented out. If a solution is found, please fix and uncomment - 27.06.2022 / Salanto         
#      - name: Run tests
#        run: |
#            windeployqt .\unittest_music_manager.exe --no-translations
#            $tests = Get-ChildItem -Filter "unittest_*.exe" -Path ".\" | Select -ExpandProperty Name
#            foreach ($test in $tests) {Write-Host(& ".\$test")}
#        working-directory: ${{ github.workspace }}/bin_tests

      - name: Deploy OpenSSL
        run: |
          curl https://download.firedaemon.com/FireDaemon-OpenSSL/openssl-1.1.1t.zip --output openssl-1.1.1.zip
          tar -xf openssl-1.1.1.zip
          copy .\openssl-1.1\x64\bin\libcrypto-1_1-x64.dll .\bin\libcrypto-1_1-x64.dll 
          copy .\openssl-1.1\x64\bin\libssl-1_1-x64.dll .\bin\libssl-1_1-x64.dll
          
      - name: Upload zip
        uses: actions/upload-artifact@v2
        with:
          name: akashi-windows
          path: bin\