source: Jenkins/tools.groovy @ 7f72697

ADTast-experimentalenumforall-pointer-decayjacob/cs343-translationnew-ast-unique-exprpthread-emulationqualifiedEnum
Last change on this file since 7f72697 was cc5544a, checked in by Thierry Delisle <tdelisle@…>, 3 years ago

Simplified how jenkins produces the git message.
FullBuild? now retrieves errors from jenkins url rather than local host.
Added promote script to repo

  • Property mode set to 100644
File size: 3.6 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<pre>
86The branch ${env.BRANCH_NAME} has been updated.
87${gitUpdate}
88</pre>
89
90<p>Check console output at ${env.BUILD_URL} to view the results.</p>
91
92<p>- Status --------------------------------------------------------------</p>
93
94<p>BUILD# ${env.BUILD_NUMBER} - ${currentBuild.result}</p>
95
96<p>- Log -----------------------------------------------------------------</p>
97
98<pre>
99${gitLog}
100</pre>
101
102<p>-----------------------------------------------------------------------</p>
103<pre>
104Summary of changes:
105${gitDiff}
106</pre>
107"""
108}
109
110EmailMessage = ''
111def GitLogMessage(String oldRef = '', String newRef = '') {
112        if(!EmailMessage) {
113                if (!oldRef) { return "\nERROR retrieveing current git information!\n"  }
114                if (!newRef) { return "\nERROR retrieveing previous git information!\n" }
115
116                echo "Constructing new git message"
117
118                EmailMessage = ConstructGitLogMessage(oldRef, newRef)
119        }
120        else {
121                echo "Reusing previously constructed message"
122        }
123        return EmailMessage;
124}
125
126return this;
Note: See TracBrowser for help on using the repository browser.