# 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: SonarCloud Workflow

on: [push]

jobs:
  sonarCloudTrigger:
    if: github.repository == 'apache/daffodil'
    name: SonarCloud Scan, Scala ${{ matrix.scala_version }}, ${{ matrix.os }}
    strategy:
      matrix:
        scala_version: [ 2.12.13 ]
        os: [ ubuntu-20.04 ]

    runs-on: ${{ matrix.os }}
    steps:

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

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

      - name: Check out Repository
        uses: actions/checkout@v2.3.4
        # Disabling shallow clone is recommended for improving reporting
        with:
          fetch-depth: 0

      ############################################################
      # Build & Scan
      ############################################################

      - name: Compile
        run: $SBT compile Test/compile IntegrationTest/compile
        env:
          SBT: sbt -J-Xms1024m -J-Xmx5120m -J-XX:ReservedCodeCacheSize=512m -J-XX:MaxMetaspaceSize=1024m ++${{ matrix.scala_version }}

      - name: SonarCloud Scan
        uses: sonarsource/sonarcloud-github-action@v1.5
        # Don't setup Java since its env vars will screw up sonarcloud action
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
