#!/usr/bin/env groovy
//-------------------------------------------------------------------------------
// Copyright (c) 2020-2021, 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)
    build(job: job_name, parameters: params)
  }
}

def status = 1

timestamps {
  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.")
    }
  }
}
