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

@Library('trustedfirmware') _
import org.trustedfirmware.Gerrit

def nodeLabel = "docker-amd64-tf-m-bionic"

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

timestamps {
  node(nodeLabel) {
    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']]])
        sh "git rev-parse --short HEAD"
        // Clone TF-M repositories so share folder can be reused by downstream jobs
        sh "./clone.sh"
      }
    }
    try {
      verify = 1
      stage("Build") {
        sh "tf-m-ci-scripts/run-build.sh"
      }
      stage("Post") {
        archiveArtifacts 'ci_build/spe/bin/**'
        archiveArtifacts 'ci_build/nspe/bin/**'
        archiveArtifacts 'ci_build/nspe/*.bin'
        archiveArtifacts 'ci_build/spe/api_ns/bin/**'
        archiveArtifacts 'ci_build/spe/api_ns/interface/**'
        def upstreamProject = getUpstreamJob()[0].upstreamProject
        if (upstreamProject == "tf-m-build-and-test") {
          archiveArtifacts 'ci_build/spe/build-spe/generated/**'
        }
        if (upstreamProject == "tf-m-nightly-performance"){
          //Creating a folder to store memory footprint artifacts and launching the memory footprint script.
          sh "mkdir -p ${SHARE_FOLDER}/Memory_footprint/"
          output = sh(script: """python3 tf-m-ci-scripts/performance.py --generate-memory""", returnStdout: true).trim()
          println(output)
        }
      }
    } catch (Exception e) {
      archiveArtifacts artifacts: 'ci_build/**', allowEmptyArchive: true
      manager.buildFailure()
      verify = -1
    } finally {
      g = new Gerrit()
      g.verifyStatusInWorkspace(verify, env.CONFIG_NAME, 'build')
      def buildStatus = (verify == 1) ? 'Successful' : 'Failed'
      //g.commentInWorkspace("Build configuration ${env.CONFIG_NAME} ${buildStatus}: ${env.RUN_DISPLAY_URL}")
      cleanWs()
    }
  }
}
