# 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
          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:
    needs: build-linux
    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
          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: |
          cd ${{github.workspace}}/core
          gcov *.o
          cd ..
          mkdir coverage
          cp core/*.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" 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://mirror.firedaemon.com/OpenSSL/openssl-1.1.1r.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\