blob: f2346ac75763433b248332ddfad757a3a7fdaee9 [file] [log] [blame]
#!/usr/bin/env groovy
/*******************************************************************************
* Copyright (C) 2020 EGit Committers and others.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*******************************************************************************/
/**
* EGit product build for a given branch, either determined by the gerrit trigger's
* $GERRIT_BRANCH or the {@code cfg.defaultBranch}.
*
* @param lib
* library to use
* @param tooling
* to use
* @param cfg
* configuration
* @return
*/
def call(def lib, def tooling, Map cfg = [:]) {
Map config = [timeOut : 60] << cfg
// Check parameters
lib.configCheck(config, [
timeOut : 'Job timeout in minutes, default 60',
repoPath : 'Full path to the repository to build, for instance "egit/egit".',
// defaultBranch is optional: branch to build if $GERRIT_BRANCH is not set
upstreamRepoPath: 'Path to the upstream repo, for instance the first "jgit" for "jgit/jgit".',
upstreamRepo: 'Upstream repository name, for instance the second "jgit" for "jgit/jgit".',
// upstreamVersion is optional; auto-determined if not set
p2project: 'Project containing the built update site at target/repository.',
// p2zip is optional: p2 repo zip to also copy during deployment,
publishRoot: 'Folder on p2 publish server under which the repo should be placed. The appropriate subfolder is determined automatically.',
// downstreamJob is optional: job to trigger after deployment
])
uiNode(config.timeOut) {
try {
if (!env.GERRIT_BRANCH) {
env.GERRIT_BRANCH = config.defaultBranch
}
if (config.jdk) {
def jdk = tool name: "${config.jdk}", type: 'jdk'
env.JAVA_HOME = "${jdk}"
}
stage('Checkout') {
sh '$JAVA_HOME/bin/java -version'
tooling.cloneAndCheckout(config.repoPath, env.GERRIT_BRANCH, '+refs/heads/*:refs/remotes/origin/*');
}
def ownVersion = lib.getOwnVersion('pom.xml')
def publishFolder = "/${config.publishRoot}/" + lib.getPublishFolder(ownVersion)
def publishDirectory = '/home/data/httpd/download.eclipse.org' + publishFolder
def upstreamVersion = config.upstreamVersion
if (!upstreamVersion) {
upstreamVersion = lib.getUpstreamVersion(config.upstreamRepoPath, config.upstreamRepo, ownVersion)
}
def commonMvnArguments = [
'-Pstatic-checks,other-os,eclipse-sign',
lib.getMvnUpstreamRepo(config.upstreamRepo, upstreamVersion),
// Needed by tycho-eclipserun for the p2 mirrors URL
"-DPUBLISH_FOLDER=${publishFolder}"
]
stage('Build') {
def arguments = [
'clean',
'install'
]
arguments.addAll(commonMvnArguments)
tooling.maven(arguments)
}
stage('Deploy') {
// Nexus
def arguments = [
'deploy',
'-DskipTests=true',
'-Dskip-ui-tests=true'
]
arguments.addAll(commonMvnArguments)
tooling.maven(arguments)
// Update site
def extraSource = null
if (config.p2zip && ownVersion.endsWith('-r')) {
// Must be a stable build...
extraSource = config.p2project + '/target/' + config.p2zip
}
tooling.publishUpdateSite(
'genie.egit',
'projects-storage.eclipse.org-bot-ssh',
config.p2project + '/target/repository',
publishDirectory,
extraSource)
}
if (config.downstreamJob) {
build(
job: config.downstreamJob,
propagate: false,
wait: false,
parameters: [
[$class: 'StringParameterValue', name: 'EGIT_VERSION', value: ownVersion]
])
}
}
finally { // replacement for post actions of Jenkins 1.x
stage('Results') {
tooling.reporting([
config.p2project + '/target/repository/**'
])
}
tooling.sendMail('egit-build@eclipse.org')
}
}
}