source: Jenkins/tools.groovy@ 8fd1b7c

ADT ast-experimental
Last change on this file since 8fd1b7c was 9824500, checked in by Thierry Delisle <tdelisle@…>, 4 years ago

Fixed email generation in Jenkins

  • Property mode set to 100644
File size: 3.5 KB
Line 
1#!groovy
2
3import groovy.transform.Field
4
5// For skipping stages
6import org.jenkinsci.plugins.pipeline.modeldefinition.Utils
7
8// wrapper around stage declaretion to be more verbose
9// and allow showing as skipped in the UI
10def BuildStage(String name, boolean run, Closure block ) {
11 echo " -------- ${name} -------- "
12 if(run) {
13 stage(name, block)
14 } else {
15 stage(name) { Utils.markStageSkippedForConditional(STAGE_NAME) }
16 }
17}
18
19//===========================================================================================================
20// Common compilation routines
21//===========================================================================================================
22def Clean() {
23 BuildStage('Cleanup', true) {
24 // clean the build by wipping the build directory
25 dir(BuildDir) {
26 deleteDir()
27 }
28 }
29}
30
31def Checkout(commitHash = null) {
32 BuildStage('Checkout', true) {
33 //checkout the source code and clean the repo
34 if(commitHash) {
35 echo "Checking out commit <${commitHash}>"
36 final scmVars = checkout([$class: 'GitSCM', branches: [[name: commitHash ]],
37 userRemoteConfigs: [[
38 url: 'cforall@plg.uwaterloo.ca:software/cfa/cfa-cc',
39 credentialsId: 'git_key_aug20']]
40 ])
41 echo GitLogMessage(scmVars.GIT_COMMIT, scmVars.GIT_PREVIOUS_COMMIT)
42 } else {
43 final scmVars = checkout scm
44 echo GitLogMessage(scmVars.GIT_COMMIT, scmVars.GIT_PREVIOUS_COMMIT)
45 }
46 }
47}
48
49//===========================================================================================================
50//Routine responsible of sending the email notification once the build is completed
51//===========================================================================================================
52@NonCPS
53def SplitLines(String text) {
54 def list = []
55
56 text.eachLine {
57 list += it
58 }
59
60 return list
61}
62
63def ConstructGitLogMessage(String oldRef, String newRef) {
64 def revText = sh(returnStdout: true, script: "git rev-list ${oldRef}..${newRef}").trim()
65 def revList = SplitLines( revText )
66
67 def gitUpdate = ""
68 revList.each { rev ->
69 def type = sh(returnStdout: true, script: "git cat-file -t ${rev}").trim()
70 gitUpdate = gitUpdate + " via ${rev} (${type})"
71 }
72
73 def rev = oldRef
74 def type = sh(returnStdout: true, script: "git cat-file -t ${rev}").trim()
75 gitUpdate = gitUpdate + " from ${rev} (${type})"
76
77 def gitLog = sh(returnStdout: true, script: "git rev-list --format=short ${oldRef}...${newRef}").trim()
78
79 def gitDiff = sh(returnStdout: true, script: "git diff --stat --color ${newRef} ${oldRef}").trim()
80 gitDiff = gitDiff.replace('[32m', '<span style="color: #00AA00;">')
81 gitDiff = gitDiff.replace('[31m', '<span style="color: #AA0000;">')
82 gitDiff = gitDiff.replace('[m', '</span>')
83
84 return """
85<p>- Changes -------------------------------------------------------------</p>
86
87<pre>
88The branch ${env.BRANCH_NAME} has been updated.
89${gitUpdate}
90</pre>
91
92<p>- Log -----------------------------------------------------------------</p>
93
94<pre>
95${gitLog}
96</pre>
97
98<p>-----------------------------------------------------------------------</p>
99<pre>
100Summary of changes:
101${gitDiff}
102</pre>
103"""
104}
105
106EmailMessage = ''
107def GitLogMessage(String oldRef = '', String newRef = '') {
108 if(!EmailMessage) {
109 if (!oldRef) { return "\nERROR retrieveing current git information!\n" }
110 if (!newRef) { return "\nERROR retrieveing previous git information!\n" }
111
112 echo "Constructing new git message"
113
114 EmailMessage = ConstructGitLogMessage(oldRef, newRef)
115 }
116 else {
117 echo "Reusing previously constructed message"
118 }
119 return EmailMessage;
120}
121
122return this;
Note: See TracBrowser for help on using the repository browser.