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

on:
  workflow_dispatch:
  pull_request:
    paths:
    - 'src/Lucene.Net.Tests.Spatial/**/*'
    - '.build/dependencies.props'
    - '.build/TestReferences.Common.*'
    - 'TestTargetFrameworks.*'
    - '*.sln'
    - 'src/Lucene.Net.Tests.Spatial/Directory.Build.*'
    - 'src/Directory.Build.*'
    - 'Directory.Build.*'
    - 'src/Lucene.Net.Tests.Spatial/Test-Files/**/*'

    # Dependencies
    - 'src/Lucene.Net/**/*'
    - 'src/Lucene.Net.Analysis.Common/**/*'
    - 'src/Lucene.Net.Codecs/**/*'
    - 'src/Lucene.Net.Queries/**/*'
    - 'src/Lucene.Net.Spatial/**/*'
    - 'src/Lucene.Net.TestFramework/**/*'

    - '!**/*.md'

jobs:

  Test:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [windows-latest, ubuntu-latest]
        framework: [net7.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.Spatial/Lucene.Net.Tests.Spatial.csproj'
      run_slow_tests: 'false'
      trx_file_name: 'TestResults.trx'
      md_file_name: 'TestResults.md' # Report file name for LiquidTestReports.Markdown

    steps:
      - name: Checkout Source Code
        uses: actions/checkout@v2

      - name: Disable .NET SDK Telemetry and Logo
        run: |
          echo "DOTNET_NOLOGO=1" | Out-File -FilePath  $env:GITHUB_ENV -Encoding utf8 -Append
          echo "DOTNET_CLI_TELEMETRY_OPTOUT=1" | Out-File -FilePath  $env:GITHUB_ENV -Encoding utf8 -Append
        shell: pwsh

      - 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.403'
        if: ${{ startswith(matrix.framework, 'net6.') }}

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

      - name: Setup Environment Variables
        run: |
          $project_name = [System.IO.Path]::GetFileNameWithoutExtension($env:project_path)
          $test_results_artifact_name = "testresults_${{matrix.os}}_${{matrix.framework}}_${{matrix.platform}}_${{matrix.configuration}}"
          $working_directory = "$env:GITHUB_WORKSPACE"
          Write-Host "Project Name: $project_name"
          Write-Host "Results Artifact Name: $test_results_artifact_name"
          Write-Host "Working Directory: $working_directory"
          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
          # Set the Azure DevOps default working directory env variable, so our tests only need to deal with a single env variable
          echo "SYSTEM_DEFAULTWORKINGDIRECTORY=$working_directory" | 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}} TestRunParameters.Parameter\(name=\"tests:slow\",\ value=\"\${{env.run_slow_tests}}\"\)
        shell: bash
      # 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}}'

