#!/usr/bin/env groovy
//-------------------------------------------------------------------------------
// Copyright (c) 2020-2021, Arm Limited and Contributors. All rights reserved.
//
// SPDX-License-Identifier: BSD-3-Clause
//
//-------------------------------------------------------------------------------

@NonCPS
def getUpstreamJob() {
  def cause = manager.build.getAction(hudson.model.CauseAction.class).getCauses()
  return cause
}

node("docker-amd64-tf-m-bionic") {
  stage("Init") {
    cleanWs()
    dir("tf-m-ci-scripts") {
      checkout([$class: 'GitSCM', branches: [[name: '$CI_SCRIPTS_BRANCH']], userRemoteConfigs: [[credentialsId: 'GIT_SSH_KEY', url: '$CI_SCRIPTS_REPO']]])
    }
  }
  stage("LAVA") {

    def fvp_only_cmd = ""
    def upstreamProject = getUpstreamJob()[0].upstreamProject
    if (upstreamProject == "tf-m-build-and-test") {
      fvp_only_cmd = "--fvp-only "
      print("Run test cases only on FVP in per-patch.")
    }

    withCredentials([usernamePassword(credentialsId: env.LAVA_CREDENTIALS, passwordVariable: 'LAVA_TOKEN', usernameVariable: 'LAVA_USER')]) {
      print("Generating LAVA jobs...")
      def bl2_string = ""
      def psa_string = ""
      if (env.BL2.equals("True")) {
        bl2_string = "--bl2"
      }
      // work around this string containing quotes?
      if (env.PSA_API_SUITE != "") {
        psa_string = "--psa-api-suite ${env.PSA_API_SUITE}"
      }
      dir("tf-m-ci-scripts") {
        def res = sh(script: """./lava_helper/lava_create_jobs.py \
--build-number ${env.BUILD_NUMBER} --output-dir lava_jobs ${fvp_only_cmd}\
--compiler ${env.COMPILER} --platform ${env.TARGET_PLATFORM} \
${bl2_string} ${psa_string} --build-type ${env.CMAKE_BUILD_TYPE} \
--jenkins-build-url ${env.BUILD_URL} --proj-config ${env.PROJ_CONFIG} \
--docker-prefix ${env.DOCKER_PREFIX} --license-variable "${env.LICENSE_VARIABLE}"
""", returnStdout: true).trim()
        print(res)
        job_ids = sh(script: """./lava_helper/lava_submit_jobs.py \
  --lava-url ${env.LAVA_URL} --job-dir lava_jobs \
  --lava-user ${LAVA_USER} --lava-token ${LAVA_TOKEN} | egrep "^JOBS"
  """, returnStdout: true).trim()
        currentBuild.setDescription(job_ids)
      }
    }
  }
  stage("Post") {
    archiveArtifacts artifacts: 'tf-m-ci-scripts/lava_jobs/**', allowEmptyArchive: true
    cleanWs()
  }
}
