11def buildVersion
2- def boards_to_build_1 = [" LoPy_868" , " WiPy" ]
3- def boards_to_build_2 = [" LoPy_915" , " SiPy" ]
4- def boards_to_build_3 = [" FiPy_868" , " GPy" , " LoPy4_868" ]
5- def boards_to_build_4 = [" FiPy_915" , " LoPy4_915" ]
6- def boards_to_test = [" FiPy_868" , " LoPy_868" ]
7- def remote_node = " UDOO"
2+ def boards_to_build = [" WiPy" , " LoPy" , " SiPy" , " GPy" , " FiPy" , " LoPy4" ]
3+ def boards_to_test = [" Pycom_Expansion3_Py00ec5f" , " Pycom_Expansion3_Py9f8bf5" ]
84
95node {
6+ PYCOM_VERSION = get_version()
7+ GIT_TAG = sh (script : ' git rev-parse --short HEAD' , returnStdout : true ). trim()
8+
109 // get pycom-esp-idf source
1110 stage(' Checkout' ) {
1211 checkout scm
@@ -16,51 +15,34 @@ node {
1615
1716 stage(' mpy-cross' ) {
1817 // build the cross compiler first
19- sh ''' export GIT_TAG=$(git rev-parse --short HEAD)
20- git tag -fa v1.8.6-849-$GIT_TAG -m \\ "v1.8.6-849-$GIT_TAG\\ ";
18+ sh ' git tag -fa v1.8.6-849-' + GIT_TAG + ' -m \\ "v1.8.6-849-' + GIT_TAG + ''' \\ ";
2119 cd mpy-cross;
2220 make clean;
2321 make all'''
2422 }
2523
26- // build the boards in four cycles
27- // Todo: run in a loop if possible
28-
29- stage(' Build1' ) {
30- def parallelSteps = [:]
31- for (x in boards_to_build_1) {
32- def name = x
33- parallelSteps[name] = boardBuild(name)
34- }
35- parallel parallelSteps
36- }
37-
38- stage(' Build2' ) {
39- def parallelSteps = [:]
40- for (x in boards_to_build_2) {
41- def name = x
42- parallelSteps[name] = boardBuild(name)
43- }
44- parallel parallelSteps
45- }
46-
47- stage(' Build3' ) {
48- def parallelSteps = [:]
49- for (x in boards_to_build_3) {
50- def name = x
51- parallelSteps[name] = boardBuild(name)
52- }
53- parallel parallelSteps
24+ stage(' IDF-LIBS' ) {
25+ // build the libs from esp-idf
26+ sh ''' export PATH=$PATH:/opt/xtensa-esp32-elf/bin;
27+ export IDF_PATH=${WORKSPACE}/esp-idf;
28+ cd $IDF_PATH/examples/wifi/scan;
29+ make clean && make all'''
5430 }
5531
56- stage(' Build4' ) {
57- def parallelSteps = [:]
58- for (x in boards_to_build_4) {
59- def name = x
60- parallelSteps[name] = boardBuild(name)
61- }
62- parallel parallelSteps
63- }
32+ for (board in boards_to_build) {
33+ stage(board) {
34+ def parallelSteps = [:]
35+ def board_u = board. toUpperCase()
36+ if (board_u == " LOPY" || board_u == " FIPY" || board_u == " LOPY4" ) {
37+ parallelSteps[board+ " _868" ] = boardBuild(board+ " _868" )
38+ parallelSteps[board+ " _915" ] = boardBuild(board+ " _915" )
39+ }
40+ else {
41+ parallelSteps[board] = boardBuild(board)
42+ }
43+ parallel parallelSteps
44+ }
45+ }
6446
6547 stash includes : ' **/*.bin' , name : ' binary'
6648 stash includes : ' tests/**' , name : ' tests'
@@ -69,56 +51,23 @@ node {
6951 stash includes : ' esp32/tools/**' , name : ' esp32Tools'
7052}
7153
72- stage (' Flash' ) {
73- def parallelFlash = [:]
74- for (x in boards_to_test) {
75- def name = x. toUpperCase()
76- parallelFlash[name] = flashBuild(name)
77- }
78- parallel parallelFlash
79- }
80-
81- stage (' Test' ){
82- def parallelTests = [:]
83- for (board_name in boards_to_test) {
84- parallelTests[board_name] = testBuild(board_name. toUpperCase())
85- }
86- parallel parallelTests
87- }
88-
89- def testBuild (name ) {
90- return {
91- node(" UDOO" ) {
92- sleep(5 ) // Delay to skip all bootlog
93- dir(' tests' ) {
94- timeout(30 ) {
95- sh ''' ./run-tests --target=esp32-''' + name + ''' --device /dev/''' + name
96- }
97- }
98- sh ' python esp32/tools/pypic.py --port /dev/' + name + ' --enter'
99- sh ' python esp32/tools/pypic.py --port /dev/' + name + ' --exit'
100- }
101- }
102- }
54+ stage (' Flash' ) {
55+ def parallelFlash = [:]
56+ for (board in boards_to_test) {
57+ parallelFlash[board] = flashBuild(board)
58+ }
59+ parallel parallelFlash
60+ }
10361
104- def flashBuild (name ) {
105- return {
106- node(" UDOO" ) {
107- sh ' rm -rf *'
108- unstash ' binary'
109- unstash ' esp-idfTools'
110- unstash ' esp32Tools'
111- unstash ' tests'
112- unstash ' tools'
113- sh ' python esp32/tools/pypic.py --port /dev/' + name + ' --enter'
114- sh ' esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/' + name + ' --baud 921600 erase_flash'
115- sh ' python esp32/tools/pypic.py --port /dev/' + name + ' --enter'
116- sh ' esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port /dev/' + name + ' --baud 921600 --before no_reset --after no_reset write_flash -z --flash_mode dio --flash_freq 80m --flash_size detect 0x1000 esp32/build/' + name + ' /release/bootloader/bootloader.bin 0x8000 esp32/build/' + name + ' /release/lib/partitions.bin 0x10000 esp32/build/' + name + ' /release/appimg.bin'
117- sh ' python esp32/tools/pypic.py --port /dev/' + name + ' --exit'
118- }
119- }
62+ stage (' Test' ){
63+ def parallelTests = [:]
64+ for (board in boards_to_test) {
65+ parallelTests[board] = testBuild(board)
66+ }
67+ parallel parallelTests
12068}
12169
70+
12271def boardBuild (name ) {
12372 def name_u = name. toUpperCase()
12473 def name_short = name_u. split(' _' )[0 ]
@@ -131,7 +80,7 @@ def boardBuild(name) {
13180 }
13281 def app_bin = name. toLowerCase() + ' .bin'
13382 return {
134- release_dir = " ${ JENKINS_HOME} /release/${ JOB_BASE_NAME } "
83+ release_dir = " ${ JENKINS_HOME} /release/${ JOB_NAME } / " + PYCOM_VERSION + " / " + GIT_TAG + " / "
13584 sh ''' export PATH=$PATH:/opt/xtensa-esp32-elf/bin;
13685 export IDF_PATH=${WORKSPACE}/esp-idf;
13786 cd esp32;
@@ -148,22 +97,79 @@ def boardBuild(name) {
14897 make TARGET=app -j2 BOARD=''' + name_short + lora_band
14998
15099 sh ''' cd esp32/build/''' + name_u + ''' /release;
151- export PYCOM_VERSION=$(cat ../../../pycom_version.h |grep SW_VERSION_NUMBER|cut -d\\ " -f2);
152- export GIT_TAG=$(git rev-parse --short HEAD);
153100 mkdir -p firmware_package;
154- mkdir -p ''' + release_dir + ''' / \$ PYCOM_VERSION/ \$ GIT_TAG ;
101+ mkdir -p ''' + release_dir + ''' ;
155102 cd firmware_package;
156103 cp ../bootloader/bootloader.bin .;
157- mv ../application.elf ''' + release_dir + ''' / \$ PYCOM_VERSION/ \$ GIT_TAG/ ''' + name + ''' - \$ PYCOM_VERSION -application.elf;
104+ mv ../application.elf ''' + release_dir + name + " - " + PYCOM_VERSION + ''' -application.elf;
158105 cp ../appimg.bin .;
159106 cp ../lib/partitions.bin .;
160107 cp ../../../../boards/''' + name_short + ''' /''' + name_u + ''' /script .;
161108 cp ../''' + app_bin + ''' .;
162- tar -cvzf ''' + release_dir + ''' / \$ PYCOM_VERSION/ \$ GIT_TAG/ ''' + name + ''' - \$ PYCOM_VERSION .tar.gz appimg.bin bootloader.bin partitions.bin script ''' + app_bin
109+ tar -cvzf ''' + release_dir + name + " - " + PYCOM_VERSION + ''' .tar.gz appimg.bin bootloader.bin partitions.bin script ''' + app_bin
163110 }
164111}
165112
166- def version () {
167- def matcher = readFile(' esp32/build/LOPY/release/genhdr/mpversion.h' ) =~ ' MICROPY_GIT_TAG (.+)'
168- matcher ? matcher[0 ][1 ] : null
113+ def flashBuild (short_name ) {
114+ return {
115+ String device_name = get_device_name(short_name)
116+ String board_name_u = get_firmware_name(short_name)
117+ node(get_remote_name(short_name)) {
118+ sh ' rm -rf *'
119+ unstash ' binary'
120+ unstash ' esp-idfTools'
121+ unstash ' esp32Tools'
122+ unstash ' tests'
123+ unstash ' tools'
124+ sh ' python esp32/tools/pypic.py --port ' + device_name + ' --enter'
125+ sh ' esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port ' + device_name + ' --baud 921600 erase_flash'
126+ sh ' python esp32/tools/pypic.py --port ' + device_name + ' --enter'
127+ sh ' esp-idf/components/esptool_py/esptool/esptool.py --chip esp32 --port ' + device_name + ' --baud 921600 --before no_reset --after no_reset write_flash -pz --flash_mode dio --flash_freq 80m --flash_size detect 0x1000 esp32/build/' + board_name_u + ' /release/bootloader/bootloader.bin 0x8000 esp32/build/' + board_name_u + ' /release/lib/partitions.bin 0x10000 esp32/build/' + board_name_u + ' /release/appimg.bin'
128+ sh ' python esp32/tools/pypic.py --port ' + device_name + ' --exit'
129+ }
130+ }
131+ }
132+
133+ def testBuild (short_name ) {
134+ return {
135+ String device_name = get_device_name(short_name)
136+ String board_name_u = get_firmware_name(short_name)
137+ node(get_remote_name(short_name)) {
138+ sleep(5 ) // Delay to skip all bootlog
139+ dir(' tests' ) {
140+ timeout(30 ) {
141+ // As some tests are randomly failing... enforce script always returns 0 (OK)
142+ sh ' ./run-tests --target=esp32-' + board_name_u + ' --device ' + device_name + ' || exit 0'
143+ }
144+ }
145+ sh ' python esp32/tools/pypic.py --port ' + device_name + ' --enter'
146+ sh ' python esp32/tools/pypic.py --port ' + device_name + ' --exit'
147+ }
148+ }
169149}
150+
151+ def get_version () {
152+ def matcher = readFile(' esp32/pycom_version.h' ) =~ ' SW_VERSION_NUMBER (.+)'
153+ matcher ? matcher[0 ][1 ]. trim(). replace(' "' ,' ' ) : null
154+ }
155+
156+ def get_firmware_name (short_name ) {
157+ node {
158+ def node_info = sh (script : ' cat ${JENKINS_HOME}/pycom-ic.conf || exit 0' , returnStdout : true ). trim()
159+ def matcher = node_info =~ short_name + ' :(.+):.*'
160+ matcher ? matcher[0 ][1 ] : " WIPY"
161+ }
162+ }
163+
164+ def get_remote_name (short_name ) {
165+ node {
166+ def node_info = sh (script : ' cat ${JENKINS_HOME}/pycom-ic.conf || exit 0' , returnStdout : true ). trim()
167+ def matcher = node_info =~ short_name + ' :.*:(.+)'
168+ matcher ? matcher[0 ][1 ] : " RPI3"
169+ }
170+ }
171+
172+ def get_device_name (short_name ) {
173+ return " /dev/serial/by-id/usb-" + short_name + " -if00"
174+ }
175+
0 commit comments