Skip to content
Snippets Groups Projects
helper.groovy 31.82 KiB
/***********************************************************************************************************************

  steps is used from buildTestDeploy

***********************************************************************************************************************/

ArrayList<String> BUILD_PLAN = []
String BRANCH_UNDER_TEST = ""
def DEPENDENCY_BUILD_NUMBERS = [:]

/**********************************************************************************************************************/

def setParameters() {
  properties([
    parameters([
      string(name: 'BRANCH_UNDER_TEST', description: 'LEAVE AT DEFAULT! Jenkins project name for the branch to be tested', defaultValue: JOB_NAME),
      string(name: 'BUILD_PLAN', description: 'LEAVE AT DEFAULT! JSON object with list of downstream projects to build', defaultValue: '[]'),
      string(name: 'DEPENDENCY_BUILD_NUMBERS', description: 'LEAVE AT DEFAULT! JSON object with map of dependency build numbers to use', defaultValue: '{}'),
    ])
  ])

  BRANCH_UNDER_TEST = params.BRANCH_UNDER_TEST
  BUILD_PLAN = readJSON(text: params.BUILD_PLAN)  // new groovy.json.JsonSlurper().parseText(params.BUILD_PLAN)
  DEPENDENCY_BUILD_NUMBERS = readJSON(text: params.DEPENDENCY_BUILD_NUMBERS) // new groovy.json.JsonSlurper().parseText(params.DEPENDENCY_BUILD_NUMBERS)
}

/**********************************************************************************************************************/

// helper function, convert dependency name as listed in the .jenkinsfile into a Jenkins project name
def dependencyToJenkinsProject(String dependency, boolean forceBranches = false) {
  if(dependency.contains('@')) {
    // get rid of build number if specified
    dependency = dependency.split('@')[0]
  }
  def dependencyProjectName = dependency
  def (dependencyFolder, dependencyProject) = dependencyProjectName.split('/',2)
  dependencyProject = dependencyProject.replace('/','%2F')
  dependency = "${dependencyFolder}/${dependencyProject}"

  def jobType = env.JOB_TYPE
  jobType = jobType?.minus("-testing")
  jobType = jobType?.minus("-analysis")
  
  branch = "master"

  def dependencyUnderTest = jekinsProjectToDependency(BRANCH_UNDER_TEST)

  // Note: BUILD_PLAN.indexOf(dependency) does not deliver same result as BUILD_PLAN.findIndexOf{ it == dependency }!
  if(env.JOB_TYPE.startsWith('branches')) {
    if( forceBranches || (BUILD_PLAN.findIndexOf{ it == dependency } >= 0 && BRANCH_UNDER_TEST != JOB_NAME) ||
        dependencyUnderTest == dependency                                                                      ) {
      def (butFolder, butType, butProject, butBranch) = BRANCH_UNDER_TEST.split('/')
      if(butFolder == dependencyFolder && butType == jobType && butProject == dependencyProject) {
        branch = butBranch
        echo("Dependency ${dependency} matches branch under test.")
      }
    }
    else {
      jobType = "fasttrack"
    }
  }
  
  dependencyProjectName = "${dependencyFolder}/${jobType}/${dependencyProject}/${branch}"
  return dependencyProjectName
}


/**********************************************************************************************************************/

// helper function, convert Jenkins project name into name dependency (as listed e.g. in the .jenkinsfile)