Make CI removes Presubmit-Ready votes
So it can be retriggered simply by adding that votes back.
Fixes #92.
Change-Id: I681eea3e720910a2ac02bfe8d26da3cc42817ae2
diff --git a/jenkins/gerrit-verifier.groovy b/jenkins/gerrit-verifier.groovy
index b4b9c8d..ff07586 100644
--- a/jenkins/gerrit-verifier.groovy
+++ b/jenkins/gerrit-verifier.groovy
@@ -26,7 +26,7 @@
def jobs = JenkinsUtils.jobsWithDescription("CR", "Gerrit project: " + change.project + ".")
if (jobs != null && !jobs.empty) {
- gerrit.addReviewer(change.number)
+ gerrit.startReview(change.number)
for(job in jobs) {
build job: job, propagate: false, wait: false, parameters: [
[$class: 'StringParameterValue', name: 'REFSPEC', value: refspec],
@@ -39,7 +39,7 @@
// Run the global presubmit job for a given change
def globalPresubmit(gerrit, change) {
def refspec = "+" + change.ref + ":" + change.ref.replaceAll('ref/', 'ref/remotes/origin/')
- gerrit.addReviewer(change.number)
+ gerrit.startReview(change.number)
build job: "CR/global-verifier", propagate: false, wait: false, parameters: [
[$class: 'StringParameterValue', name: 'REFSPEC', value: refspec],
[$class: 'StringParameterValue', name: 'BRANCH', value: change.sha1],
diff --git a/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy b/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy
index 8b78d71..390e33b 100644
--- a/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy
+++ b/jenkins/lib/src/build/bazel/ci/GerritUtils.groovy
@@ -162,19 +162,46 @@
if (maxChanges > 0) {
url += "&n=${maxChanges}"
}
- url += "&q=${java.net.URLEncoder.encode(query)}"
+ url += "&q=${java.net.URLEncoder.encode(query.toString())}"
def changes = new URL(url).getText().substring(5)
def jsonSlurper = new JsonSlurper()
return jsonSlurper.parseText(changes)
}
+ @NonCPS
+ def removeVote(changeNumber, label, reviewer) {
+ def rev = java.net.URLEncoder.encode(reviewer.toString())
+ this.post("a/changes/${changeNumber}/reviewers/${rev}/votes/${label}/delete",
+ ["notify": "NONE"])
+ }
+
+ @NonCPS
+ def removeVotes(changeNumber, label) {
+ def changeLabels = query(changeNumber)[0].labels
+ if (label in changeLabels) {
+ for (reviewer in changeLabels[label].all) {
+ if (reviewer.value > 0) {
+ this.removeVote(changeNumber, label, reviewer._account_id)
+ }
+ }
+ }
+ }
+
+ // Mark a code review as review started
+ @NonCPS
+ def startReview(changeNumber) {
+ this.addReviewer(changeNumber)
+ this.removeVotes(changeNumber, "Presubmit-Ready")
+ this.removeVote(changeNumber, "Verified", this.reviewer)
+ }
+
// Returns the list of verified changes not reviewed by the Gerrit reviewer and matching
// the given filter. The result is a list of dictionnary of matching change, containing the
// sha1 of the last patch, the number of this patch, the number of the change, the reference
// of the patch and the project of the change.
@NonCPS
def getVerifiedChanges(filter = "", verifiedLevel = 1, maxChanges = 0) {
- def changesJson = query("status:open -reviewer:${reviewerEmail} ${filter}",
+ def changesJson = query("status:open ${filter}",
maxChanges).findAll { change ->
def verified = change.labels.get("Presubmit-Ready", [])
return verified.all.any({ it.value == verifiedLevel })
diff --git a/jenkins/lib/vars/gerritReview.groovy b/jenkins/lib/vars/gerritReview.groovy
index ff2142a..47c0753 100644
--- a/jenkins/lib/vars/gerritReview.groovy
+++ b/jenkins/lib/vars/gerritReview.groovy
@@ -26,7 +26,7 @@
this.gerritBuild = currentBuild
stage("Start Gerrit review") {
echo "Reviewing change ${url} (${branch})"
- gerrit.addReviewer(changeNum)
+ gerrit.startReview(changeNum)
gerrit.comment(changeNum, branch,
"Starting build at ${JenkinsUtils.getBlueOceanUrl(currentBuild)}")
}