name: Continuous Integration
on: pull_request

env:
  DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true
  DOTNET_CLI_TELEMETRY_OPTOUT: true

jobs:

  ###################################################
  # DOCS
  ###################################################

  docs:
    name: Documentation
    runs-on: ubuntu-latest
    steps:
    - name: Checkout
      uses: actions/checkout@master

    - name: Setup .NET SDK
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: | 
          5.0.301
          6.0.100

    - name: Setup Node.js
      uses: actions/setup-node@v2
      with:
        node-version: '16'

    - name: Cache dependencies
      uses: actions/cache@v2
      with:
        path: ~/.npm
        key: npm-${{ hashFiles('package-lock.json') }}
        restore-keys: npm-

    - name: Build
      shell: bash
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
      run: |
        cd docs
        dotnet tool restore
        dotnet run --configuration Release

    - name: Archive doc generation
      uses: actions/upload-artifact@v2
      with:
        name: documentation-output
        path: docs/output/
        retention-days: 5

  ###################################################
  # BUILD
  ###################################################

  build:
    name: Build
    if: "!contains(github.event.head_commit.message, 'skip-ci')"
    strategy:
      matrix:
        kind: ['linux', 'windows', 'macOS']
        include:
          - kind: linux
            os: ubuntu-latest
          - kind: windows
            os: windows-latest
          - kind: macOS
            os: macos-latest
    runs-on: ${{ matrix.os }}
    steps:
      - name: Checkout
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Setup .NET SDK
        uses: actions/setup-dotnet@v1
        with:
          dotnet-version: | 
            3.1.402
            5.0.301
            6.0.100

      - name: Integration Tests
        shell: bash
        run: |
          dotnet tool restore
          dotnet example --all --skip live --skip livetable --skip prompt --skip screens

      - name: Build
        shell: bash
        run: |
          dotnet tool restore
          dotnet cake

      - name: Upload Verify Test Results
        if: failure()
        uses: actions/upload-artifact@v2
        with:
          name: verify-test-results
          path: |
            **/*.received.*