# 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-13, ubuntu-20.04, windows-2019, macos-latest, ubuntu-latest, windows-latest ]
        node: [ '18.20.1' ]
        vscode: [ '1.82.0', 'stable', 'insiders' ] # v1.82.0 is the first version of VSCode to use Node 18
        java_distribution: [ temurin ]
        java_version: [ 8, 11, 17 ]
        exclude:
          # java 8 not available on latest macos
          - os: macos-latest
            java_version: 8
          # Currently newer versions of VSCode don't work the same on Windows, this will need looked into.
          # TODO: Remove the below windows excludes once the extension tests are working with newer versions of VSCode
          - os: windows-2019
            vscode: 'stable'
          - os: windows-2019
            vscode: 'insiders'
          - os: windows-latest
            vscode: 'stable'
          - os: windows-latest
            vscode: 'insiders'
      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.7

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

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

      # macos-13 & macos-latest doesn't seem to have sbt installed by default
      - name: Install sbt - macos-latest
        run: brew install sbt
        if: matrix.os == 'macos-13' || matrix.os == 'macos-latest'

      ############################################################
      # 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
