Update CI pipeline (#1584)

This commit is contained in:
Olivier
2025-11-24 13:46:20 +01:00
committed by GitHub
parent 467979f46c
commit 95c55e90ed
20 changed files with 399 additions and 249 deletions

View File

@@ -1,64 +1,82 @@
#!groovy
def buildArduino(config, String buildFlags, String sketch, String key) {
def root = '/opt/arduino-1.8.19/'
def build_path = 'build'
def build_path_cmd = ' -build-path '+build_path+' '
if (config.nightly_arduino_ide)
{
root = '/opt/arduino-nightly/'
// patch for nightly arduino-builder
}
def jenkins_root = '/var/lib/jenkins/'
def builder = root+'arduino-builder'
def standard_args = ' -warnings=all' //-verbose=true
def builder_specifics = ' -hardware '+root+'hardware -tools '+root+'hardware/tools/avr -tools '+
root+'tools-builder -built-in-libraries '+root+'libraries'
def jenkins_packages = jenkins_root+'.arduino15/packages'
def site_specifics = ' -hardware '+jenkins_packages+' -tools '+jenkins_packages
def repo_specifics = ' -hardware hardware -libraries . '
def build_cmd = builder+standard_args+builder_specifics+site_specifics+repo_specifics+build_path_cmd+buildFlags
sh """#!/bin/bash
printf "\\e[1m\\e[32mBuilding \\e[34m${sketch} \\e[0musing \\e[1m\\e[36m${build_cmd}\\e[0m\\n"
if [ -d ${build_path} ]; then rm -r ${build_path}; fi
mkdir ${build_path}
${build_cmd} ${sketch} 2>> compiler_${key}.log"""
def cli = config.arduino_cli ?: 'arduino-cli'
// Per-key build dir (so different boards dont step on each other)
def build_path = "build/${key}"
def build_path_cmd = "--build-path ${build_path}"
// Optional parallel jobs (defaults to 4 if nothing is set)
def jobs = config.arduino_jobs ?: '4'
def jobsOpt = jobs ? "--jobs ${jobs}" : ""
// If the board-specific flags already contain --warnings, don't add another one
def hasWarnings = (buildFlags =~ /--warnings\b/).find()
def warningsOpt = hasWarnings ? '' : '--warnings all'
def libOpt = ""
if (config.library_root) {
libOpt = "--library \"${config.library_root}\""
}
def build_cmd = "${cli} compile ${buildFlags} ${build_path_cmd} ${warningsOpt} ${libOpt} ${jobsOpt}"
sh """#!/bin/bash
set -e
printf "\\e[1m\\e[32mBuilding \\e[34m${sketch} \\e[0musing \\e[1m\\e[36m${build_cmd}\\e[0m\\n"
mkdir -p "${build_path}"
${build_cmd} "${sketch}" 2>> compiler_${key}.log
"""
}
def parseWarnings(String key) {
warnings canResolveRelativePaths: false, canRunOnFailed: true, categoriesPattern: '',
defaultEncoding: '',
excludePattern: '''.*/EEPROM\\.h,.*/Dns\\.cpp,.*/socket\\.cpp,.*/util\\.h,.*/Servo\\.cpp,
.*/Adafruit_NeoPixel\\.cpp,.*/UIPEthernet.*,.*/SoftwareSerial\\.cpp,.*/PJON/.*,
.*/pins_arduino\\.h,.*/Stream\\.cpp,.*/USBCore\\.cpp,.*/libraries/Wire/.*,
.*/hardware/avr.*,.*/hardware/STM32F1.*,.*/hardware/esp8266.*,.*/hardware/esp32.*,
.*/libraries/SD/.*,.*/libraries/Ethernet/.*''',
def logFile = "compiler_${key}.log"
healthy: '', includePattern: '', messagesPattern: '',
parserConfigurations: [[parserName: 'Arduino/AVR', pattern: 'compiler_'+key+'.log']],
unHealthy: '', unstableNewAll: '0', unstableTotalAll: '0'
sh """#!/bin/bash
echo "Compiler warnings/errors:"
printf "\\e[101m"
cat compiler_${key}.log
printf "\\e[0m"
rm compiler_${key}.log"""
warnings canResolveRelativePaths: false, canRunOnFailed: true, categoriesPattern: '',
defaultEncoding: '',
excludePattern: '''.*/EEPROM\\.h,.*/Dns\\.cpp,.*/socket\\.cpp,.*/util\\.h,.*/Servo\\.cpp,
.*/Adafruit_NeoPixel\\.cpp,.*/UIPEthernet.*,.*/SoftwareSerial\\.cpp,.*/PJON/.*,
.*/pins_arduino\\.h,.*/Stream\\.cpp,.*/USBCore\\.cpp,.*/hardware/.*,.*/libraries/.*''',
healthy: '', includePattern: '', messagesPattern: '',
parserConfigurations: [[parserName: 'Arduino/AVR', pattern: logFile]],
unHealthy: '', unstableNewAll: '0', unstableTotalAll: '0'
sh """#!/bin/bash
echo "Compiler warnings/errors:"
printf "\\e[101m"
if [ -f "${logFile}" ]; then
cat "${logFile}"
rm "${logFile}"
else
echo "Log file ${logFile} not found (build may have failed before compilation)."
fi
printf "\\e[0m"
"""
}
// ---------------------------
// Board-specific wrappers
// ---------------------------
def buildMySensorsMicro(config, sketches, String key) {
def fqbn = '-fqbn=MySensors:avr:MysensorsMicro:cpu=1Mhz'
def fqbn = '--fqbn MySensors:avr:MysensorsMicro:cpu=1Mhz'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (MySensorsMicro - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_MySensorsMicro')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_MySensorsMicro')
}
}
} catch (ex) {
@@ -81,22 +99,22 @@ def buildMySensorsMicro(config, sketches, String key) {
}
def buildMySensorsGw(config, sketches, String key) {
def fqbn = '-fqbn MySensors:samd:mysensors_gw_native'
def fqbn = '--fqbn MySensors:samd:mysensors_gw_native'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (MySensorsGW - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_MySensorsGW')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketch.path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino') {
buildArduino(config, fqbn, sketch.path, key+'_MySensorsGW')
}
}
} catch (ex) {
@@ -119,19 +137,19 @@ def buildMySensorsGw(config, sketches, String key) {
}
def buildArduinoUno(config, sketches, String key) {
def fqbn = '-fqbn arduino:avr:uno'
def fqbn = '--fqbn arduino:avr:uno'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (Arduino Uno - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_ArduinoUno')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_ArduinoUno')
}
}
} catch (ex) {
@@ -154,19 +172,19 @@ def buildArduinoUno(config, sketches, String key) {
}
def buildArduinoMega(config, sketches, String key) {
def fqbn = '-fqbn arduino:avr:mega:cpu=atmega2560'
def fqbn = '--fqbn arduino:avr:mega:cpu=atmega2560'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (Arduino Mega - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_ArduinoMega')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_ArduinoMega')
}
}
} catch (ex) {
@@ -177,7 +195,8 @@ def buildArduinoMega(config, sketches, String key) {
parseWarnings(key+'_ArduinoMega')
}
if (currentBuild.currentResult == 'UNSTABLE') {
config.pr.setBuildStatus(config, config, 'ERROR', 'Toll gate (Arduino Mega - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
// fixed: removed duplicate config argument
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (Arduino Mega - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
if (config.is_pull_request) {
error 'Terminated due to warnings found'
}
@@ -189,19 +208,19 @@ def buildArduinoMega(config, sketches, String key) {
}
def buildSTM32F1(config, sketches, String key) {
def fqbn = '-fqbn STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8,upload_method=swdMethod,xserial=generic,usb=none,xusb=FS,opt=osstd,dbg=none,rtlib=nano'
def fqbn = '--fqbn STMicroelectronics:stm32:GenF1:pnum=BLUEPILL_F103C8,upload_method=swdMethod,xserial=generic,usb=none,xusb=FS,opt=osstd,dbg=none,rtlib=nano'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (STM32F1 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_STM32F1')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_STM32F1')
}
}
} catch (ex) {
@@ -224,19 +243,19 @@ def buildSTM32F1(config, sketches, String key) {
}
def buildSTM32F4(config, sketches, String key) {
def fqbn = '-fqbn STMicroelectronics:stm32:GenF4:pnum=BLACKPILL_F411CE,upload_method=swdMethod,xserial=generic,usb=none,xusb=FS,opt=osstd,dbg=none,rtlib=nano'
def fqbn = '--fqbn STMicroelectronics:stm32:GenF4:pnum=BLACKPILL_F411CE,upload_method=swdMethod,xserial=generic,usb=none,xusb=FS,opt=osstd,dbg=none,rtlib=nano'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (STM32F4 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_STM32F4')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_STM32F4')
}
}
} catch (ex) {
@@ -259,24 +278,24 @@ def buildSTM32F4(config, sketches, String key) {
}
def buildESP8266(config, sketches, String key) {
def fqbn = '-fqbn=esp8266:esp8266:generic:xtal=80,vt=flash,exception=disabled,ResetMethod=ck,CrystalFreq=26,FlashFreq=40,FlashMode=dout,eesz=512K,led=2,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200'
def fqbn = '--fqbn esp8266:esp8266:generic:xtal=80,vt=flash,exception=disabled,ResetMethod=ck,CrystalFreq=26,FlashFreq=40,FlashMode=dout,eesz=512K,led=2,ip=lm2f,dbg=Disabled,lvl=None____,wipe=none,baud=115200'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (ESP8266 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketches[sketch].path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino' &&
sketches[sketch].path != config.library_root+'examples/SoilMoistSensor/SoilMoistSensor.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_ESP8266')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketch.path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketch.path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketch.path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino' &&
sketch.path != config.library_root+'examples/SoilMoistSensor/SoilMoistSensor.ino') {
buildArduino(config, fqbn, sketch.path, key+'_ESP8266')
}
}
} catch (ex) {
@@ -299,33 +318,34 @@ def buildESP8266(config, sketches, String key) {
}
def buildESP32(config, sketches, String key) {
def fqbn = '-fqbn esp32:esp32:esp32:PartitionScheme=default,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=none -warnings=default'
// Note: override global --warnings with "default" for ESP32
def fqbn = '--fqbn esp32:esp32:esp32:PartitionScheme=default,FlashMode=qio,FlashFreq=80,FlashSize=4M,UploadSpeed=921600,DebugLevel=none --warnings default'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (ESP32 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketches[sketch].path != config.library_root+'examples/DustSensor/DustSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketches[sketch].path != config.library_root+'examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/LightSensor/LightSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/LogOTANode/LogOTANode.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensor/MotionSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/PassiveNode/PassiveNode.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/SoilMoistSensor/SoilMoistSensor.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_ESP32')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketch.path != config.library_root+'examples/BinarySwitchSleepSensor/BinarySwitchSleepSensor.ino' &&
sketch.path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketch.path != config.library_root+'examples/DustSensor/DustSensor.ino' &&
sketch.path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketch.path != config.library_root+'examples/EnergyMeterPulseSensor/EnergyMeterPulseSensor.ino' &&
sketch.path != config.library_root+'examples/LightSensor/LightSensor.ino' &&
sketch.path != config.library_root+'examples/LogOTANode/LogOTANode.ino' &&
sketch.path != config.library_root+'examples/MotionSensor/MotionSensor.ino' &&
sketch.path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketch.path != config.library_root+'examples/PassiveNode/PassiveNode.ino' &&
sketch.path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino' &&
sketch.path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketch.path != config.library_root+'examples/SoilMoistSensor/SoilMoistSensor.ino') {
buildArduino(config, fqbn, sketch.path, key+'_ESP32')
}
}
} catch (ex) {
@@ -345,53 +365,53 @@ def buildESP32(config, sketches, String key) {
} else {
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (ESP32 - '+key+')', 'Pass', '')
}
}
}
def buildnRF5(config, sketches, String key) {
def fqbn = '-fqbn sandeepmistry:nRF5:Generic_nRF52832:softdevice=none,lfclk=lfxo'
def buildnRF52(config, sketches, String key) {
def fqbn = '--fqbn sandeepmistry:nRF5:Generic_nRF52832:softdevice=none,lfclk=lfxo'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (nRF5 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
for (sketch = 0; sketch < sketches.size(); sketch++) {
if (sketches[sketch].path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketches[sketch].path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketches[sketch].path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketches[sketch].path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketches[sketch].path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketches[sketch].path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketches[sketch].path, key+'_nRF5')
sketches.each { sketch ->
if (sketch.path != config.library_root+'examples/BatteryPoweredSensor/BatteryPoweredSensor.ino' &&
sketch.path != config.library_root+'examples/CO2Sensor/CO2Sensor.ino' &&
sketch.path != config.library_root+'examples/DustSensorDSM/DustSensorDSM.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266/GatewayESP8266.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266MQTTClient/GatewayESP8266MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266SecureMQTTClient/GatewayESP8266SecureMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayGSMMQTTClient/GatewayGSMMQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewayESP8266OTA/GatewayESP8266OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32/GatewayESP32.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32OTA/GatewayESP32OTA.ino' &&
sketch.path != config.library_root+'examples/GatewayESP32MQTTClient/GatewayESP32MQTTClient.ino' &&
sketch.path != config.library_root+'examples/GatewaySerialRS485/GatewaySerialRS485.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100/GatewayW5100.ino' &&
sketch.path != config.library_root+'examples/GatewayW5100MQTTClient/GatewayW5100MQTTClient.ino' &&
sketch.path != config.library_root+'examples/MotionSensorRS485/MotionSensorRS485.ino' &&
sketch.path != config.library_root+'examples/SensebenderGatewaySerial/SensebenderGatewaySerial.ino') {
buildArduino(config, fqbn, sketch.path, key+'_nRF52')
}
}
} catch (ex) {
echo "Build failed with: "+ ex.toString()
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF5 - '+key+')', 'Build error', '${BUILD_URL}')
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF52 - '+key+')', 'Build error', '${BUILD_URL}')
throw ex
} finally {
parseWarnings(key+'_nRF5')
parseWarnings(key+'_nRF52')
}
if (currentBuild.currentResult == 'UNSTABLE') {
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (nRF5 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
config.pr.setBuildStatus(config, 'ERROR', 'Toll gate (nRF52 - '+key+')', 'Warnings found', '${BUILD_URL}warnings2Result/new')
if (config.is_pull_request) {
error 'Terminated due to warnings found'
}
} else if (currentBuild.currentResult == 'FAILURE') {
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF5 - '+key+')', 'Build error', '${BUILD_URL}')
config.pr.setBuildStatus(config, 'FAILURE', 'Toll gate (nRF52 - '+key+')', 'Build error', '${BUILD_URL}')
} else {
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (nRF5 - '+key+')', 'Pass', '')
config.pr.setBuildStatus(config, 'SUCCESS', 'Toll gate (nRF52 - '+key+')', 'Pass', '')
}
}
def buildnRF52832(config, sketches, String key) {
def fqbn = '-fqbn=MySensors:nRF5:MyBoard_nRF52832:bootcode=none,lfclk=lfxo,reset=notenable'
def fqbn = '--fqbn MySensors:nRF5:MyBoard_nRF52832:bootcode=none,lfclk=lfxo,reset=notenable'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (nRF52832 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
buildArduino(config, fqbn, 'hardware/MySensors/nRF5/libraries/MyBoardNRF5/examples/MyBoardNRF5/MyBoardNRF5.ino', key+'_nRF52832')
@@ -415,7 +435,7 @@ def buildnRF52832(config, sketches, String key) {
}
def buildnRF51822(config, sketches, String key) {
def fqbn = '-fqbn=MySensors:nRF5:MyBoard_nRF51822:chip=xxaa,bootcode=none,lfclk=lfxo'
def fqbn = '--fqbn MySensors:nRF5:MyBoard_nRF51822:chip=xxaa,bootcode=none,lfclk=lfxo'
config.pr.setBuildStatus(config, 'PENDING', 'Toll gate (nRF51822 - '+key+')', 'Building...', '${BUILD_URL}flowGraphTable/')
try {
buildArduino(config, fqbn, 'hardware/MySensors/nRF5/libraries/MyBoardNRF5/examples/MyBoardNRF5/MyBoardNRF5.ino', key+'_nRF51822')

View File

@@ -16,13 +16,13 @@ def call(config) {
dir(config.repository_root) {
step([$class: 'GitChangelogRecorder', config: [configFile: 'git-changelog-settings.json',
createFileTemplateContent: '''
# Changelog
{{#commits}}
### {{{messageTitle}}}
{{{messageBody}}}
[{{hash}}](https://github.com/mysensors/MySensors/commit/{{hash}}) by {{authorName}} at *{{commitTime}}*
{{/commits}}
''',
# Changelog
{{#commits}}
### {{{messageTitle}}}
{{{messageBody}}}
[{{hash}}](https://github.com/mysensors/MySensors/commit/{{hash}}) by {{authorName}} at *{{commitTime}}*
{{/commits}}
''',
createFileTemplateFile: '', createFileUseTemplateContent: true,
createFileUseTemplateFile: false, customIssues: [[link: '', name: '', pattern: '', title: ''],
[link: '', name: '', pattern: '', title: '']], dateFormat: 'YYYY-MM-dd HH:mm:ss',
@@ -54,10 +54,10 @@ def call(config) {
dir(config.repository_root) {
step([$class: 'GitChangelogRecorder', config: [configFile: 'git-changelog-settings.json',
createFileTemplateContent: '''
{{#commits}}
{{{messageTitle}}}
{{/commits}}
''',
{{#commits}}
{{{messageTitle}}}
{{/commits}}
''',
createFileTemplateFile: '', createFileUseTemplateContent: true,
createFileUseTemplateFile: false, customIssues: [[link: '', name: '', pattern: '', title: ''],
[link: '', name: '', pattern: '', title: '']], dateFormat: 'YYYY-MM-dd HH:mm:ss',
@@ -81,12 +81,12 @@ def call(config) {
])
step([$class: 'GitChangelogRecorder', config: [configFile: 'git-changelog-settings.json',
createFileTemplateContent: '''
{{#commits}}
{{#messageBodyItems}}
{{.}}
{{/messageBodyItems}}
{{/commits}}
''',
{{#commits}}
{{#messageBodyItems}}
{{.}}
{{/messageBodyItems}}
{{/commits}}
''',
createFileTemplateFile: '', createFileUseTemplateContent: true,
createFileUseTemplateFile: false, customIssues: [[link: '', name: '', pattern: '', title: ''],
[link: '', name: '', pattern: '', title: '']], dateFormat: 'YYYY-MM-dd HH:mm:ss',

View File

@@ -15,9 +15,9 @@ def buildLinux(config, String configuration, String key) {
warnings canComputeNew: false, canResolveRelativePaths: false,
defaultEncoding: '',
excludePattern: '''.*/EEPROM\\.h,.*/Dns\\.cpp,.*/socket\\.cpp,.*/util\\.h,.*/Servo\\.cpp,
.*/Adafruit_NeoPixel\\.cpp,.*/UIPEthernet.*,.*/SoftwareSerial\\.cpp,
.*/pins_arduino\\.h,.*/Stream\\.cpp,.*/USBCore\\.cpp,.*/Wire\\.cpp,
.*/hardware/esp8266.*,.*/libraries/SD/.*''',
.*/Adafruit_NeoPixel\\.cpp,.*/UIPEthernet.*,.*/SoftwareSerial\\.cpp,
.*/pins_arduino\\.h,.*/Stream\\.cpp,.*/USBCore\\.cpp,.*/Wire\\.cpp,
.*/hardware/.*,.*/libraries/.*''',
failedTotalAll: '', healthy: '', includePattern: '', messagesPattern: '',
parserConfigurations: [[parserName: 'GNU Make + GNU C Compiler (gcc)', pattern: config.library_root+'compiler_'+key+'.log']],
unHealthy: '', unstableTotalAll: '0'

View File

@@ -1,7 +1,9 @@
#!groovy
def call(Closure body) {
def config = [:]
def config = [
arduino_cli: '/opt/arduino-cli/arduino-cli',
]
body.resolveStrategy = Closure.DELEGATE_FIRST
body.delegate = config
body()
@@ -30,20 +32,19 @@ def call(Closure body) {
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (Arduino Uno - Examples)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (ESP32 - Tests)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (ESP8266 - Tests)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF52832 - Tests)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF52 - Tests)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (STM32F1 - Tests)', 'Not run yet...', '')
cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (STM32F4 - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (MySensorsMicro - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (MySensorsGW - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF51822 - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF5 - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (Arduino Mega - Tests)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (MySensorsMicro - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (MySensorsGW - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF52832 - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF51822 - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF5 - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (nRF52 - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (STM32F1 - Examples)', 'Not run yet...', '')
// cfg.pr.setBuildStatus(cfg, 'PENDING', 'Toll gate (STM32F4 - Examples)', 'Not run yet...', '')
}
@@ -146,7 +147,8 @@ def call(Closure body) {
)
}
config.tests = findFiles(glob: "${config.library_root}tests/**/*.ino")
config.tests_fast = findFiles(glob: "${config.library_root}tests/fast/**/*.ino")
config.tests_nightly = findFiles(glob: "${config.library_root}tests/nightly/**/*.ino")
config.examples = findFiles(glob: "${config.library_root}examples/**/*.ino")
}
@@ -177,75 +179,120 @@ def call(Closure body) {
}
}
}, ArduinoBuilds: {
lock(quantity: 1, resource: 'arduinoEnv') {
stage('ArduinoUno (Tests)') {
arduino.buildArduinoUno(config, config.tests, 'Tests')
stage('ArduinoBuilds') {
// Run all Arduino builds in parallel
def arduinoBranches = [:]
arduinoBranches['ArduinoUno (Tests)'] = {
stage('ArduinoUno (Tests)') {
arduino.buildArduinoUno(config, config.tests_fast, 'Tests')
}
}
stage('ArduinoUno (Examples)') {
arduino.buildArduinoUno(config, config.examples, 'Examples')
arduinoBranches['ArduinoUno (Examples)'] = {
stage('ArduinoUno (Examples)') {
arduino.buildArduinoUno(config, config.examples, 'Examples')
}
}
stage('ESP32 (Tests)') {
arduino.buildESP32(config, config.tests, 'Tests')
arduinoBranches['nRF52 (Tests)'] = {
stage('nRF52 (Tests)') {
arduino.buildnRF52(config, config.tests_fast, 'Tests')
}
}
stage('nRF52832 (Tests)') {
arduino.buildnRF52832(config, config.tests, 'Tests')
arduinoBranches['STM32F1 (Tests)'] = {
stage('STM32F1 (Tests)') {
arduino.buildSTM32F1(config, config.tests_fast, 'Tests')
}
}
stage('ESP8266 (Tests)') {
arduino.buildESP8266(config, config.tests, 'Tests')
arduinoBranches['STM32F4 (Tests)'] = {
stage('STM32F4 (Tests)') {
arduino.buildSTM32F4(config, config.tests_fast, 'Tests')
}
}
stage('nRF5 (Tests)') {
arduino.buildnRF5(config, config.tests, 'Tests')
arduinoBranches['ESP32 (Tests)'] = {
stage('ESP32 (Tests)') {
arduino.buildESP32(config, config.tests_fast, 'Tests')
}
}
stage('STM32F1 (Tests)') {
arduino.buildSTM32F1(config, config.tests, 'Tests')
}
stage('STM32F4 (Tests)') {
arduino.buildSTM32F4(config, config.tests, 'Tests')
arduinoBranches['ESP8266 (Tests)'] = {
stage('ESP8266 (Tests)') {
arduino.buildESP8266(config, config.tests_fast, 'Tests')
}
}
/*
stage('MySensorsMicro (tests)') {
arduino.buildMySensorsMicro(config, config.tests, 'Tests')
arduinoBranches['MySensorsMicro (tests)'] = {
stage('MySensorsMicro (tests)') {
arduino.buildMySensorsMicro(config, config.tests_fast, 'Tests')
}
}
stage('MySensorsGW (tests)') {
arduino.buildMySensorsGw(config, config.tests, 'Tests')
arduinoBranches['MySensorsGW (tests)'] = {
stage('MySensorsGW (tests)') {
arduino.buildMySensorsGw(config, config.tests_fast, 'Tests')
}
}
stage('nRF51822 (tests)') {
arduino.buildnRF51822(config, config.tests, 'Tests')
arduinoBranches['nRF51822 (tests)'] = {
stage('nRF51822 (tests)') {
arduino.buildnRF51822(config, config.tests_fast, 'Tests')
}
}
stage('ArduinoMega (tests)') {
arduino.buildArduinoMega(config, config.tests, 'Tests')
arduinoBranches['ArduinoMega (tests)'] = {
stage('ArduinoMega (tests)') {
arduino.buildArduinoMega(config, config.tests_fast, 'Tests')
}
}
stage('MySensorsMicro (examples)') {
arduino.buildMySensorsMicro(config, config.examples, 'Examples')
arduinoBranches['MySensorsMicro (examples)'] = {
stage('MySensorsMicro (examples)') {
arduino.buildMySensorsMicro(config, config.examples, 'Examples')
}
}
stage('MySensorsGW (examples)') {
arduino.buildMySensorsGw(config, config.examples, 'Examples')
arduinoBranches['MySensorsGW (examples)'] = {
stage('MySensorsGW (examples)') {
arduino.buildMySensorsGw(config, config.examples, 'Examples')
}
}
stage('nRF52832 (examples)') {
arduino.buildnRF52832(config, config.examples, 'Examples')
arduinoBranches['nRF52832 (examples)'] = {
stage('nRF52832 (examples)') {
arduino.buildnRF52832(config, config.examples, 'Examples')
}
}
stage('nRF51822 (examples)') {
arduino.buildnRF51822(config, config.examples, 'Examples')
arduinoBranches['nRF51822 (examples)'] = {
stage('nRF51822 (examples)') {
arduino.buildnRF51822(config, config.examples, 'Examples')
}
}
stage('nRF5 (examples)') {
arduino.buildnRF5(config, config.examples, 'Examples')
arduinoBranches['nRF5 (examples)'] = {
stage('nRF5 (examples)') {
arduino.buildnRF5(config, config.examples, 'Examples')
}
}
stage('ESP8266 (examples)') {
arduino.buildESP8266(config, config.examples, 'Examples')
arduinoBranches['ESP8266 (examples)'] = {
stage('ESP8266 (examples)') {
arduino.buildESP8266(config, config.examples, 'Examples')
}
}
stage('ESP32 (examples)') {
arduino.buildESP32(config, config.examples, 'Examples')
arduinoBranches['ESP32 (examples)'] = {
stage('ESP32 (examples)') {
arduino.buildESP32(config, config.examples, 'Examples')
}
}
stage('STM32F1 (Examples)') {
arduino.buildSTM32F1(config, config.tests, 'Examples')
arduinoBranches['STM32F1 (Examples)'] = {
stage('STM32F1 (Examples)') {
arduino.buildSTM32F1(config, config.examples, 'Examples')
}
}
stage('STM32F4 (Examples)') {
arduino.buildSTM32F4(config, config.tests, 'Examples')
arduinoBranches['STM32F4 (Examples)'] = {
stage('STM32F4 (Examples)') {
arduino.buildSTM32F4(config, config.examples, 'Examples')
}
}
stage('ArduinoMega (examples)') {
arduino.buildArduinoMega(config, config.examples, 'Examples')
arduinoBranches['ArduinoMega (examples)'] = {
stage('ArduinoMega (examples)') {
arduino.buildArduinoMega(config, config.examples, 'Examples')
}
}
*/
parallel arduinoBranches
}
}, failFast: true
}

View File

@@ -0,0 +1,27 @@
/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2025 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*/
#define MY_DEBUG
#define MY_RADIO_RF24
#include <MySensors.h>
void setup() {}
void loop() {}

View File

@@ -0,0 +1,29 @@
/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2025 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*/
#define MY_DEBUG
#define MY_RADIO_RFM95
#define MY_RFM95_ENABLE_ENCRYPTION
#define MY_DEBUG_VERBOSE_RFM95
#include <MySensors.h>
void setup() {}
void loop() {}

View File

@@ -0,0 +1,27 @@
/*
* The MySensors Arduino library handles the wireless radio link and protocol
* between your home built sensors/actuators and HA controller of choice.
* The sensors forms a self healing radio network with optional repeaters. Each
* repeater and gateway builds a routing tables in EEPROM which keeps track of the
* network topology allowing messages to be routed to nodes.
*
* Created by Henrik Ekblad <henrik.ekblad@mysensors.org>
* Copyright (C) 2013-2025 Sensnology AB
* Full contributor list: https://github.com/mysensors/MySensors/graphs/contributors
*
* Documentation: http://www.mysensors.org
* Support Forum: http://forum.mysensors.org
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* version 2 as published by the Free Software Foundation.
*
*******************************
*/
#define MY_DEBUG
#define MY_GATEWAY_SERIAL
#include <MySensors.h>
void setup() {}
void loop() {}