#!/usr/bin/env groovy
//-------------------------------------------------------------------------------
// Copyright (c) 2020-2021, 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"
if (env.COMPILER == "ARMCLANG") {
  nodeLabel = "docker-amd64-tf-m-bionic"
}

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

node(nodeLabel) {
  stage("Init") {
    cleanWs()
    dir("trusted-firmware-m") {
      checkout(
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: '$GERRIT_BRANCH']],
          extensions: [[$class: 'BuildChooserSetting', buildChooser: [$class: 'GerritTriggerBuildChooser']]],
          userRemoteConfigs: [[
            credentialsId: 'GIT_SSH_KEY',
            refspec: '$GERRIT_REFSPEC', url: '$CODE_REPO'
          ]]
        ])
    }
    dir("tf-m-ci-scripts") {
      checkout([$class: 'GitSCM', branches: [[name: '$CI_SCRIPTS_BRANCH']], userRemoteConfigs: [[credentialsId: 'GIT_SSH_KEY', url: '$CI_SCRIPTS_REPO']]])
    }
    dir("mbedtls") {
      checkout(
        changelog: false,
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: 'FETCH_HEAD']],
          userRemoteConfigs: [[
            refspec: 'refs/tags/$MBEDTLS_VERSION',
            url: params.MBEDTLS_URL
          ]]
        ]
      )
    }
    dir("mcuboot") {
      checkout(
        changelog: false,
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: 'FETCH_HEAD']],
          userRemoteConfigs: [[
            refspec: '$MCUBOOT_REFSPEC',
            url: params.MCUBOOT_URL
          ]]
        ]
      )
    }
    dir("tf-m-tests") {
      checkout(
        changelog: false,
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: 'FETCH_HEAD']],
          userRemoteConfigs: [[
            refspec: '$TFM_TESTS_REFSPEC',
            url: params.TFM_TESTS_URL
          ]]
        ]
      )
    }
    if (env.PSA_API_SUITE != "") {
      dir("psa-arch-tests") {
        checkout(
          changelog: false,
          poll: false,
          scm: [
            $class: 'GitSCM',
            branches: [[name: 'FETCH_HEAD']],
            userRemoteConfigs: [[
              refspec: '$PSA_ARCH_TESTS_VERSION',
              url: params.PSA_ARCH_TESTS_URL
            ]]
          ]
        )
      }
    }
  }
  try {
    verify = 1
    stage("Build") {
      sh "tf-m-ci-scripts/run-build.sh"
    }
    stage("Post") {
      archiveArtifacts 'trusted-firmware-m/build/bin/**'
      archiveArtifacts 'trusted-firmware-m/build/install/interface/**'
      def upstreamProject = getUpstreamJob()[0].upstreamProject
      if (upstreamProject == "tf-m-build-and-test") {
        archiveArtifacts 'trusted-firmware-m/build/generated/**'
      }
      if (env.SQUAD_CONFIGURATIONS != ""){
        //Creating a folder to store memory footprint artifacts and launching the memory footprint script.
        sh "mkdir tf-m-ci-scripts/Memory_footprint/"
        withCredentials([string(credentialsId: 'QA_REPORTS_TOKEN', variable: 'TOKEN')]) {
          sh(script: "python3 tf-m-ci-scripts/memory_footprint.py ${env.WORKSPACE}/trusted-firmware-m/ ${env.CONFIG_NAME} \'${env.SQUAD_CONFIGURATIONS}\' ${TOKEN}", returnStdout: true)
        }
        if (fileExists('tf-m-ci-scripts/Memory_footprint/filesize.json')) {
          archiveArtifacts 'tf-m-ci-scripts/Memory_footprint/filesize.json'
        }
      }
    }
  } catch (Exception e) {
    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()
  }
}
