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

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

def nodeLabel = "docker-amd64-bionic"
if (env.COMPILER == "ARMCLANG") {
  nodeLabel = "docker-amd64-bionic-armclang"
}

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") {
      git url: '$CI_SCRIPTS_REPO', branch: '$CI_SCRIPTS_BRANCH', credentialsId: 'GIT_SSH_KEY'
    }
    dir("mbed-crypto") {
      checkout(
        changelog: false,
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: 'FETCH_HEAD']],
          userRemoteConfigs: [[
            refspec: 'refs/tags/$MBEDCRYPTO_VERSION',
            url: params.MBEDCRYPTO_URL
          ]]
        ]
      )
    }
    dir("mcuboot") {
      checkout(
        changelog: false,
        poll: false,
        scm: [
          $class: 'GitSCM',
          branches: [[name: 'FETCH_HEAD']],
          userRemoteConfigs: [[
            refspec: 'refs/tags/$MCUBOOT_VERSION',
            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") {
      tee("build.log") {
        sh "tf-m-ci-scripts/run-build.sh"
      }
    }
    stage("Post") {
      archiveArtifacts 'trusted-firmware-m/build/install/**,build.log'
    }
  } 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()
  }
}
