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


def trigger(job_name) {
  return {
    def params = []
    params += string(name: 'GERRIT_HOST', value: env.GERRIT_HOST ?: '')
    params += string(name: 'GERRIT_BRANCH', value: env.GERRIT_BRANCH ?: '')
    params += string(name: 'GERRIT_REFSPEC', value: env.GERRIT_REFSPEC ?: '')
    params += string(name: 'GERRIT_CHANGE_NUMBER', value: env.GERRIT_CHANGE_NUMBER ?: '')
    params += string(name: 'GERRIT_PATCHSET_REVISION', value: env.GERRIT_PATCHSET_REVISION ?: '')
    params += string(name: 'MBEDTLS_VERSION', value: env.MBEDTLS_VERSION)
    params += string(name: 'CODE_REPO', value: env.CODE_REPO)
    params += string(name: 'CI_SCRIPTS_BRANCH', value: env.CI_SCRIPTS_BRANCH)
    params += string(name: 'MCUBOOT_REFSPEC', value: env.MCUBOOT_REFSPEC)
    params += string(name: 'MCUBOOT_URL', value: env.MCUBOOT_URL)
    params += string(name: 'MBEDTLS_VERSION', value: env.MBEDTLS_VERSION)
    params += string(name: 'MBEDTLS_URL', value: env.MBEDTLS_URL)
    params += string(name: 'TFM_TESTS_REFSPEC', value: env.TFM_TESTS_REFSPEC)
    params += string(name: 'TFM_TESTS_URL', value: env.TFM_TESTS_URL)
    params += string(name: 'PSA_ARCH_TESTS_VERSION', value: env.PSA_ARCH_TESTS_VERSION)
    params += string(name: 'PSA_ARCH_TESTS_URL', value: env.PSA_ARCH_TESTS_URL)
    params += string(name: 'SHARE_FOLDER', value: env.SHARE_FOLDER)
    build(job: job_name, parameters: params)
  }
}

def status = 1

timestamps {
  node("docker-amd64-tf-m-jammy") {
    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"
      }
    }
  }
  stage("Static Checks") {
    def checks = [:]
    checks["cppcheck"] = trigger("tf-m-cppcheck")
    checks["checkpatch"] = trigger("tf-m-checkpatch")
    checks["static-checks"] = trigger("tf-m-static-checks")
    try {
      parallel(checks)
    } catch (Exception e) {
      status = -1
      echo "Failed static checks, continuing with build."
    }
  }
  stage("Trigger Build") {
    parallel(["build":trigger("tf-m-build-and-test")])
    // If previously failed at static checks, mark this as a failure
    if (status < 0 ) {
      error("Failing due to failed static checks.")
    }
  }
}
