2
2
import glob
3
3
import sys
4
4
import subprocess
5
+ from subprocess import Popen , PIPE
5
6
import time
6
7
8
+ SUCCEEDED = "\033 [32msucceeded\033 [0m"
9
+ FAILED = "\033 [31mfailed\033 [0m"
10
+ SKIPPED = "\033 [33mskipped\033 [0m"
11
+ WARNING = "\033 [31mwarnings\033 [0m"
12
+
7
13
all_warnings = False
8
14
exit_status = 0
9
15
success_count = 0
10
16
fail_count = 0
11
17
skip_count = 0
12
18
13
- build_format = '| {:20} | {:35} | {:9 } | {:6} |'
19
+ build_format = '| {:20} | {:35} | {:18 } | {:6} |'
14
20
build_separator = '-' * 83
15
21
16
22
default_boards = [ 'cluenrf52840' , 'cplaynrf52840' , 'feather52832' , 'feather52840' , 'feather52840sense' , 'itsybitsy52840' ]
17
-
18
23
build_boards = []
19
24
20
25
# build all variants if input not existed
23
28
else :
24
29
build_boards = default_boards
25
30
31
+ all_examples = list (glob .iglob ('libraries/**/*.ino' , recursive = True ))
32
+ all_examples .sort ()
33
+
26
34
def errorOutputFilter (line ):
27
35
if len (line ) == 0 :
28
36
return False
@@ -39,29 +47,29 @@ def build_examples(variant):
39
47
print (build_separator )
40
48
print ('| {:^79} |' .format ('Board ' + variant ))
41
49
print (build_separator )
42
- print (build_format .format ('Library' , 'Example' , 'Result ' , 'Time' ))
50
+ print (build_format .format ('Library' , 'Example' , '\033 [39mResult \033 [0m ' , 'Time' ))
43
51
print (build_separator )
44
52
45
53
fqbn = "adafruit:nrf52:{}:softdevice={},debug=l0" .format (variant , 's140v6' if variant != 'feather52832' else 's132v6' )
46
54
47
- for sketch in glob . iglob ( 'libraries/**/*.ino' , recursive = True ) :
55
+ for sketch in all_examples :
48
56
start_time = time .monotonic ()
49
57
50
58
# Skip if contains: ".board.test.skip" or ".all.test.skip"
51
59
# Skip if not contains: ".board.test.only" for a specific board
52
60
sketchdir = os .path .dirname (sketch )
53
61
if os .path .exists (sketchdir + '/.all.test.skip' ) or os .path .exists (sketchdir + '/.' + variant + '.test.skip' ):
54
- success = " \033 [33mskipped \033 [0m "
62
+ success = SKIPPED
55
63
elif glob .glob (sketchdir + "/.*.test.only" ) and not os .path .exists (sketchdir + '/.' + variant + '.test.only' ):
56
- success = " \033 [33mskipped \033 [0m "
64
+ success = SKIPPED
57
65
else :
58
66
# TODO - preferably, would have STDERR show up in **both** STDOUT and STDERR.
59
67
# preferably, would use Python logging handler to get both distinct outputs and one merged output
60
68
# for now, split STDERR when building with all warnings enabled, so can detect warning/error output.
61
69
if all_warnings :
62
- build_result = subprocess .run ("arduino-cli compile --warnings all --fqbn {} {}" .format (fqbn , sketch ), shell = True , stdout = subprocess . PIPE , stderr = subprocess . PIPE )
70
+ build_result = subprocess .run ("arduino-cli compile --warnings all --fqbn {} {}" .format (fqbn , sketch ), shell = True , stdout = PIPE , stderr = PIPE )
63
71
else :
64
- build_result = subprocess .run ("arduino-cli compile --warnings default --fqbn {} {}" .format (fqbn , sketch ), shell = True , stdout = subprocess . PIPE , stderr = subprocess . STDOUT )
72
+ build_result = subprocess .run ("arduino-cli compile --warnings default --fqbn {} {}" .format (fqbn , sketch ), shell = True , stdout = PIPE , stderr = PIPE )
65
73
66
74
# get stderr into a form where len(warningLines) indicates a true warning was output to stderr
67
75
warningLines = [];
@@ -71,21 +79,21 @@ def build_examples(variant):
71
79
72
80
if build_result .returncode != 0 :
73
81
exit_status = build_result .returncode
74
- success = " \033 [31mfailed \033 [0m "
82
+ success = FAILED
75
83
fail_count += 1
76
84
elif len (warningLines ) != 0 :
77
85
exit_status = - 1
78
- success = " \033 [31mwarnings \033 [0m "
86
+ success = WARNING
79
87
fail_count += 1
80
88
else :
81
- success = " \033 [32msucceeded \033 [0m"
89
+ success = SUCCEEDED
82
90
success_count += 1
83
91
84
92
build_duration = time .monotonic () - start_time
85
93
86
94
print (build_format .format (sketch .split (os .path .sep )[1 ], os .path .basename (sketch ), success , '{:5.2f}s' .format (build_duration )))
87
95
88
- if success != " \033 [33mskipped \033 [0m " :
96
+ if success != SKIPPED :
89
97
if build_result .returncode != 0 :
90
98
print (build_result .stdout .decode ("utf-8" ))
91
99
if (build_result .stderr ):
@@ -96,15 +104,14 @@ def build_examples(variant):
96
104
else :
97
105
skip_count += 1
98
106
99
-
100
107
build_time = time .monotonic ()
101
108
102
109
for board in build_boards :
103
110
build_examples (board )
104
111
105
112
print (build_separator )
106
113
build_time = time .monotonic () - build_time
107
- print ("Build Summary: {} \033 [32msucceeded \033 [0m , {} \033 [31mfailed \033 [0m , {} \033 [33mskipped \033 [0m and took {:.2f}s" .format (success_count , fail_count , skip_count , build_time ))
114
+ print ("Build Summary: {} {} , {} {} , {} {} and took {:.2f}s" .format (success_count , SUCCEEDED , fail_count , FAILED , skip_count , SKIPPED , build_time ))
108
115
print (build_separator )
109
116
110
117
sys .exit (exit_status )
0 commit comments