Kill Gitler and make way for The Butler (#1124)
The Butler is a more polite and helpful replacement to the grumpy old Gitler. The Butler will do his utmost to assist new (and old) contributors to the MySensors cause.
This commit is contained in:
committed by
Mikael Falkvidd
parent
153850de80
commit
d9e05eb39c
+10
-10
@@ -65,7 +65,7 @@ def buildMySensorsMicro(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (MySensorsMicro - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (MySensorsMicro - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -101,7 +101,7 @@ def buildMySensorsGw(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (MySensorsGW - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (MySensorsGW - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -134,7 +134,7 @@ def buildArduinoUno(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (Arduino Uno - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Arduino Uno - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -167,7 +167,7 @@ def buildArduinoMega(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, config, 'ERROR', 'Toll gate (Arduino Mega - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Arduino Mega - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -200,7 +200,7 @@ def buildSTM32F1(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (STM32F1 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (STM32F1 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -239,7 +239,7 @@ def buildEsp8266(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (ESP8266 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (ESP8266 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -287,7 +287,7 @@ def buildEsp32(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (ESP32 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (ESP32 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -328,7 +328,7 @@ def buildnRF5(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (nRF5 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF5 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -352,7 +352,7 @@ def buildnRF52832(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (nRF52832 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF52832 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
@@ -376,7 +376,7 @@ def buildnRF51822(config, sketches, String key) {
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (nRF51822 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
|
||||
if (config.is_pull_request) {
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
}
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF51822 - '+key+')', 'Build error', '${BUILD_URL}')
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
#!groovy
|
||||
def call(config) {
|
||||
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (Gitler)', 'Checking...', '${BUILD_URL}flowGraphTable/')
|
||||
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (Butler)', 'Checking...', '${BUILD_URL}flowGraphTable/')
|
||||
if (env.CHANGE_TARGET == 'master' &&
|
||||
(env.CHANGE_AUTHOR != 'bblacey' && env.CHANGE_AUTHOR != 'd00616' &&
|
||||
env.CHANGE_AUTHOR != 'fallberg' && env.CHANGE_AUTHOR != 'henrikekblad' &&
|
||||
@@ -9,7 +9,7 @@ def call(config) {
|
||||
env.CHANGE_AUTHOR != 'tekka007' && env.CHANGE_AUTHOR != 'user2684' &&
|
||||
env.CHANGE_AUTHOR != 'Yveaux'))
|
||||
{
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Gitler)', 'This pull request targets master. That is not permitted for '+env.CHANGE_AUTHOR, '')
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Butler)', 'Sir, This pull request targets master. I am afraid that is not permitted for '+env.CHANGE_AUTHOR, '')
|
||||
error "This pull request targets master. That is not permitted!"
|
||||
}
|
||||
else if (env.CHANGE_TARGET == 'master')
|
||||
@@ -48,7 +48,7 @@ def call(config) {
|
||||
])
|
||||
}
|
||||
|
||||
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (Gitler)', 'Pass', '')
|
||||
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (Butler)', 'Pass - Well done Master!', '')
|
||||
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (Release changelog)', '', '${BUILD_URL}execution/node/3/ws/MySensors/ReleaseNotes.md/*view*/')
|
||||
return
|
||||
}
|
||||
@@ -115,31 +115,35 @@ def call(config) {
|
||||
ret = sh(returnStatus: true,
|
||||
script:"""#!/bin/bash
|
||||
cd ${config.repository_root}/.ci
|
||||
./gitler.sh""")
|
||||
./butler.sh""")
|
||||
|
||||
if (fileExists(config.repository_root+'restyling.patch')) {
|
||||
emailext (
|
||||
subject: "Job '${env.JOB_NAME} #${env.BUILD_NUMBER} [PR#${env.CHANGE_ID}]' failed due to bad code styling",
|
||||
body: """<p>Job '${env.JOB_NAME} [<a href="${env.CHANGE_URL}">PR#${env.CHANGE_ID}</a> - ${env.CHANGE_TITLE}]' failed because code style does not follow the standards.</p>
|
||||
A patch to rectify the errors is attached. You apply the patch using:<br>
|
||||
subject: "PR#${env.CHANGE_ID} - ${env.CHANGE_TITLE} has unfortunate code styling",
|
||||
body: """<p>Greetings Sir!<p>
|
||||
I am afraid your pull request does not follow the MySensors standards with respect to coding style.</p>
|
||||
That is ok, you are perhaps a first time committer to this repository. Please read the <a href="https://www.mysensors.org/download/contributing">code contribution guidelines</a> for help on how to format your code.<p>
|
||||
To assist you, I have prepared a patch for you that will reformat the code according to the coding style required.<br>
|
||||
The patch is attached. You may apply the patch using:<br>
|
||||
git apply restyling.patch<p>
|
||||
If you disagree to this, please discuss it <a href="${env.CHANGE_URL}">here</a>.<p>
|
||||
Yours sincerely, Gitler, on behalf of Jenkins""",
|
||||
mimeType: 'text/html', to: '${env.CHANGE_AUTHOR_EMAIL}',
|
||||
If you disagree with me, please discuss it <a href="${env.CHANGE_URL}">here</a>.<p>
|
||||
--<br>
|
||||
Yours sincerely, The Butler, serving the MySensors community""",
|
||||
mimeType: 'text/html', to: env.CHANGE_AUTHOR_EMAIL,
|
||||
attachLog: false, compressLog: false, attachmentsPattern: config.repository_root+'restyling.patch'
|
||||
)
|
||||
}
|
||||
publishHTML([allowMissing: true, alwaysLinkToLastBuild: false, keepAll: true,
|
||||
reportDir: config.repository_root,
|
||||
reportFiles: 'gitler.html', reportName: 'Gitler report', reportTitles: ''])
|
||||
reportFiles: 'butler.html', reportName: 'The Butler report', reportTitles: ''])
|
||||
if (ret == 1) {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Gitler)', 'Commit(s) does not meet coding standards', '${BUILD_URL}Gitler_report/gitler.html')
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Butler)', 'I am afraid the commit(s) needs some touchup, please check the details...', '${BUILD_URL}The_20Butler_20report/butler.html')
|
||||
currentBuild.currentResult == 'FAILURE'
|
||||
echo "Termiated due to Gitler assert" // For BFA
|
||||
echo "You can read the detailed error report here: "+env.BUILD_URL+"Gitler_report/"
|
||||
error 'Termiated due to Gitler assert'
|
||||
echo "Terminated due to Butler assert" // For BFA
|
||||
echo "You can read the detailed error report here: "+env.BUILD_URL+"The_20Butler_20report/"
|
||||
error 'Terminated due to Butler assert'
|
||||
} else {
|
||||
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (Gitler)', 'Pass', '')
|
||||
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (Butler)', 'Pass - Well done Sir!', '${BUILD_URL}The_20Butler_20report/butler.html')
|
||||
}
|
||||
}
|
||||
|
||||
@@ -9,6 +9,7 @@ echo "No subjects with leading lower case characters<br>" > leading_lowercases.t
|
||||
echo "No subjects with trailing periods<br>" > trailing_periods.txt
|
||||
echo "No body lines are too wide<br>" > too_long_body_lines.txt
|
||||
echo "No keywords are missing in keywords.txt<br>" > missing_keywords.txt
|
||||
echo "No occurences of the deprecated boolean data type<br>" >> booleans.txt
|
||||
|
||||
too_long_subjects=`awk 'length > 72' subjects.txt`
|
||||
if [ -n "$too_long_subjects" ]; then
|
||||
@@ -48,56 +49,54 @@ if [ -n "$missing_keywords" ]; then
|
||||
result=1
|
||||
fi
|
||||
|
||||
# Evaluate if there exists booleans in the code tree (not counting this file)
|
||||
if git grep -q boolean -- `git ls-files | grep -v butler.sh`; then
|
||||
echo "<b>You have added at least one occurence of the deprecated boolean data type. Please use bool instead.</b><br>" > booleans.txt
|
||||
result=1
|
||||
fi
|
||||
|
||||
printf "%s" "<html>" > gitler.html
|
||||
awk 'FNR==1{print "<br>"}1' too_long_subjects.txt leading_lowercases.txt trailing_periods.txt too_long_body_lines.txt missing_keywords.txt >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
printf "%s" "<html>" > butler.html
|
||||
echo "Greetings Sir! Here is my evaluation of your pull request:<br>" >> butler.html
|
||||
awk 'FNR==1{print "<br>"}1' too_long_subjects.txt leading_lowercases.txt trailing_periods.txt too_long_body_lines.txt missing_keywords.txt booleans.txt >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
if [ $result -ne 0 ]; then
|
||||
echo "You should follow <a href="http://chris.beams.io/posts/git-commit">this guide</a> when writing your commit messages.<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "To change the commit message for a single-commit pull request:<br>" >> gitler.html
|
||||
echo "git checkout <your_branch><br>" >> gitler.html
|
||||
echo "git commit --amend<br>" >> gitler.html
|
||||
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "To change the commit messages for a multiple-commit pull request:<br>" >> gitler.html
|
||||
echo "git checkout <your_branch><br>" >> gitler.html
|
||||
echo "git rebase -i <sha_of_parent_to_the_earliest_commit_you_want_to_change><br>" >> gitler.html
|
||||
echo "Replace \"pick\" with \"r\" or \"reword\" on the commits you need to change message for<br>" >> gitler.html
|
||||
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "<b>I am afraid there are some issues with your commit messages and/or use of keywords.</b><br>" >> butler.html
|
||||
echo "I highly recommend reading <a href="http://chris.beams.io/posts/git-commit">this guide</a> for tips on how to write a good commit message.<br>" >> butler.html
|
||||
echo "More specifically, MySensors have some <a href="https://www.mysensors.org/download/contributing">code contribution guidelines</a> that I am afraid all contributers need to follow.<br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
echo "I can help guide you in how to change the commit message for a single-commit pull request:<br>" >> butler.html
|
||||
echo "git checkout <your_branch><br>" >> butler.html
|
||||
echo "git commit --amend<br>" >> butler.html
|
||||
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
echo "To change the commit messages for a multiple-commit pull request:<br>" >> butler.html
|
||||
echo "git checkout <your_branch><br>" >> butler.html
|
||||
echo "git rebase -i <sha_of_parent_to_the_earliest_commit_you_want_to_change><br>" >> butler.html
|
||||
echo "Replace \"pick\" with \"r\" or \"reword\" on the commits you need to change message for<br>" >> butler.html
|
||||
echo "git push origin HEAD:<your_branch_on_github> -f<br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
fi
|
||||
|
||||
# Evaluate coding style
|
||||
astyle --options=.mystools/astyle/config/style.cfg -nq --recursive "*.h" "*.c" "*.cpp"
|
||||
git diff > restyling.patch
|
||||
if [ -s restyling.patch ]; then
|
||||
echo "<b>This commit is not meeting the coding standards, a mail with a patch has been sent to you that if applied to your PR, will make it meet the coding standards.</b><br>" >> gitler.html
|
||||
echo "You apply the patch using:<br>" >> gitler.html
|
||||
echo "git apply restyling.patch<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "I am afraid your coding style is not entirely in line with the MySensors preffered style.<b><br>A mail with a patch has been sent to you that, if applied to your PR, will make it follow the MySensors coding standards.</b><br>" >> butler.html
|
||||
echo "You can apply the patch using:<br>" >> butler.html
|
||||
echo "git apply restyling.patch<br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
result=1
|
||||
else
|
||||
echo "This commit is meeting the coding standards, congratulations!<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "This commit is meeting the coding standards, well done Sir!<br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
rm restyling.patch
|
||||
fi
|
||||
|
||||
# Evaluate if there exists booleans in the code tree (not counting this file)
|
||||
if git grep -q boolean -- `git ls-files | grep -v gitler.sh`
|
||||
then
|
||||
echo "<b>This repository currently contain the boolean keyword. This should be avoided.</b><br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
result=1
|
||||
else
|
||||
echo "This repository does not contain any boolean keywords. This is good.<br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
fi
|
||||
|
||||
if [ $result -ne 0 ]; then
|
||||
echo "<b>If you disagree to this, please discuss it in the GitHub pull request thread.</b><br>" >> gitler.html
|
||||
echo "<br>" >> gitler.html
|
||||
echo "If you have any questions, please first read the <a href="https://www.mysensors.org/download/contributing">code contribution guidelines</a>.</b><br>" >> butler.html
|
||||
echo "<b>If you disagree to this, please discuss it in the GitHub pull request thread.</b><br>" >> butler.html
|
||||
echo "<br>" >> butler.html
|
||||
fi
|
||||
echo "Yours sincerely, Gitler, on behalf of Jenkins<br>" >> gitler.html
|
||||
printf "%s" "</html>" >> gitler.html
|
||||
echo "Yours sincerely, The Butler, serving the MySensors community<br>" >> butler.html
|
||||
printf "%s" "</html>" >> butler.html
|
||||
exit $result
|
||||
+3
-3
@@ -34,7 +34,7 @@ def buildSerial(config) {
|
||||
buildLinux(config, '--my-debug=disable --my-transport=none --my-gateway=serial', 'Serial')
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (Linux builds - Serial GW)', 'Warnings found', '${BUILD_URL}warnings28Result/new')
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Linux builds - Serial GW)', 'Build error', '${BUILD_URL}')
|
||||
} else {
|
||||
@@ -47,7 +47,7 @@ def buildEthernet(config) {
|
||||
buildLinux(config, '--my-debug=enable --my-transport=rs485 --my-gateway=ethernet', 'Ethernet')
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (Linux builds - Ethernet GW)', 'Warnings found', '${BUILD_URL}warnings28Result/new')
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Linux builds - Ethernet GW)', 'Build error', '${BUILD_URL}')
|
||||
} else {
|
||||
@@ -60,7 +60,7 @@ def buildMQTT(config) {
|
||||
buildLinux(config, '--my-debug=disable --my-transport=none --my-gateway=mqtt', 'MQTT')
|
||||
if (currentBuild.currentResult == 'UNSTABLE') {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (Linux builds - MQTT GW)', 'Warnings found', '${BUILD_URL}warnings28Result/new')
|
||||
error 'Termiated due to warnings found'
|
||||
error 'Terminated due to warnings found'
|
||||
} else if (currentBuild.currentResult == 'FAILURE') {
|
||||
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (Linux builds - MQTT GW)', 'Build error', '${BUILD_URL}')
|
||||
} else {
|
||||
|
||||
+29
-12
@@ -12,7 +12,7 @@ def call(Closure body) {
|
||||
|
||||
if (env.CHANGE_ID) {
|
||||
config.is_pull_request = true
|
||||
echo "Building pull request: #"+env.CHANGE_ID+"\nTarget branch: "+env.CHANGE_TARGET
|
||||
echo "Building pull request: #"+env.CHANGE_ID+"\nTarget branch: "+env.CHANGE_TARGET+"\nAuthor: "+env.CHANGE_AUTHOR+" ("+env.CHANGE_AUTHOR_EMAIL+")"
|
||||
config.git_sha = sh(returnStdout: true,
|
||||
script: """#!/bin/bash
|
||||
cd ${config.repository_root}
|
||||
@@ -30,9 +30,9 @@ def call(Closure body) {
|
||||
try {
|
||||
ansiColor('xterm') {
|
||||
if (config.is_pull_request) {
|
||||
def gitler = load(config.repository_root+'.ci/gitler.groovy')
|
||||
stage('Gitler') {
|
||||
gitler(config)
|
||||
def butler = load(config.repository_root+'.ci/butler.groovy')
|
||||
stage('Butler') {
|
||||
butler(config)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -174,20 +174,37 @@ def call(Closure body) {
|
||||
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate', 'Failed', '${BUILD_URL}flowGraphTable/')
|
||||
if (config.is_pull_request) {
|
||||
slackSend color: 'danger',
|
||||
message: "Job '${env.JOB_NAME} <${env.BUILD_URL}|#${env.BUILD_NUMBER}> <${env.CHANGE_URL}|PR#${env.CHANGE_ID} - ${env.CHANGE_TITLE}>' failed with result ${currentBuild.result}."
|
||||
message: "Failed to build <${env.CHANGE_URL}|PR#${env.CHANGE_ID} - ${env.CHANGE_TITLE}>. Job <${env.BUILD_URL}|${env.JOB_NAME} #${env.BUILD_NUMBER}> ended with ${currentBuild.result}."
|
||||
emailext (
|
||||
subject: "Job '${env.JOB_NAME} #${env.BUILD_NUMBER}' failed",
|
||||
body: """Job '${env.JOB_NAME} <a href="${env.BUILD_URL}">#${env.BUILD_NUMBER}</a> (<a href="${env.CHANGE_URL}">PR#${env.CHANGE_ID} - ${env.CHANGE_TITLE}</a>)' ended with result ${currentBuild.result}.
|
||||
<br>Check attached console output or <a href="${env.BUILD_URL}">here</a> for a hint on what the problem might be.""",
|
||||
subject: "PR#${env.CHANGE_ID} - ${env.CHANGE_TITLE} failed to build",
|
||||
body: '''Greetings Sir!<p>
|
||||
I am The Butler. My task is to help you create a pull request that fit the MySensors organizations coding style and builds for all supported platforms.<p>
|
||||
I am afraid I failed to validate your pull request. Result was '''+currentBuild.result+'''.
|
||||
<br>Please check the attached build log or <a href="${BUILD_URL}">here</a> for a hint on what the problem might be.<p>
|
||||
If you have difficulties determining the cause for the failure, feel free to ask questions <a href="${CHANGE_URL}">here</a>.<p>
|
||||
Changes:<br>
|
||||
${CHANGES}<p>
|
||||
Notable build log lines:<br>
|
||||
${BUILD_LOG_REGEX, regex="^.*?Terminated.*?$", linesBefore=0, linesAfter=0, maxMatches=5, showTruncatedLines=false, escapeHtml=true}<p>
|
||||
My personal evaluation of your pull request is available <a href="${BUILD_URL}The_20Butler_20report/butler.html">here</a>.<p>
|
||||
--<br>
|
||||
Yours sincerely, The Butler, serving the MySensors community''',
|
||||
mimeType: 'text/html', to: env.CHANGE_AUTHOR_EMAIL, attachLog: true, compressLog: false
|
||||
)
|
||||
} else {
|
||||
slackSend color: 'danger',
|
||||
message: "Job '${env.JOB_NAME} <${env.BUILD_URL}|#${env.BUILD_NUMBER}> ${env.BRANCH_NAME}]' failed with result ${currentBuild.result}."
|
||||
message: "Failed to build branch ${env.BRANCH_NAME}. Job <${env.BUILD_URL}|${env.JOB_NAME} #${env.BUILD_NUMBER}> ended with ${currentBuild.result}."
|
||||
emailext (
|
||||
subject: "Job '${env.JOB_NAME} #${env.BUILD_NUMBER} ${env.BRANCH_NAME}' failed",
|
||||
body: """Job '${env.JOB_NAME} <a href="${env.BUILD_URL}">#${env.BUILD_NUMBER}</a> (${env.BRANCH_NAME})' ended with result ${currentBuild.result}.
|
||||
<br>Check attached console output or <a href="${env.BUILD_URL}">here</a> for a hint on what the problem might be.""",
|
||||
subject: "MySensors branch ${env.BRANCH_NAME} failed to build",
|
||||
body: '''Sir, I am afraid I failed to build branch ${BRANCH_NAME}. Result was '''+currentBuild.result+'''.
|
||||
<br>Please check the attached build log or <a href="${BUILD_URL}">here</a> for a hint on what the problem might be.<p>
|
||||
Changes:<br>
|
||||
${CHANGES}<p>
|
||||
Notable build log lines:<br>
|
||||
${BUILD_LOG_REGEX, regex="^.*?Terminated.*?$", linesBefore=0, linesAfter=0, maxMatches=5, showTruncatedLines=false, escapeHtml=true}<p>
|
||||
My personal evaluation of your pull request is available <a href="${BUILD_URL}The_20Butler_20report/butler.html">here</a>.<p>
|
||||
--<br>
|
||||
Yours sincerely, The Butler, serving the MySensors community''',
|
||||
mimeType: 'text/html', to: 'builds@mysensors.org', attachLog: true, compressLog: false
|
||||
)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user