add ReleaseWorkflow
Related-prod: PROD-31339
Change-Id: If56ed69fc35db028a8c19b2a9fac404fb44b7e6c
diff --git a/src/com/mirantis/mk/ReleaseWorkflow.groovy b/src/com/mirantis/mk/ReleaseWorkflow.groovy
new file mode 100644
index 0000000..7baeb22
--- /dev/null
+++ b/src/com/mirantis/mk/ReleaseWorkflow.groovy
@@ -0,0 +1,97 @@
+package com.mirantis.mk
+
+/**
+ * ReleaseWorkflow functions
+ *
+ */
+
+/**
+ * Update release metadata after image build
+ */
+
+def updateReleaseMetadata(){
+ def python = new com.mirantis.mk.Python()
+ def gerrit = new com.mirantis.mk.Gerrit()
+ def git = new com.mirantis.mk.Git()
+ def changeAuthorName = "MCP-CI"
+ def changeAuthorEmail = "mcp-ci-jenkins@ci.mcp.mirantis.net"
+ def cred = common.getCredentials(env["CREDENTIALS_ID"], 'key')
+ String gerritUser = cred.username
+ def gerritHost = env["METADATA_REPO_URL.tokenize"]('@')[-1].tokenize(':')[0]
+ def metadataProject = env["METADATA_REPO_URL"].tokenize('/')[-2..-1].join('/')
+ def gerritPort = env["METADATA_REPO_URL"].tokenize(':')[-1].tokenize('/')[0]
+ def workspace = common.getWorkspace()
+ def venvDir = "${workspace}/gitreview-venv"
+ def repoDir = "${venvDir}/repo"
+ def metadataDir = "${repoDir}/metadata"
+ def imageChangeId
+ def commitMessage
+ def gitRemote
+ if (env["RELEASE_METADATA_CR"].toBoolean()) {
+ stage("Installing virtualenv") {
+ python.setupVirtualenv(venvDir, 'python3', ['git-review', 'PyYaml'])
+ }
+
+ stage('Cleanup repo dir') {
+ dir(repoDir) {
+ deleteDir()
+ }
+ }
+ stage('Cloning release-metadata repository') {
+ git.checkoutGitRepository(repoDir, METADATA_REPO_URL, METADATA_GERRIT_BRANCH, CREDENTIALS_ID, true, 10, 0)
+ dir(repoDir) {
+ gitRemote = sh(
+ script:
+ 'git remote -v | head -n1 | cut -f1',
+ returnStdout: true,
+ ).trim()
+ }
+ }
+ stage('Creating CRs') {
+ for (openstackRelease in resultBuiltImages.keySet()) {
+ def crTopic = "nightly_update_images_" + openstackRelease
+ //Check if CR already exist
+
+ def gerritAuth = ['PORT': gerritPort, 'USER': gerritUser, 'HOST': gerritHost]
+ def changeParams = ['owner': gerritUser, 'status': 'open', 'project': metadataProject, 'branch': env["METADATA_GERRIT_BRANCH"], 'topic': crTopic]
+ def gerritChange = gerrit.findGerritChange(env["CREDENTIALS_ID"], gerritAuth, changeParams)
+
+ git.changeGitBranch(repoDir, env["METADATA_GERRIT_BRANCH"])
+ if (gerritChange) {
+ def jsonChange = readJSON text: gerritChange
+ changeNum = jsonChange['number']
+ imageChangeId = 'Change-Id: '
+ imageChangeId += jsonChange['id']
+ //get existent change from gerrit
+ gerrit.getGerritChangeByNum(env["CREDENTIALS_ID"], venvDir, repoDir, gitRemote, changeNum)
+ } else {
+ imageChangeId = ''
+ git.createGitBranch(repoDir, crTopic)
+ }
+
+ for (component in resultBuiltImages[openstackRelease].keySet()) {
+ resultBuiltImages[openstackRelease][component].each {
+ //runReleaseMetadataApp(venvDir, repoDir, metadataDir, "update", "images:openstack:${openstackRelease}:${component}:${it.key}", "${it.value}")
+ cmdText = "python ${repoDir}/utils/app.py --path ${metadataDir} update --key images:openstack:${openstackRelease}:${component}:${it.key} --value ${it.value}"
+ python.runVirtualenvCommand(venvDir, cmdText)
+ }
+ }
+
+ commitMessage =
+ """[oscore] Auto-update ${metadataProject}
+
+ |${imageChangeId}
+ """.stripMargin()
+ //commit change
+ if (gerritChange) {
+ git.commitGitChanges(repoDir, commitMessage, changeAuthorEmail, changeAuthorName, false, true)
+ } else {
+ git.commitGitChanges(repoDir, commitMessage, changeAuthorEmail, changeAuthorName, false)
+ }
+ //post change
+ gerrit.postGerritReview(CREDENTIALS_ID, venvDir, repoDir, changeAuthorName, changeAuthorEmail, gitRemote, crTopic, METADATA_GERRIT_BRANCH)
+
+ }
+ }
+ }
+}
\ No newline at end of file