# 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: Nightly Tests

on:
  workflow_dispatch:
  schedule:
    - cron: '0 0 * * *'

jobs:
  build-test-package:
    name: 'Build, Test, and Package (OS: ${{ matrix.os }}, Node: ${{ matrix.node }}, Java: ${{ matrix.java_version }}, VS Code: ${{ matrix.vscode }} )'
    strategy:
      matrix:
        os: [ macos-11, ubuntu-20.04, windows-2019, macos-latest, ubuntu-latest, windows-latest ]
        node: [ '16', '18' ]
        vscode: [ 'stable', 'insiders' ]
        java_distribution: [ temurin ]
        java_version: [ 8, 11, 17 ]
      fail-fast: false  # don't immediately fail all other jobs if a single job fails
    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: bash
    env:
      DAFFODIL_TEST_VSCODE_VERSION: ${{ matrix.vscode }}
    steps:
      ############################################################
      # Setup
      ############################################################

      - name: Check out Repository
        uses: actions/checkout@v4.1.1

      - name: Setup Java
        uses: actions/setup-java@v3.13.0
        with:
          distribution: ${{ matrix.java_distribution }}
          java-version: ${{ matrix.java_version }}

      - name: Install Node.js
        uses: actions/setup-node@v4.0.0
        with:
          node-version: ${{ matrix.node }}

      ############################################################
      # Build & Package
      ############################################################

      - name: Install node dependencies
        run: yarn install

      - name: Runs tests - Linux
        run: xvfb-run -a yarn test
        if: runner.os == 'Linux'

      - name: Runs tests - Windows/Mac
        run: yarn test
        if: runner.os != 'Linux'

      - name: Check for Errors in macOS
        run: tail -n 1000 '/Users/runner/Library/Application Support/omega_edit/'* && exit 1
        if: failure() && runner.os == 'macOS'

      - name: Package
        run: yarn package