source: Jenkins/TestRegen@ 262a864

Last change on this file since 262a864 was 7d128cb, checked in by Peter A. Buhr <pabuhr@…>, 2 years ago

add ARM architecture to regression tests

  • Property mode set to 100644
File size: 3.1 KB
Line 
1#!groovy
2
3node ('master') {
4
5 user_email = ''
6 test_list = ''
7
8 prepare_build()
9
10 try {
11
12 stage('Checkout') {
13 checkout scm
14
15 sh 'git clean -xdf'
16
17 sh 'git reset --hard'
18 }
19
20 stage('Building x86') {
21 regen_tests('i386')
22 }
23
24 stage('Building x64') {
25 regen_tests('x86_64')
26 }
27
28 stage('Building arm64') {
29 regen_tests('arm64')
30 }
31
32 stage('Patching') {
33 make_patch()
34 }
35
36 stage('Email') {
37 email()
38 }
39 }
40 catch (Exception caughtError) {
41 email_error()
42
43 throw caughtError
44 }
45}
46
47def prepare_build() {
48 properties ([ \
49 [$class: 'ParametersDefinitionProperty', \
50 parameterDefinitions: [ \
51 [$class: 'StringParameterDefinition', \
52 description: 'Who required the test', \
53 name: 'pEmail', \
54 ], \
55 [$class: 'StringParameterDefinition', \
56 description: 'Space separated list of tests to run', \
57 name: 'pTests', \
58 ], \
59 ],
60 ]])
61
62 user_email = pEmail;
63 test_list = pTests;
64
65 echo "User ${user_email} requested regenerating tests : ${ test_list }"
66}
67
68def regen_tests( String arch ) {
69
70 def install_dir = pwd tmp: true
71
72 //Configure the conpilation (Output is not relevant)
73 //Use the current directory as the installation target so nothing
74 //escapes the sandbox
75 //Also specify the compiler by hand
76 sh "./configure CXX=clang++ CC=gcc-6 --host=${arch} --enable-silent-rules --quiet"
77
78 //Compile the project
79 sh 'make -j 8 --no-print-directory'
80
81 //Regenerate the desired tests
82 sh "src/tests/test.py --regenerate-expected ${test_list}"
83
84 //Clean everything from the last build
85 sh 'make maintainer-clean > /dev/null'
86}
87
88def make_patch() {
89
90 def target_dir = pwd tmp: true
91
92 //Add every file so new files appear in the diff
93 sh 'git add .'
94
95 //Create a patch file
96 sh "git diff --cached --binary > ${target_dir}/result.patch"
97}
98
99def email() {
100
101 def target_dir = pwd tmp: true
102
103 dir( target_dir ) {
104
105 def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - Result"
106 def email_body = """This is an automated email from the Jenkins build machine. It was
107generated https://cforall.uwaterloo.ca:8082/dashboard.html.
108
109Please apply the required changes using the following method :
110 - copy result.patch to your cforall repository of choice.
111 - call 'git apply [patch file name]' (WARNING: the changes may conflict with any current changes to the test expected results).
112 - validate that the changes are correct.
113 - commit the changes as usual."""
114
115 //send email notification
116 emailext body: email_body, subject: email_subject, to: user_email, attachmentsPattern: "**/*.patch"
117 }
118}
119
120def email_error() {
121
122 def email_subject = "[cforall dashboard][TEST REGEN# ${env.BUILD_NUMBER}] - FAILURE"
123 def email_body = """This is an automated email from the Jenkins build machine. It was
124generated https://cforall.uwaterloo.ca:8082/dashboard.html.
125
126Test generation encoutered an error please see attached logs
127
128-----------------------------------------------------------------------"""
129
130 //send email notification
131 emailext body: email_body, subject: email_subject, to: user_email, attachLog: true
132}
Note: See TracBrowser for help on using the repository browser.