/*
 * 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.
 */

node('ubuntu') {
  def JAVA_JDK_17=tool name: 'jdk_17_latest', type: 'hudson.model.JDK'
  stage('Checkout') {
    if(env.CHANGE_ID) {
      // By default checkout on PRs will fetch only that branch and nothing else. However, in order for the Sonar plugin
      // to function properly we need to fetch also the target branch ${CHANGE_TARGET} so we need to customize the
      // refspec. If the target branch of the PR is not present warnings like the following may appear:
      // Could not find ref 'main' in refs/heads, refs/remotes/upstream or refs/remotes/origin
      checkout([
        $class: 'GitSCM',
        branches: scm.branches,
        doGenerateSubmoduleConfigurations: scm.doGenerateSubmoduleConfigurations,
        extensions: scm.extensions,
        userRemoteConfigs: scm.userRemoteConfigs + [[
          name: 'origin',
          refspec: scm.userRemoteConfigs[0].refspec+ " +refs/heads/${CHANGE_TARGET}:refs/remotes/origin/${CHANGE_TARGET}",
          url: scm.userRemoteConfigs[0].url,
          credentialsId: scm.userRemoteConfigs[0].credentialsId
        ]],
      ])
    } else {
      checkout scm
    }
  }
  stage('Code Quality') {
    timeout(time: 1, unit: 'HOURS') {
      withEnv(["Path+JDK=$JAVA_JDK_17/bin","JAVA_HOME=$JAVA_JDK_17"]) {
        withCredentials([string(credentialsId: 'SONARCLOUD_TOKEN', variable: 'SONAR_TOKEN')]) {
          if ( env.BRANCH_NAME.startsWith("PR-") ) {
            sh './gradlew build --no-parallel --no-daemon jacocoAggregateTestReport sonar -PenableJacoco -Porg.sonarqube.version=6.3.1.5724 -Dsonar.pullrequest.branch=${CHANGE_BRANCH} -Dsonar.pullrequest.base=${CHANGE_TARGET} -Dsonar.pullrequest.key=${CHANGE_ID} -Dsonar.token=${SONAR_TOKEN}'
          } else {
            sh './gradlew build --no-parallel --no-daemon jacocoAggregateTestReport sonar -PenableJacoco -Porg.sonarqube.version=6.3.1.5724 -Dsonar.branch.name=${BRANCH_NAME} -Dsonar.token=${SONAR_TOKEN}'
              }
        }
      }
    }
  }
  cleanWs()
}

