﻿####################################################################################
# DO NOT EDIT: This file was automatically generated by Generate-TestWorkflows.ps1
####################################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
# 
#   http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

name: 'Lucene.Net.Tests.Benchmark'

on:
  workflow_dispatch:
  pull_request:
    paths:
    - 'src/Lucene.Net.Tests.Benchmark/**/*'
    - 'build/Dependencies.props'
    - 'build/TestReferences.Common.*'
    - 'TestTargetFrameworks.*'
    - '*.sln'
    - 'src/Lucene.Net.Tests.Benchmark/Directory.Build.*'
    - 'src/Directory.Build.*'
    - 'Directory.Build.*'

    # Dependencies
    - 'src/Lucene.Net/**/*'
    - 'src/Lucene.Net.Analysis.Common/**/*'
    - 'src/Lucene.Net.Memory/**/*'
    - 'src/Lucene.Net.Queries/**/*'
    - 'src/Lucene.Net.Highlighter/**/*'
    - 'src/dotnet/Lucene.Net.ICU/**/*'
    - 'src/Lucene.Net.Grouping/**/*'
    - 'src/Lucene.Net.Join/**/*'
    - 'src/Lucene.Net.Facet/**/*'
    - 'src/Lucene.Net.Sandbox/**/*'
    - 'src/Lucene.Net.QueryParser/**/*'
    - 'src/Lucene.Net.Spatial/**/*'
    - 'src/Lucene.Net.Benchmark/**/*'
    - 'src/Lucene.Net.Codecs/**/*'
    - 'src/Lucene.Net.TestFramework/**/*'

    - '!**/*.md'

jobs:

  Test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, ubuntu-latest]
        framework: [net5.0, netcoreapp2.1, net48]
        platform: [x64]
        configuration: [Release]
        exclude:
          - os: ubuntu-latest
            framework: net48
          - os: macos-latest
            framework: net48
    env:
      project_path: './src/Lucene.Net.Tests.Benchmark/Lucene.Net.Tests.Benchmark.csproj'
      trx_file_name: 'TestResults.trx'
      md_file_name: 'TestResults.md' # Report file name for LiquidTestReports.Markdown

    steps:
      - uses: actions/checkout@v2

      - name: Setup .NET 3.1 SDK
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '3.1.404'
        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}

      - name: Setup .NET 2.1 SDK
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '2.1.811'
        if: ${{ startswith(matrix.framework, 'netcoreapp2.') }}

      - name: Setup .NET 5 SDK
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '5.0.100'

      - run: |
          $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
          $test_results_artifact_name = "testresults_${{matrix.os}}_${{matrix.framework}}_${{matrix.platform}}_${{matrix.configuration}}"
          Write-Host "Project Name: $project_name"
          Write-Host "Results Artifact Name: $test_results_artifact_name"
          echo "project_name=$project_name" | Out-File -FilePath  $env:GITHUB_ENV -Encoding utf8 -Append
          echo "test_results_artifact_name=$test_results_artifact_name" | Out-File -FilePath  $env:GITHUB_ENV -Encoding utf8 -Append
          # Title for LiquidTestReports.Markdown
          echo "title=Test Run for $project_name - ${{matrix.framework}} - ${{matrix.platform}} - ${{matrix.os}}" | Out-File -FilePath  $env:GITHUB_ENV -Encoding utf8 -Append
        shell: pwsh
      - run: dotnet build ${{env.project_path}} --configuration ${{matrix.configuration}} --framework ${{matrix.framework}} /p:TestFrameworks=true
      - run: dotnet test ${{env.project_path}} --configuration ${{matrix.configuration}} --framework ${{matrix.framework}} --no-build --no-restore --blame-hang --blame-hang-dump-type mini --blame-hang-timeout 20minutes --logger:"console;verbosity=normal" --logger:"trx;LogFileName=${{env.trx_file_name}}" --logger:"liquid.md;LogFileName=${{env.md_file_name}};Title=${{env.title}};" --results-directory:"${{github.workspace}}/${{env.test_results_artifact_name}}/${{env.project_name}}" -- RunConfiguration.TargetPlatform=${{matrix.platform}}
      # upload reports as build artifacts
      - name: Upload a Build Artifact
        uses: actions/upload-artifact@v2
        if: ${{always()}}
        with:
          name: '${{env.test_results_artifact_name}}'
          path: '${{github.workspace}}/${{env.test_results_artifact_name}}'

