#!/usr/bin/env groovy
//-------------------------------------------------------------------------------
// Copyright (c) 2020-2024, 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-jammy"

@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") {
        tfgit.checkout_ci_scripts()
        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") {
        // Activate UBL license for ArmClang.
        if (env.CONFIG_NAME.contains("ARMCLANG")) {
          withCredentials([string(credentialsId: 'ARMCLANG_UBL_CODE', variable: 'ARMCLANG_UBL_CODE')]) {
            sh "tf-m-ci-scripts/jenkins/armclang-ubl.sh"
          }
        }

        sh "tf-m-ci-scripts/run-build.sh"
      }
      stage("Post") {
        // Temporary, for debugging https://linaro.atlassian.net/browse/TFC-615
        archiveArtifacts artifacts: 'ci_build/**', allowEmptyArchive: true

        archiveArtifacts 'ci_build/spe/bin/**'
        archiveArtifacts 'ci_build/spe/api_ns/bin/**'
        archiveArtifacts 'ci_build/spe/api_ns/interface/**'
        try {
          archiveArtifacts 'ci_build/nspe/bin/**'
        } catch (Exception e) {
          print("ci_build/nspe/bin not exists")
        }
        try {
          archiveArtifacts 'ci_build/nspe/*.bin'
        } catch (Exception e) {
          print("ci_build/nspe/*.bin not exists")
        }
        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) {
      println("Archiving all build files due to build error (to allow investigate it)")
      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()
    }
  }
}
