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

timestamps {
  node("docker-amd64-tf-m-bionic") {
    stage("Init") {
      cleanWs()
      dir("tf-m-ci-scripts") {
        checkout([$class: 'GitSCM', branches: [[name: '$CI_SCRIPTS_BRANCH']], userRemoteConfigs: [[credentialsId: 'GIT_SSH_KEY', url: '$CI_SCRIPTS_REPO']]])
        // Clone TF-M repositories so share folder can be reused by downstream jobs
        sh "./clone.sh"
      }
    }
    try {
      verify = 1
      stage("Build") {
        sh "tf-m-ci-scripts/build-docs.sh"
      }
      stage("Post") {
        archiveArtifacts 'trusted-firmware-m/build/docs/**'
      }
    } catch (Exception e) {
      manager.buildFailure()
      verify = -1
    } finally {
      g = new Gerrit()
      g.verifyStatusInWorkspace(verify, "$JOB_NAME", 'build')
      def buildStatus = (verify == 1) ? 'Successful' : 'Failed'
      //g.commentInWorkspace("Build docs ${buildStatus}: ${env.RUN_DISPLAY_URL}")
      cleanWs()
    }
  }
  node("master") {
    if (env.JOB_NAME.equals("tf-m-build-docs-nightly")) {
      sh """
         cp -a /var/jenkins_home/jobs/$JOB_NAME/builds/$BUILD_NUMBER/archive/trusted-firmware-m/build/docs/reference_manual /var/jenkins_home/docs/
         cp -a /var/jenkins_home/jobs/$JOB_NAME/builds/$BUILD_NUMBER/archive/trusted-firmware-m/build/docs/user_guide /var/jenkins_home/docs/
         """
    }
  }
}
