Add function for uploading change to review
Change-Id: Ice2ced5a347110f502a6ca9bf4a03d7e288d9a4b
Related-Prod: PROD-00000
diff --git a/src/com/mirantis/mk/Gerrit.groovy b/src/com/mirantis/mk/Gerrit.groovy
index b65432d..954600b 100644
--- a/src/com/mirantis/mk/Gerrit.groovy
+++ b/src/com/mirantis/mk/Gerrit.groovy
@@ -383,3 +383,78 @@
}
}
}
+
+/**
+ * Prepare and upload Gerrit commit from prepared repo
+ * @param LinkedHashMap params dict with parameters
+ * venvDir - Absolute path to virtualenv dir
+ * gerritCredentials - credentialsId
+ * gerritHost - gerrit host
+ * gerritPort - gerrit port
+ * repoDir - path to repo dir
+ * repoProject - repo name
+ * repoBranch - repo branch
+ * changeCommitComment - comment for commit message
+ * changeAuthorName - change author
+ * changeAuthorEmail - author email
+ * changeTopic - change topic
+ * gitRemote - git remote
+ * returnChangeInfo - whether to return info about uploaded change
+ *
+ * @return map with change info if returnChangeInfo set to true
+*/
+def prepareGerritAutoCommit(LinkedHashMap params) {
+ def common = new com.mirantis.mk.Common()
+ def git = new com.mirantis.mk.Git()
+ String venvDir = params.get('venvDir')
+ String gerritCredentials = params.get('gerritCredentials')
+ String gerritHost = params.get('gerritHost', 'gerrit.mcp.mirantis.net')
+ String gerritPort = params.get('gerritPort', '29418')
+ String gerritUser = common.getCredentialsById(gerritCredentials, 'sshKey').username
+ String repoDir = params.get('repoDir')
+ String repoProject = params.get('repoProject')
+ String repoBranch = params.get('repoBranch', 'master')
+ String changeCommitComment = params.get('changeCommitComment')
+ String changeAuthorName = params.get('changeAuthorName', 'MCP-CI')
+ String changeAuthorEmail = params.get('changeAuthorEmail', 'mcp-ci-jenkins@ci.mcp.mirantis.net')
+ String changeTopic = params.get('changeTopic', 'auto_ci')
+ Boolean returnChangeInfo = params.get('returnChangeInfo', false)
+ String gitRemote = params.get('gitRemote', '')
+ if (! gitRemote) {
+ dir(repoDir) {
+ gitRemote = sh(
+ script:
+ 'git remote -v | head -n1 | cut -f1',
+ returnStdout: true,
+ ).trim()
+ }
+ }
+ def gerritAuth = ['PORT': gerritPort, 'USER': gerritUser, 'HOST': gerritHost ]
+ def changeParams = ['owner': gerritUser, 'status': 'open', 'project': repoProject, 'branch': repoBranch, 'topic': changeTopic]
+ // find if there is old commit present
+ def gerritChange = findGerritChange(gerritCredentials, gerritAuth, changeParams)
+ def changeId = ''
+ if (gerritChange) {
+ try {
+ def jsonChange = readJSON text: gerritChange
+ changeId = "Change-Id: ${jsonChange['id']}".toString()
+ } catch (Exception error) {
+ common.errorMsg("Can't parse ouput from Gerrit. Check that user ${changeAuthorName} does not have several \
+ open commits to ${repoProject} repo and ${repoBranch} branch with topic ${changeTopic}")
+ throw error
+ }
+ }
+ def commitMessage =
+ """${changeCommitComment}
+
+ |${changeId}
+ """.stripMargin()
+ git.commitGitChanges(repoDir, commitMessage, changeAuthorEmail, changeAuthorName, false)
+ //post change
+ postGerritReview(gerritCredentials, venvDir, repoDir, changeAuthorName, changeAuthorEmail, gitRemote, changeTopic, repoBranch)
+ if (returnChangeInfo) {
+ gerritChange = findGerritChange(gerritCredentials, gerritAuth, changeParams)
+ jsonChange = readJSON text: gerritChange
+ return getGerritChange(gerritUser, gerritHost, jsonChange['number'], gerritCredentials, true)
+ }
+}