@@ -10,11 +10,21 @@ pipeline {
1010
1111 environment {
1212 NOTIFICATION_EMAIL = '
[email protected] '
13- //Update this URL based on where(which organization) it needs to be deployed
14- GITHUB_URL ='https://github.com/mchpTestArea'
15- //This is the BitBucket repo URL which we want to deploy
16- BITBUCKET_URL = 'https://bitbucket.microchip.com/scm/mcu16ce/pic24f-hello-world-uart.git'
17- GITHUB_CREDENTIAL_ID = 'GITHUB_PIC_AVR_TEST_TOKEN'
13+ //This is the BitBucket source repo URL to be deployed
14+ BITBUCKET_SOURCE_URL = 'https://bitbucket.microchip.com/scm/mcu16ce/pic24f-hello-world-uart.git'
15+ BITBUCKET_CREDENTIAL_ID = 'BITBUCKET_INTERNAL_TOKEN'
16+ GITHUB_PRODUCTION_DEPLOY_URL ='https://github.com/microchip-pic-avr-examples'
17+ GITHUB_TEST_DEPLOY_URL ='https://github.com/mchpTestArea'
18+ //Selects the deployment URL(production or test) based on the merge target branch, selects "microchip-pic-avr-examples" if target branch is "master" , if target branch is "test_deploy" selects "mchpTestArea" else null
19+ GITHUB_URL = getGitHubUrl("${GITHUB_PRODUCTION_DEPLOY_URL}","${GITHUB_TEST_DEPLOY_URL}")
20+ GITHUB_PRODUCTION_DEPLOY_CREDENTIAL_ID ='GITHUB_MICROCHIP_PIC_AVR_EXAMPLES_TOKEN'
21+ GITHUB_TEST_DEPLOY_CREDENTIAL_ID ='GITHUB_PIC_AVR_TEST_TOKEN'
22+ //Gets the Github credential id based on the deployment organization
23+ GITHUB_CREDENTIAL_ID = getGitHubCredentialId("${GITHUB_URL}","${GITHUB_PRODUCTION_DEPLOY_URL}","${GITHUB_TEST_DEPLOY_URL}","${GITHUB_PRODUCTION_DEPLOY_CREDENTIAL_ID}","${GITHUB_TEST_DEPLOY_CREDENTIAL_ID}")
24+ //Files or folders to be excluded from deployment, if multiple files or folders use comma separator
25+ DEPLOY_EXCLUDE_FOLDER_FILE_LIST = 'mchp_private'
26+ //Branch(s) to be deployed, if multiple branches use comma separator. ${env.BRANCH_NAME} is the target branch of the PR.
27+ DEPLOY_BRANCH_LIST = "${env.BRANCH_NAME}"
1828 CHANGE_LOG_PATH = 'changelog.md'
1929 SOURCE_PROJECT_META_DATA = '.main-meta/main.json'
2030 DEPLOY_TOOL_URL = 'https://bitbucket.microchip.com/scm/citd/tool-github-deploy.git'
@@ -32,7 +42,7 @@ pipeline {
3242 checkout scm
3343 }
3444 }
35-
45+
3646 stage('Build') {
3747 steps {
3848 script {
@@ -41,9 +51,17 @@ pipeline {
4151 }
4252 }
4353 }
44-
54+
4555 // Cloning the tool used for GitHub deployment
4656 stage('GitHub tool clone'){
57+ when {
58+ anyOf {
59+ allOf {
60+ not { changeRequest() }
61+ anyOf {branch 'master'; branch 'test_deploy';}
62+ }
63+ }
64+ }
4765 steps{
4866 script{
4967 execute("git clone https://bitbucket.microchip.com/scm/citd/tool-github-deploy.git")
@@ -52,16 +70,141 @@ pipeline {
5270 }
5371 }
5472
73+ // Creating tag in Bitbucket repo
74+ stage('Bitbucket Tag Creation'){
75+ when {
76+ anyOf {
77+ allOf {
78+ not { changeRequest() }
79+ anyOf {branch 'master'; branch 'test_deploy';}
80+ }
81+ }
82+ }
83+ steps{
84+ script{
85+ def jsonObj = readJsonObject();
86+
87+ withCredentials([usernamePassword(credentialsId: "${env.BITBUCKET_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
88+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -bto=true -rpn=\"${jsonObj.content.projectName}\" -bid=$USER_NAME -bpat=$PASS -bpn=MCU16CE -btv=\"${jsonObj.content.version}\" -bch=${env.GIT_COMMIT} -btd=\"v${jsonObj.content.version}\"")
89+ }
90+ }
91+ }
92+ }
93+
94+ // GitHub repo creation
95+ stage('GitHub Repo Creation'){
96+ when {
97+ anyOf {
98+ allOf {
99+ not { changeRequest() }
100+ anyOf {branch 'master'; branch 'test_deploy';}
101+ }
102+ }
103+ }
104+ steps{
105+ script{
106+ def jsonObj = readJsonObject();
107+
108+ String [] topics = jsonObj.content.keywords
109+ def asString = topics.join(", ")
110+ asString = asString.replace("\n", "").replace(" ", "").replace("\t", "").replace("\r", "")
111+ Boolean visibility = true
112+ if(env.GITHUB_URL == env.GITHUB_PRODUCTION_DEPLOY_URL)
113+ {
114+ visibility = false
115+ }
116+
117+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
118+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -rpo=true -gpat=$PASS -rporg=${env.GITHUB_URL} -rpn=${jsonObj.content.projectName} -rpd=\"${jsonObj.content.shortDescription}\" -rpt=${asString} -rpp=${visibility}")
119+ }
120+ }
121+ }
122+ }
123+
124+ // Deploying the code to GitHub
125+ stage('GitHub Deploy Source'){
126+ when {
127+ anyOf {
128+ allOf {
129+ not { changeRequest() }
130+ anyOf {branch 'master'; branch 'test_deploy';}
131+ }
132+ }
133+ }
134+ steps{
135+ script{
136+ def jsonObj = readJsonObject();
137+ def gitHubUrl = "${env.GITHUB_URL}" + "/" + jsonObj.content.projectName
138+ gitHubUrl = gitHubUrl.replace(" ", "").replace("\n", "")
139+
140+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
141+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -deploy=true -gpat=$PASS -dgid=$USER_NAME -dburl=${env.BITBUCKET_SOURCE_URL} -dgurl=${gitHubUrl} -dbranch=${env.DEPLOY_BRANCH_LIST} -def=${env.DEPLOY_EXCLUDE_FOLDER_FILE_LIST}")
142+ }
143+ }
144+ }
145+ }
146+
147+ // Creating GitHub release
148+ stage('GitHub release'){
149+ when {
150+ anyOf {
151+ allOf {
152+ not { changeRequest() }
153+ anyOf {branch 'master'; branch 'test_deploy';}
154+ }
155+ }
156+ }
157+ steps{
158+ script{
159+ def jsonObj = readJsonObject();
160+
161+ withCredentials([usernamePassword(credentialsId: "${env.GITHUB_CREDENTIAL_ID}", passwordVariable: 'PASS', usernameVariable: 'USER_NAME')]) {
162+ execute("python tool-github-deploy/tool-github-deploy/tool-github-deploy.py -rlo=true -gpat=$PASS -rpn=\"${jsonObj.content.projectName}\" -rltv=\"v${jsonObj.content.version}\" -rltt=\"${jsonObj.content.version}\" -rlnp=${env.CHANGE_LOG_PATH}")
163+ }
164+ }
165+ }
166+ }
167+
168+ //Deploying the Github content to portal
169+ stage('Portal-Deploy') {
170+ when {
171+ allOf {
172+ not { changeRequest() }
173+ anyOf {branch 'master';}
174+ }
175+ }
176+ steps {
177+ script {
178+ def jsonObj = readJsonObject();
179+ def version = jsonObj.content.version
180+ def project = jsonObj.content.projectName
181+
182+ String[] splitPreTag = "${env.GITHUB_URL}".split("/")
183+ def gitHubOrg = (splitPreTag[splitPreTag.size() - 1])
184+
185+ def cmdArgs = "'{\"repoOwnerName\":\"$gitHubOrg\",\"repoName\":\"$project\",\"tagName\":\"$version\"}'"
186+ cmdArgs = cmdArgs.replaceAll("\"","\\\\\"")
187+
188+ execute("git clone https://bitbucket.microchip.com/scm/portal/bundles.git")
189+ execute("cd bundles && chmod 755 ./portal-client-cli-linux")
190+ execute("git clone https://bitbucket.microchip.com/scm/citd/tool-portal-client-launcher.git")
191+ execute("cd tool-portal-client-launcher && node portalLauncher.js -app=../bundles/portal-client-cli-linux -cmd=\"uploadGitHub ${cmdArgs}\"")
192+ }
193+ }
194+ }
195+
55196 }
56197
57198 post {
58199 success{
59200 script {
60201 if (!"${env.CHANGE_AUTHOR_EMAIL}".equalsIgnoreCase("null")) {
202+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
61203 mail to: "${env.CHANGE_AUTHOR_EMAIL}, ${env.NOTIFICATION_EMAIL}",
62204 subject: "Successful Pipeline: ${currentBuild.fullDisplayName}",
63205 body: "Something is right with ${env.BUILD_URL}"
64206 } else {
207+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
65208 mail to: "${env.NOTIFICATION_EMAIL}",
66209 subject: "Successful Pipeline: ${currentBuild.fullDisplayName}",
67210 body: "Something is right with ${env.BUILD_URL}"
@@ -71,10 +214,12 @@ pipeline {
71214 failure {
72215 script {
73216 if (!"${env.CHANGE_AUTHOR_EMAIL}".equalsIgnoreCase("null")) {
217+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
74218 mail to: "${env.CHANGE_AUTHOR_EMAIL}, ${env.NOTIFICATION_EMAIL}",
75219 subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
76220 body: "Pipeline failure. ${env.BUILD_URL}"
77221 } else {
222+ archiveArtifacts artifacts: "tool-mplabx-c-build/output/**", fingerprint: true
78223 mail to: "${env.NOTIFICATION_EMAIL}",
79224 subject: "Failed Pipeline: ${currentBuild.fullDisplayName}",
80225 body: "Pipeline failure. ${env.BUILD_URL}"
@@ -96,3 +241,24 @@ String readJsonObject() {
96241 def jsonObj = readJSON interpolate: true, file: "${env.SOURCE_PROJECT_META_DATA}"
97242 return jsonObj
98243}
244+
245+ def getGitHubUrl(String productionUrl, String testDeployUrl) {
246+ String branchName = "${env.BRANCH_NAME}";
247+ if(branchName == 'master') {
248+ return productionUrl;
249+ } else if(branchName == 'test_deploy') {
250+ return testDeployUrl;
251+ } else {
252+ return null
253+ }
254+ }
255+
256+ def getGitHubCredentialId(String deployUrl, String productionDeployUrl, String testDeployUrl, String githubProductionDeployCredential, String githubTestDeployCredential) {
257+ if(deployUrl == productionDeployUrl) {
258+ return githubProductionDeployCredential;
259+ } else if(deployUrl == testDeployUrl) {
260+ return githubTestDeployCredential;
261+ } else {
262+ return null
263+ }
264+ }
0 commit comments