# This workflow will build a .NET project
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-net

name: BUILD & RUN TESTS

on:
  push:
    branches: [ "master" ]
  pull_request:
    branches: [ "master" ]
  workflow_dispatch:
  
env:
  AUDIT_NET_AZUREDOCDBAUTHKEY: ${{ secrets.AUDIT_NET_AZUREDOCDBAUTHKEY }}
  AUDIT_NET_AZUREDOCDBURL: ${{ secrets.AUDIT_NET_AZUREDOCDBURL }}
  AUDIT_NET_AZURETABLECNNSTRING: ${{ secrets.AUDIT_NET_AZURETABLECNNSTRING }}
  AUDIT_NET_AZUREBLOBSERVICEURL: ${{ secrets.AUDIT_NET_AZUREBLOBSERVICEURL }}
  AUDIT_NET_AZUREBLOBACCOUNTNAME: ${{ secrets.AUDIT_NET_AZUREBLOBACCOUNTNAME }}
  AUDIT_NET_AZUREBLOBACCOUNTKEY: ${{ secrets.AUDIT_NET_AZUREBLOBACCOUNTKEY }}

jobs:
  build_and_test:
    runs-on: windows-latest

    steps:
       
    - name: Checkout
      uses: actions/checkout@v3
      
    - name: Setup .NET
      uses: actions/setup-dotnet@v3
      with:
        dotnet-version: |
          2.1.x
          3.1.x
          6.0.x
          7.0.x 
          8.0.x
                
    - name: Setup NuGet
      uses: NuGet/setup-nuget@v1.0.2
      env:
        ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'      
      with:
        nuget-version: '6.x'      

    - name: Install SQL Server
      uses: Particular/install-sql-server-action@v1.0.0
      with:
        connection-string-env-var: SQL_SERVER_CONNECTION_STRING
        catalog: Audit
        extra-params: "Encrypt=False;"

    - name: Extra SQL 
      shell: pwsh
      run: |
          echo "Execute SqlScript.sql"
          sqlcmd -i ".\src\Audit.NET.SqlServer\SqlScript.sql" -d "master" -I
          echo "Execute Demo.sql"
          sqlcmd -i ".\test\Audit.EntityFramework.Core.UnitTest\Demo.sql" -d "master" -I

    - name: Dotnet Restore 
      run: dotnet restore
      
    - name: Dotnet Build Audit.NET.sln
      run: dotnet build .\Audit.NET.sln --no-restore --configuration release

    - name: Install Required Tools
      run: |
        dotnet new tool-manifest
        dotnet tool install dotnet-reportgenerator-globaltool
        dotnet tool install dotnet-coverage

    - name: Run unit tests (no integration)
      run: |
        dotnet coverage collect dotnet test --no-build --configuration release -m:1 --filter=TestCategory!=Integration --output ${{ github.workspace }}/Tests/Coverage.UnitTest.cobertura.xml --output-format cobertura

    - name: Run integration tests (SqlServer)
      run: |
        dotnet coverage collect dotnet test --no-build --configuration release -m:1 --filter=TestCategory=SqlServer --output ${{ github.workspace }}/Tests/Coverage.SqlServer.cobertura.xml --output-format cobertura

    - name: Generate Code Coverage Report
      run: |
        dotnet reportgenerator -reports:${{ github.workspace }}/Tests/Coverage.*.cobertura.xml -targetdir:"${{ github.workspace }}/Tests/coveragereport" -reporttypes:"MarkdownSummary;Html" "-assemblyfilters:+Audit.*;-*UnitTest;-Audit.NET.AmazonQLDB;-Audit.NET.Azure*;-Audit.NET.DynamoDB;-Audit.NET.ElasticSearch;-Audit.NET.Kafka;-Audit.NET.MongoDB;-Audit.NET.MySql;-Audit.NET.PostgreSql;-Audit.NET.RavenDB;-Audit.NET.Redis"

    - name: Upload Code Coverage Report artifact
      uses: actions/upload-artifact@v2
      with:
        name: coveragereport
        path: ${{ github.workspace }}/Tests/coveragereport
    
    - name: Rename summary coverage file
      run: mv -force "${{ github.workspace }}/Tests/coveragereport/Summary.md" "${{ github.workspace }}/CODE_COVERAGE.md"

    - name: Commit CODE_COVERAGE.md
      uses: stefanzweifel/git-auto-commit-action@v5
      with:
        commit_message: Commit CODE_COVERAGE.md
        file_pattern: 'CODE_COVERAGE.md'