Merge "Add ability to disable cloning of release metadata repository"
diff --git a/src/com/mirantis/mk/ReleaseWorkflow.groovy b/src/com/mirantis/mk/ReleaseWorkflow.groovy
index a81f0d1..efc588b 100644
--- a/src/com/mirantis/mk/ReleaseWorkflow.groovy
+++ b/src/com/mirantis/mk/ReleaseWorkflow.groovy
@@ -1,8 +1,34 @@
 package com.mirantis.mk
 /**
- * ReleaseWorkflow functions
+ * Checkout release metadata repo with clone or without, if cloneRepo parameter is set
  *
+ * @param params map with expected parameters:
+ *    - metadataCredentialsId
+ *    - metadataGitRepoUrl
+ *    - metadataGitRepoBranch
+ *    - repoDir
+ *    - cloneRepo
  */
+def checkoutReleaseMetadataRepo(Map params = [:]) {
+    def git = new com.mirantis.mk.Git()
+    Boolean cloneRepo       = params.get('cloneRepo', true)
+    String gitCredentialsId = params.get('metadataCredentialsId', 'mcp-ci-gerrit')
+    String gitUrl           = params.get('metadataGitRepoUrl', "ssh://${gitCredentialsId}@gerrit.mcp.mirantis.net:29418/mcp/release-metadata")
+    String gitBranch        = params.get('metadataGitRepoBranch', 'master')
+    String repoDir          = params.get('repoDir', 'release-metadata')
+    if (cloneRepo){
+        stage('Cleanup repo dir') {
+            dir(repoDir) {
+                deleteDir()
+            }
+        }
+        stage('Cloning release-metadata repository') {
+            git.checkoutGitRepository(repoDir, gitUrl, gitBranch, gitCredentialsId, true, 10, 0)
+        }
+    } else {
+        git.changeGitBranch(repoDir, gitBranch)
+    }
+}
 
 /**
  * Get release metadata value for given key
@@ -24,24 +50,31 @@
     String gitBranch        = params.get('metadataGitRepoBranch', 'master')
     String repoDir          = params.get('repoDir', 'release-metadata')
     String outputFormat     = params.get('outputFormat', 'json')
+    Boolean cloneRepo       = params.get('cloneRepo', true)
 
     // Libs
     def git = new com.mirantis.mk.Git()
+    def common = new com.mirantis.mk.Common()
 
     String opts = ''
     if (outputFormat && !outputFormat.isEmpty()) {
         opts += " --${outputFormat}"
     }
-    // TODO cache it somehow to not checkout it all the time
-    git.checkoutGitRepository(repoDir, gitUrl, gitBranch, gitCredentialsId, true, 10, 0)
+
+    checkoutReleaseMetadataRepo(params)
+
     docker.image(toxDockerImage).inside {
         result = sh(script: "cd ${repoDir} && tox -qq -e metadata -- ${opts} get --key ${key}", returnStdout: true).trim()
     }
+    common.infoMsg("""
+    Release metadata key ${key} has value:
+        ${result}
+    """)
     return result
 }
 
 /**
- * Update release metadata after image build
+ * Update release metadata value and upload CR to release metadata repository
  *
  * @param key metadata key
  * @param value metadata value
@@ -54,6 +87,7 @@
     metadataGerritBranch = params['metadataGerritBranch'] ?: "master"
     comment = params['comment'] ?: ""
     crTopic = params['crTopic'] ?: ""
+    Boolean cloneRepo = params.get('cloneRepo', true)
     def common = new com.mirantis.mk.Common()
     def python = new com.mirantis.mk.Python()
     def gerrit = new com.mirantis.mk.Gerrit()
@@ -67,7 +101,7 @@
     def gerritPort = metadataRepoUrl.tokenize(':')[-1].tokenize('/')[0]
     def workspace = common.getWorkspace()
     def venvDir = "${workspace}/gitreview-venv"
-    def repoDir = "${venvDir}/repo"
+    def repoDir = params.get('repoDir', "${venvDir}/repo")
     def metadataDir = "${repoDir}/metadata"
     def ChangeId
     def commitMessage
@@ -75,21 +109,19 @@
     stage("Installing virtualenv") {
         python.setupVirtualenv(venvDir, 'python3', ['git-review', 'PyYaml'])
     }
-    stage('Cleanup repo dir') {
-        dir(repoDir) {
-            deleteDir()
-        }
+    checkoutReleaseMetadataRepo(['metadataCredentialsId': credentialsID,
+                                 'metadataGitRepoBranch': metadataGerritBranch,
+                                 'metadataGitRepoUrl': metadataRepoUrl,
+                                 'repoDir': repoDir,
+                                 'cloneRepo': cloneRepo])
+    dir(repoDir) {
+        gitRemote = sh(
+            script:
+                'git remote -v | head -n1 | cut -f1',
+                returnStdout: true,
+        ).trim()
     }
-    stage('Cloning release-metadata repository') {
-        git.checkoutGitRepository(repoDir, metadataRepoUrl, metadataGerritBranch, credentialsID, true, 10, 0)
-        dir(repoDir) {
-            gitRemote = sh(
-                    script:
-                            'git remote -v | head -n1 | cut -f1',
-                    returnStdout: true,
-            ).trim()
-        }
-    }
+
     stage('Creating CR') {
         def gerritAuth = ['PORT': gerritPort, 'USER': gerritUser, 'HOST': gerritHost]
         def changeParams = ['owner': gerritUser, 'status': 'open', 'project': metadataProject, 'branch': metadataGerritBranch, 'topic': crTopic]
@@ -122,4 +154,4 @@
         //post change
         gerrit.postGerritReview(credentialsID, venvDir, repoDir, changeAuthorName, changeAuthorEmail, gitRemote, crTopic, metadataGerritBranch)
     }
-}
+}
\ No newline at end of file