1
1
def 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" ]
8
4
9
5
node {
6
+ PYCOM_VERSION = get_version()
7
+ GIT_TAG = sh (script : ' git rev-parse --short HEAD' , returnStdout : true ). trim()
8
+
10
9
// get pycom-esp-idf source
11
10
stage(' Checkout' ) {
12
11
checkout scm
@@ -16,51 +15,34 @@ node {
16
15
17
16
stage(' mpy-cross' ) {
18
17
// 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 + ''' \\ ";
21
19
cd mpy-cross;
22
20
make clean;
23
21
make all'''
24
22
}
25
23
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'''
54
30
}
55
31
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
+ }
64
46
65
47
stash includes : ' **/*.bin' , name : ' binary'
66
48
stash includes : ' tests/**' , name : ' tests'
@@ -69,56 +51,23 @@ node {
69
51
stash includes : ' esp32/tools/**' , name : ' esp32Tools'
70
52
}
71
53
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
+ }
103
61
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
120
68
}
121
69
70
+
122
71
def boardBuild (name ) {
123
72
def name_u = name. toUpperCase()
124
73
def name_short = name_u. split(' _' )[0 ]
@@ -131,7 +80,7 @@ def boardBuild(name) {
131
80
}
132
81
def app_bin = name. toLowerCase() + ' .bin'
133
82
return {
134
- release_dir = " ${ JENKINS_HOME} /release/${ JOB_BASE_NAME } "
83
+ release_dir = " ${ JENKINS_HOME} /release/${ JOB_NAME } / " + PYCOM_VERSION + " / " + GIT_TAG + " / "
135
84
sh ''' export PATH=$PATH:/opt/xtensa-esp32-elf/bin;
136
85
export IDF_PATH=${WORKSPACE}/esp-idf;
137
86
cd esp32;
@@ -148,22 +97,79 @@ def boardBuild(name) {
148
97
make TARGET=app -j2 BOARD=''' + name_short + lora_band
149
98
150
99
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);
153
100
mkdir -p firmware_package;
154
- mkdir -p ''' + release_dir + ''' / \$ PYCOM_VERSION/ \$ GIT_TAG ;
101
+ mkdir -p ''' + release_dir + ''' ;
155
102
cd firmware_package;
156
103
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;
158
105
cp ../appimg.bin .;
159
106
cp ../lib/partitions.bin .;
160
107
cp ../../../../boards/''' + name_short + ''' /''' + name_u + ''' /script .;
161
108
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
163
110
}
164
111
}
165
112
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
+ }
169
149
}
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