#!/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

node("docker-amd64-bionic") {
  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("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
          ]]
        ]
      )
    }
  }
  try {
    verify = 1
    stage("Build") {
      sh "tf-m-ci-scripts/build-docs.sh"
    }
    stage("Post") {
      archiveArtifacts 'trusted-firmware-m/build/install/**'
      archiveArtifacts 'trusted-firmware-m/build/docs/**'
    }
  } catch (Exception e) {
    manager.buildFailure()
    verify = -1
  } finally {
    g = new Gerrit()
    g.verifyStatusInWorkspace(verify, 'tf-m-build-docs', 'build')
    def buildStatus = (verify == 1) ? 'Successful' : 'Failed'
    //g.commentInWorkspace("Build docs ${buildStatus}: ${env.RUN_DISPLAY_URL}")
    cleanWs()
  }
}
