﻿#
# 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: CI - Unit
on:
  pull_request:
    branches:
      - master

jobs:

  unit-tests:
    name:
    runs-on: ubuntu-latest
    timeout-minutes: 120

    steps:
      - name: checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}

      - name: set up dotnet 3
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '3.1.x'

      - name: set up dotnet 2
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: '2.2.x'

      - name: set up dotnet SxS
        shell: pwsh
        run: |
          $version = Split-Path (Split-Path $ENV:DOTNET_ROOT -Parent) -Leaf;
          $root = Split-Path (Split-Path $ENV:DOTNET_ROOT -Parent) -Parent;
          $directories = Get-ChildItem $root | Where-Object { $_.Name -ne $version };
          foreach ($dir in $directories) {
            $from = $dir.FullName;
            $to = "$root/$version";
            Write-Host Copying from $from to $to;
            Copy-Item "$from\*" $to -Recurse -Force;
          }

      - name: run unit tests
        run: dotnet test ./tests/DotPulsar.Tests/DotPulsar.Tests.csproj --logger "trx;verbosity=detailed"

      - name: package artifacts
        if: failure()
        run: |
          rm -rf artifacts
          mkdir artifacts
          find . -type d -name "TestResults" -exec cp --parents -R {} artifacts/ \;
          zip -r artifacts.zip artifacts

      - name: upload artifacts
        uses: actions/upload-artifact@master
        if: failure()
        with:
          name: artifacts
          path: artifacts.zip
