﻿####################################################################################
# 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._I-J'

on:
  workflow_dispatch:
  pull_request:
    paths:
    - 'src/Lucene.Net.Tests._I-J/**/*'
    - '.build/dependencies.props'
    - '.build/TestReferences.Common.*'
    - 'TestTargetFrameworks.*'
    - '*.sln'
    - 'src/Lucene.Net.Tests._I-J/Directory.Build.*'
    - 'src/Directory.Build.*'
    - 'Directory.Build.*'
    - 'src/Lucene.Net.Tests/Properties/AssemblyInfo.cs'
    - 'src/Lucene.Net.Tests/Index/TestBinaryDocValuesUpdates.cs'
    - 'src/Lucene.Net.Tests/Index/TestI*.cs'
    - 'src/Lucene.Net.Tests/Index/TestJ*.cs'
    - 'src/Lucene.Net.Tests/Index/TestK*.cs'
    - 'src/Lucene.Net.Tests/Index/TestL*.cs'
    - 'src/Lucene.Net.Tests/Index/TestM*.cs'
    - 'src/Lucene.Net.Tests/Index/TestN*.cs'
    - 'src/Lucene.Net.Tests/Index/TestO*.cs'
    - 'src/Lucene.Net.Tests/Index/TestP*.cs'
    - 'src/Lucene.Net.Tests/Index/TestQ*.cs'
    - 'src/Lucene.Net.Tests/Index/TestR*.cs'
    - 'src/Lucene.Net.Tests/Index/TestS*.cs'
    - 'src/Lucene.Net.Tests/Index/TestT*.cs'
    - 'src/Lucene.Net.Tests/Index/TestU*.cs'
    - 'src/Lucene.Net.Tests/Index/TestV*.cs'
    - 'src/Lucene.Net.Tests/Index/TestW*.cs'
    - 'src/Lucene.Net.Tests/Index/TestX*.cs'
    - 'src/Lucene.Net.Tests/Index/TestY*.cs'
    - 'src/Lucene.Net.Tests/Index/TestZ*.cs'

    # Dependencies
    - 'src/Lucene.Net/**/*'
    - 'src/Lucene.Net.Analysis.Common/**/*'
    - 'src/Lucene.Net.Codecs/**/*'
    - 'src/Lucene.Net.Queries/**/*'
    - 'src/Lucene.Net.Grouping/**/*'
    - 'src/Lucene.Net.Join/**/*'
    - 'src/Lucene.Net.Facet/**/*'
    - 'src/Lucene.Net.Sandbox/**/*'
    - 'src/Lucene.Net.QueryParser/**/*'
    - 'src/Lucene.Net.TestFramework/**/*'

    - '!**/*.md'

jobs:

  Test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, ubuntu-latest]
        framework: [net6.0, net5.0, net48, net461]
        platform: [x64]
        configuration: [Release]
        exclude:
          - os: ubuntu-latest
            framework: net48
          - os: ubuntu-latest
            framework: net461
          - os: macos-latest
            framework: net48
          - os: macos-latest
            framework: net461
    env:
      project_path: './src/Lucene.Net.Tests._I-J/Lucene.Net.Tests._I-J.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.412'
        if: ${{ startswith(matrix.framework, 'netcoreapp3.') }}

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

      - name: Setup .NET 6 SDK
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '6.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}}'

