blob: 230bdaa2cb2fe34db70eb3870b3bab14b22d9dfb [file] [log] [blame]
// Copyright (C) 2017 The Bazel Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
import build.bazel.ci.GerritUtils
import build.bazel.ci.JenkinsUtils
/**
* Define a step "gerritReview" that wrap a build to be a "Gerrit review": the change
* will be commented according to the result of the build and the verified bit will be
* updated.
* except if that argument is empty (in which case the body is executed directly).
*/
def call(String server, String cookiesFile, String reviewer, changeNum, branch, Closure body) {
GerritUtils gerrit = new GerritUtils(server, cookiesFile, reviewer)
def url = gerrit.url(changeNum)
this.gerritBuild = currentBuild
stage("Start Gerrit review") {
echo "Reviewing change ${url} (${branch})"
gerrit.startReview(changeNum)
gerrit.comment(changeNum, branch,
"Starting build at ${JenkinsUtils.getBlueOceanUrl(currentBuild)}")
}
def config = [gerritBuild: currentBuild, gerrit: gerrit, reportUrl: null]
def result = null
try {
body.delegate = config
body()
} catch(Exception ex) {
result = "ERROR"
throw ex
} finally {
if (result == null) {
result = config.gerritBuild.result == null ? "SUCCESS" : config.gerritBuild.result
}
def reportUrl = config.reportUrl ? config.reportUrl : JenkinsUtils.getBlueOceanUrl(config.gerritBuild)
def verified = result == "SUCCESS" ? "+" : "-"
echo "Setting ${verified}Verified to change ${url} after build returned ${result}"
gerrit.review(changeNum, branch, result == "SUCCESS" ? 1 : -1,
"Build ${reportUrl} finished with status ${result}")
}
}