# 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: Daffodil CI

on: [push, pull_request]

jobs:
  test:
    name: Java ${{ matrix.java_version }}, Scala ${{ matrix.scala_version }}, ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        java_version: [ 8, 11, 16 ]
        scala_version: [ 2.12.13 ]
        os: [ ubuntu-20.04, windows-2019 ]
        include:
          - os: ubuntu-20.04
            shell: bash
            env_cc: clang-10
            env_ar: llvm-ar-10
          - os: windows-2019
            shell: msys2 {0}
            env_cc: clang
            env_ar: llvm-ar

    runs-on: ${{ matrix.os }}
    defaults:
      run:
        shell: ${{ matrix.shell }}
    env:
      AR: ${{ matrix.env_ar }}
      CC: ${{ matrix.env_cc }}
      SBT: sbt -J-Xms1024m -J-Xmx5120m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m ++${{ matrix.scala_version }} coverage
      SBTNOCOV: sbt -J-Xms1024m -J-Xmx5120m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m ++${{ matrix.scala_version }}
    steps:

      ############################################################
      # Setup
      ############################################################

      - name: Install Dependencies (Linux)
        if: runner.os == 'Linux'
        run: sudo apt-get install -y libmxml-dev

      - name: Install Dependencies (Windows)
        if: runner.os == 'Windows'
        uses: msys2/setup-msys2@v2
        with:
          install: clang diffutils make pkgconf
          path-type: inherit

      - name: Check out mxml source (Windows)
        if: runner.os == 'Windows'
        uses: actions/checkout@v2.3.4
        with:
          repository: michaelrsweet/mxml
          ref: v3.2
          path: mxml

      - name: Install mxml library (Windows)
        if: runner.os == 'Windows'
        run: |
          # Our runtime2 tests may break if mxml library is compiled with clang
          export AR=ar CC=cc
          cd mxml
          ./configure --prefix=/usr --disable-shared --disable-threads
          make install
          # Workaround for sbt hanging problem
          echo "COURSIER_CACHE=$temp" >> $GITHUB_ENV
          echo "COURSIER_CONFIG_DIR=$temp" >> $GITHUB_ENV

      - name: Setup Java
        uses: actions/setup-java@v1.4.3
        with:
          java-version: ${{ matrix.java_version }}

      - name: Check out Repository
        uses: actions/checkout@v2.3.4

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

      - name: Compile
        run: $SBT compile Test/compile IntegrationTest/compile

      - name: Build Documentation
        run: $SBTNOCOV unidoc

      - name: Package Zip & Tar
        run: $SBTNOCOV daffodil-cli/Universal/packageBin daffodil-cli/Universal/packageZipTarball

      - name: Package RPM (Linux)
        if: runner.os == 'Linux'
        run: $SBTNOCOV daffodil-cli/Rpm/packageBin

      ############################################################
      # Test
      ############################################################

      - name: Run Rat Check
        run: $SBTNOCOV ratCheck || (cat target/rat.txt; exit 1)

      - name: Run Unit Tests
        run: $SBT test

      - name: Run Integration Tests
        run: $SBT IntegrationTest/test

      - name: Generate Coverage Report
        run: $SBT coverageAggregate

      - name: Upload Coverage Report
        uses: codecov/codecov-action@v1.3.1
