blob: 27518350de623e0ad64e04f4d097ca2c4d25c347 [file] [log] [blame]
alshabib47b75c62017-01-03 10:04:26 -08001import groovy.json.JsonSlurperClassic
alshabib8b389f22017-01-03 09:52:23 -08002
alshabib47b75c62017-01-03 10:04:26 -08003env.IGNORE_LIST = ["All-Users"]
alshabib8b389f22017-01-03 09:52:23 -08004
alshabib4c6a1602017-01-06 11:40:25 -08005env.approvers = 'ali@onlab.us,andy@onlab.us, llp@onlab.us'
6env.recipients = 'ali@onlab.us,andy@onlab.us, llp@onlab.us'
7
alshabib47b75c62017-01-03 10:04:26 -08008@NonCPS
9def jsonParseList(def json) {
10 j = json.minus(")]}'")
11 resp = new groovy.json.JsonSlurperClassic().parseText(j)
12 list = []
13 for (i in resp.keySet()) {
14 list << i
15 }
16 return list
alshabib8b389f22017-01-03 09:52:23 -080017}
18
alshabib47b75c62017-01-03 10:04:26 -080019@NonCPS
20def jsonParseMap(def json) {
21 def j = json.minus(")]}'")
22 return new groovy.json.JsonSlurperClassic().parseText(j)
23}
24
alshabiba2c83c92017-01-03 23:09:48 -080025def createBranch(def proj, def branch, def parent) {
26 cmd = 'ssh -p 29418 gerrit.opencord.org gerrit create-branch ' + proj + " " + branch + " " + parent
alshabib47b75c62017-01-03 10:04:26 -080027 sh returnStdout: true, script: cmd
28}
29
alshabib9b25b612017-01-04 16:42:54 -080030int checkBranchExists(def proj) {
alshabib47b75c62017-01-03 10:04:26 -080031 if (env.IGNORE_LIST.contains(proj)) {
alshabib9b25b612017-01-04 16:42:54 -080032 return 0
alshabib47b75c62017-01-03 10:04:26 -080033 }
34 url = 'https://gerrit.opencord.org/projects/' + proj + '/branches/' + env.BRANCH_NAME
35 response = httpRequest url: url, validResponseCodes: '200,404'
36 if (response.status == 404) {
alshabiba2c83c92017-01-03 23:09:48 -080037 createBranch(proj, env.BRANCH_NAME, 'master')
alshabibb08bbc02017-01-04 16:26:52 -080038 return 1
alshabib47b75c62017-01-03 10:04:26 -080039 }
alshabibb08bbc02017-01-04 16:26:52 -080040 return 0
alshabib47b75c62017-01-03 10:04:26 -080041}
42
43node ('master') {
alshabib35069d42017-01-04 14:58:34 -080044
alshabibf36a8732017-01-03 21:23:11 -080045 stage 'Check and create support branches'
alshabib47b75c62017-01-03 10:04:26 -080046 def url = 'https://gerrit.opencord.org/projects/?type=CODE'
47 def response = httpRequest url: url, validResponseCodes: '200'
48 def info = jsonParseList(response.content)
alshabib9b25b612017-01-04 16:42:54 -080049 int created = 0
alshabib47b75c62017-01-03 10:04:26 -080050 for (index = 0; index < info.size(); index++) {
alshabib9b25b612017-01-04 16:42:54 -080051 created += checkBranchExists(info[index])
alshabib47b75c62017-01-03 10:04:26 -080052 }
alshabibf36a8732017-01-03 21:23:11 -080053
alshabibb08bbc02017-01-04 16:26:52 -080054 if (created == 0) {
55
alshabib4c6a1602017-01-06 11:40:25 -080056 def now = new Date()
57 branch = 'cord-' + now.format("yyyyMMddHHmm", TimeZone.getTimeZone('UTC'))
58
alshabibb08bbc02017-01-04 16:26:52 -080059 stage 'Release?'
alshabib4c6a1602017-01-06 11:40:25 -080060 mail to: env.approvers,
alshabibb08bbc02017-01-04 16:26:52 -080061 subject: "Job '${JOB_NAME}' is waiting up for promotion",
62 body: "Please go to ${BUILD_URL}input and promote or abort the release"
63 def metadata = input id: 'release-build', message: 'Should I perform a release?',
64 parameters: [booleanParam(defaultValue: true,
alshabib1fca2d72017-01-04 17:10:13 -080065 description: 'Release onos applications (assumes versions have been updated)', name: 'build_onos_apps'),
alshabib4c6a1602017-01-06 11:40:25 -080066 string(defaultValue: branch, description: 'Release version', name: 'release_version')], submitter: 'ash,llp,acb'
alshabibb08bbc02017-01-04 16:26:52 -080067
68 if (metadata['release_version'] == 'None') {
69 error 'Release version cannot be None'
70 }
71
72 stage 'Create new manifest branch'
73 createBranch('manifest', metadata['release_version'], env.BRANCH_NAME)
74 checkout changelog: false, poll: false, scm: [$class: 'GitSCM', branches: [[name: metadata['release_version'] ]], doGenerateSubmoduleConfigurations: false, extensions: [[$class: 'WipeWorkspace'], [$class: 'CleanBeforeCheckout']], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'dd9d4677-2415-4f82-8e79-99dcd530f023', url: 'ssh://jenkins@gerrit.opencord.org:29418/manifest']]]
75 sh returnStdout: true, script: 'git checkout ' + metadata['release_version']
76 sh returnStdout: true, script: 'git pull origin ' + metadata['release_version']
77 sh returnStdout: true, script: 'cp ' + env.JENKINS_HOME + '/tmp/manifest-' + env.BRANCH_NAME + '.xml default.xml'
alshabibea397b52017-01-04 15:08:19 -080078
alshabibb08bbc02017-01-04 16:26:52 -080079 sh returnStdout: true, script: 'git commit -a -m "JENKINS: Updating manifest"'
80 sh returnStdout: true, script: 'git push origin ' + metadata['release_version']
alshabib4c6a1602017-01-06 11:40:25 -080081
82 stage 'Build and Release ONOS applications'
alshabib1fca2d72017-01-04 17:10:13 -080083
84 if (metadata['build_onos_apps']) {
85 checkout changelog: false, poll: false, scm: [$class: 'RepoScm', currentBranch: true,
alshabib7d2e14a2017-01-04 17:11:44 -080086 manifestBranch: env.BRANCH_NAME, manifestGroup: 'onos',
alshabib1fca2d72017-01-04 17:10:13 -080087 manifestRepositoryUrl: 'https://gerrit.opencord.org/manifest', quiet: true]
alshabib4c6a1602017-01-06 11:40:25 -080088 if (env.BRANCH_NAME == 'master') {
89 sh returnStdout: true, script: 'cd onos-apps/apps && mvn clean deploy'
90 } else {
91 sh returnStdout: true, script: 'cd onos-apps/apps && mvn -Prelease clean deploy'
92 }
alshabib1fca2d72017-01-04 17:10:13 -080093 }
alshabibb08bbc02017-01-04 16:26:52 -080094
alshabib4c6a1602017-01-06 11:40:25 -080095 mail to: env.recipients,
96 subject: branch + ' released',
97 replyTo: 'cord-discuss@opencord.org',
98 body: '''Hi CORD Community,
99
alshabibaac262b2017-01-06 15:15:08 -0800100 |A new version of cord is available, feel free to test it.
alshabib4c6a1602017-01-06 11:40:25 -0800101 |You can obtain it using the following commands:
102
103 |repo init -u https://gerrit.opencord.org/manifest -b '''.stripMargin() + metadata['release_version'] + '''
104 |repo sync
105
106 |Have fun!
107
108 |--
109 |CORD Automated Release
110 '''.stripMargin()
alshabibb08bbc02017-01-04 16:26:52 -0800111 }
alshabib47b75c62017-01-03 10:04:26 -0800112}