Skip to content
This repository was archived by the owner on Sep 16, 2024. It is now read-only.

Commit 062aeba

Browse files
committed
Updated Jenkinsfile
1 parent 2e7db85 commit 062aeba

File tree

1 file changed

+106
-100
lines changed

1 file changed

+106
-100
lines changed

Jenkinsfile

Lines changed: 106 additions & 100 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,11 @@
11
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"]
84

95
node {
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+
12271
def 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

Comments
 (0)