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

@Library('trustedfirmware') _


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_REPO', value: env.CI_SCRIPTS_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") {
        tfgit.checkout_ci_scripts()
        // 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.")
    }
  }
}
