blob: 7da212d037e6ba6e625a9d3e9b1b2bb3a626bde2 [file] [log] [blame]
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +02001package com.mirantis.mk
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +02002/**
Mykyta Karpina1029302019-07-25 18:16:31 +03003 * Checkout release metadata repo with clone or without, if cloneRepo parameter is set
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +02004 *
Mykyta Karpina1029302019-07-25 18:16:31 +03005 * @param params map with expected parameters:
6 * - metadataCredentialsId
7 * - metadataGitRepoUrl
8 * - metadataGitRepoBranch
9 * - repoDir
10 * - cloneRepo
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +020011 */
Mykyta Karpina1029302019-07-25 18:16:31 +030012def checkoutReleaseMetadataRepo(Map params = [:]) {
13 def git = new com.mirantis.mk.Git()
14 Boolean cloneRepo = params.get('cloneRepo', true)
15 String gitCredentialsId = params.get('metadataCredentialsId', 'mcp-ci-gerrit')
16 String gitUrl = params.get('metadataGitRepoUrl', "ssh://${gitCredentialsId}@gerrit.mcp.mirantis.net:29418/mcp/release-metadata")
17 String gitBranch = params.get('metadataGitRepoBranch', 'master')
Alexandr Lovtsovcefc3d12019-07-29 14:48:33 +030018 String gitRef = params.get('metadataGitRepoRef', '')
Mykyta Karpina1029302019-07-25 18:16:31 +030019 String repoDir = params.get('repoDir', 'release-metadata')
Alexandr Lovtsovcefc3d12019-07-29 14:48:33 +030020 if (cloneRepo) {
Mykyta Karpina1029302019-07-25 18:16:31 +030021 stage('Cleanup repo dir') {
22 dir(repoDir) {
23 deleteDir()
24 }
25 }
26 stage('Cloning release-metadata repository') {
Alexandr Lovtsovcefc3d12019-07-29 14:48:33 +030027 git.checkoutGitRepository(repoDir, gitUrl, gitBranch, gitCredentialsId, true, 10, 0, gitRef)
Mykyta Karpina1029302019-07-25 18:16:31 +030028 }
29 } else {
Alexandr Lovtsovcefc3d12019-07-29 14:48:33 +030030 git.changeGitBranch(repoDir, gitRef ?: gitBranch)
Mykyta Karpina1029302019-07-25 18:16:31 +030031 }
32}
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +020033
34/**
Alexandr Lovtsov3121fc42019-07-19 19:20:39 +050035 * Get release metadata value for given key
36 *
37 * @param key metadata key
38 * @param params map with expected parameters:
39 * - toxDockerImage
40 * - metadataCredentialsId
41 * - metadataGitRepoUrl
42 * - metadataGitRepoBranch
43 * - repoDir
44 */
45def getReleaseMetadataValue(String key, Map params = [:]) {
46 String result
47 // Get params
48 String toxDockerImage = params.get('toxDockerImage', 'docker-prod-virtual.docker.mirantis.net/mirantis/external/tox')
49 String gitCredentialsId = params.get('metadataCredentialsId', 'mcp-ci-gerrit')
50 String gitUrl = params.get('metadataGitRepoUrl', "ssh://${gitCredentialsId}@gerrit.mcp.mirantis.net:29418/mcp/release-metadata")
51 String gitBranch = params.get('metadataGitRepoBranch', 'master')
52 String repoDir = params.get('repoDir', 'release-metadata')
53 String outputFormat = params.get('outputFormat', 'json')
Mykyta Karpina1029302019-07-25 18:16:31 +030054 Boolean cloneRepo = params.get('cloneRepo', true)
Alexandr Lovtsov3121fc42019-07-19 19:20:39 +050055
56 // Libs
57 def git = new com.mirantis.mk.Git()
Mykyta Karpina1029302019-07-25 18:16:31 +030058 def common = new com.mirantis.mk.Common()
Alexandr Lovtsov3121fc42019-07-19 19:20:39 +050059
60 String opts = ''
61 if (outputFormat && !outputFormat.isEmpty()) {
62 opts += " --${outputFormat}"
63 }
Mykyta Karpina1029302019-07-25 18:16:31 +030064
65 checkoutReleaseMetadataRepo(params)
66
Alexandr Lovtsov3121fc42019-07-19 19:20:39 +050067 docker.image(toxDockerImage).inside {
68 result = sh(script: "cd ${repoDir} && tox -qq -e metadata -- ${opts} get --key ${key}", returnStdout: true).trim()
69 }
Mykyta Karpina1029302019-07-25 18:16:31 +030070 common.infoMsg("""
71 Release metadata key ${key} has value:
72 ${result}
73 """)
Alexandr Lovtsov3121fc42019-07-19 19:20:39 +050074 return result
75}
76
77/**
Mykyta Karpina1029302019-07-25 18:16:31 +030078 * Update release metadata value and upload CR to release metadata repository
Ruslan Gustomiasovcef1bb42019-06-25 17:00:13 +020079 *
80 * @param key metadata key
81 * @param value metadata value
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +020082 * @param params string map with credentialsID, metadataRepoUrl, metadataGerritBranch and crTopic
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +020083 */
84
Alexandr Lovtsov35cdebc2019-07-01 21:32:03 +050085def updateReleaseMetadata(String key, String value, Map params) {
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +020086 credentialsID = params['credentialsID'] ?: "mcp-ci-gerrit"
Mykyta Karpin28457922019-07-05 15:14:58 +030087 metadataRepoUrl = params['metadataRepoUrl'] ?: "ssh://mcp-ci-gerrit@gerrit.mcp.mirantis.net:29418/mcp/release-metadata"
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +020088 metadataGerritBranch = params['metadataGerritBranch'] ?: "master"
Ruslan Gustomiasov2e9e3452019-06-27 14:29:31 +020089 comment = params['comment'] ?: ""
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +020090 crTopic = params['crTopic'] ?: ""
Mykyta Karpina1029302019-07-25 18:16:31 +030091 Boolean cloneRepo = params.get('cloneRepo', true)
Alexandr Lovtsov35cdebc2019-07-01 21:32:03 +050092 def common = new com.mirantis.mk.Common()
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +020093 def python = new com.mirantis.mk.Python()
94 def gerrit = new com.mirantis.mk.Gerrit()
95 def git = new com.mirantis.mk.Git()
96 def changeAuthorName = "MCP-CI"
97 def changeAuthorEmail = "mcp-ci-jenkins@ci.mcp.mirantis.net"
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +020098 def cred = common.getCredentials(credentialsID, 'key')
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +020099 String gerritUser = cred.username
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200100 def gerritHost = metadataRepoUrl.tokenize('@')[-1].tokenize(':')[0]
101 def metadataProject = metadataRepoUrl.tokenize('/')[-2..-1].join('/')
102 def gerritPort = metadataRepoUrl.tokenize(':')[-1].tokenize('/')[0]
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200103 def workspace = common.getWorkspace()
104 def venvDir = "${workspace}/gitreview-venv"
Mykyta Karpina1029302019-07-25 18:16:31 +0300105 def repoDir = params.get('repoDir', "${venvDir}/repo")
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200106 def metadataDir = "${repoDir}/metadata"
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200107 def ChangeId
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200108 def commitMessage
109 def gitRemote
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200110 stage("Installing virtualenv") {
111 python.setupVirtualenv(venvDir, 'python3', ['git-review', 'PyYaml'])
112 }
Mykyta Karpina1029302019-07-25 18:16:31 +0300113 checkoutReleaseMetadataRepo(['metadataCredentialsId': credentialsID,
114 'metadataGitRepoBranch': metadataGerritBranch,
115 'metadataGitRepoUrl': metadataRepoUrl,
116 'repoDir': repoDir,
117 'cloneRepo': cloneRepo])
118 dir(repoDir) {
119 gitRemote = sh(
120 script:
121 'git remote -v | head -n1 | cut -f1',
122 returnStdout: true,
123 ).trim()
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200124 }
Mykyta Karpina1029302019-07-25 18:16:31 +0300125
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200126 stage('Creating CR') {
127 def gerritAuth = ['PORT': gerritPort, 'USER': gerritUser, 'HOST': gerritHost]
128 def changeParams = ['owner': gerritUser, 'status': 'open', 'project': metadataProject, 'branch': metadataGerritBranch, 'topic': crTopic]
129 def gerritChange = gerrit.findGerritChange(credentialsID, gerritAuth, changeParams)
130 git.changeGitBranch(repoDir, metadataGerritBranch)
131 if (gerritChange) {
132 def jsonChange = readJSON text: gerritChange
133 changeNum = jsonChange['number']
134 ChangeId = 'Change-Id: '
135 ChangeId += jsonChange['id']
136 //get existent change from gerrit
137 gerrit.getGerritChangeByNum(credentialsID, venvDir, repoDir, gitRemote, changeNum)
138 } else {
139 ChangeId = ''
140 git.createGitBranch(repoDir, crTopic)
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200141 }
Alexandr Lovtsovc1cc7502019-07-02 12:41:53 +0500142 cmdText = "python '${repoDir}/utils/app.py' --path '${metadataDir}' update --key '${key}' --value '${value}'"
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200143 python.runVirtualenvCommand(venvDir, cmdText)
144 commitMessage =
Ruslan Gustomiasov2e9e3452019-06-27 14:29:31 +0200145 """${comment}
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200146
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200147 |${ChangeId}
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200148 """.stripMargin()
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200149 //commit change
150 if (gerritChange) {
151 git.commitGitChanges(repoDir, commitMessage, changeAuthorEmail, changeAuthorName, false, true)
152 } else {
153 git.commitGitChanges(repoDir, commitMessage, changeAuthorEmail, changeAuthorName, false)
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200154 }
Ruslan Gustomiasov37a17282019-06-27 13:17:07 +0200155 //post change
156 gerrit.postGerritReview(credentialsID, venvDir, repoDir, changeAuthorName, changeAuthorEmail, gitRemote, crTopic, metadataGerritBranch)
Ruslan Gustomiasovda4edd62019-06-25 14:26:28 +0200157 }
Alexandr Lovtsovcefc3d12019-07-29 14:48:33 +0300158}