#!/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
          ]]
        ]
      )
    }
    sh """
    # Host https://github.com/Arm-software/CMSIS_5/releases/download/5.5.0/ARM.CMSIS.5.5.0.pack
    # under \$JENKINS_HOME/userContent
    set +e
    wget -O cmsis.pack -q \${JENKINS_URL}/userContent/ARM.CMSIS.${CMSIS_VERSION}.pack
    if [ "\$?" != "0" ] ; then
    set -e
    wget -O cmsis.pack -q https://github.com/Arm-software/CMSIS_5/releases/download/${CMSIS_VERSION}/ARM.CMSIS.${CMSIS_VERSION}.pack
    fi
    set -e
    unzip -o -d CMSIS_5 cmsis.pack
    """
    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()
  }
}
