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