@@ -7,37 +7,61 @@ function run_test() {
77 local erase_flash=$4
88 local sketchdir=$( dirname $sketch )
99 local sketchname=$( basename $sketchdir )
10+ local result=0
11+ local error=0
1012
11- if [[ -f " $sketchdir /.skip.$platform " ]] || [[ -f " $sketchdir /.skip.$target " ]] || [[ -f " $sketchdir /.skip.$platform .$target " ]]; then
12- echo " Skipping $sketchname test for $target , platform: $platform "
13- skipfile=" $sketchdir /.test_skipped"
14- touch $skipfile
15- exit 0
13+ # If the target or platform is listed as false, skip the sketch. Otherwise, include it.
14+ if [ -f $sketchdir /ci.json ]; then
15+ is_target=$( jq -r --arg target $target ' .targets[$target]' $sketchdir /ci.json)
16+ selected_platform=$( jq -r --arg platform $platform ' .platforms[$platform]' $sketchdir /ci.json)
17+ else
18+ is_target=" true"
19+ selected_platform=" true"
20+ fi
21+
22+ if [[ $is_target == " false" ]] || [[ $selected_platform == " false" ]]; then
23+ printf " \033[93mSkipping $sketchname test for $target , platform: $platform \033[0m\n"
24+ printf " \n\n\n"
25+ return 0
1626 fi
1727
18- if [ $options -eq 0 ] && [ -f $sketchdir /cfg.json ]; then
19- len=` jq -r --arg chip $target ' .targets[] | select(.name==$chip) | .fqbn | length' $sketchdir /cfg.json`
28+ if [ $options -eq 0 ] && [ -f $sketchdir /ci.json ]; then
29+ len=` jq -r --arg target $target ' .fqbn[$target] | length' $sketchdir /ci.json`
30+ if [ $len -eq 0 ]; then
31+ len=1
32+ fi
2033 else
2134 len=1
2235 fi
2336
2437 if [ $len -eq 1 ]; then
2538 # build_dir="$sketchdir/build"
2639 build_dir=" $HOME /.arduino/tests/$sketchname /build.tmp"
27- report_file=" $sketchdir /$sketchname .xml"
40+ report_file=" $sketchdir /$target / $ sketchname .xml"
2841 fi
2942
3043 for i in ` seq 0 $(( $len - 1 )) `
3144 do
32- echo " Running test: $sketchname -- Config: $i "
45+ fqbn=" Default"
46+
47+ if [ $len -ne 1 ]; then
48+ fqbn=` jq -r --arg target $target --argjson i $i ' .fqbn[$target] | sort | .[$i]' $sketchdir /ci.json`
49+ elif [ -f $sketchdir /ci.json ]; then
50+ has_fqbn=` jq -r --arg target $target ' .fqbn[$target]' $sketchdir /ci.json`
51+ if [ " $has_fqbn " != " null" ]; then
52+ fqbn=` jq -r --arg target $target ' .fqbn[$target] | .[0]' $sketchdir /ci.json`
53+ fi
54+ fi
55+
56+ printf " \033[95mRunning test: $sketchname -- Config: $fqbn \033[0m\n"
3357 if [ $erase_flash -eq 1 ]; then
3458 esptool.py -c $target erase_flash
3559 fi
3660
3761 if [ $len -ne 1 ]; then
3862 # build_dir="$sketchdir/build$i"
3963 build_dir=" $HOME /.arduino/tests/$sketchname /build$i .tmp"
40- report_file=" $sketchdir /$sketchname$i .xml"
64+ report_file=" $sketchdir /$target / $ sketchname$i .xml"
4165 fi
4266
4367 if [ $platform == " wokwi" ]; then
@@ -54,20 +78,23 @@ function run_test() {
5478 elif [ $target == " esp32c3" ]; then
5579 extra_args+=" --qemu-prog-path qemu-system-riscv32 --qemu-cli-args=\" -machine $target -icount 3 -nographic\" "
5680 else
57- echo " Unsupported QEMU target: $target "
81+ printf " \033[91mUnsupported QEMU target: $target \033[0m\n "
5882 exit 1
5983 fi
6084 else
6185 extra_args=" --embedded-services esp,arduino"
6286 fi
6387
64- echo " pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args "
65- bash -c " pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args "
66- result=$?
88+ result=0
89+ printf " \033[95mpytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args \033[0m\n"
90+ bash -c " set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args ; exit \$ ?" || result=$?
91+ printf " \n"
6792 if [ $result -ne 0 ]; then
68- return $result
93+ error= $result
6994 fi
7095 done
96+ printf " \n"
97+ return $error
7198}
7299
73100SCRIPTS_DIR=" ./.github/scripts"
@@ -84,14 +111,14 @@ while [ ! -z "$1" ]; do
84111 -c )
85112 chunk_run=1
86113 ;;
87- -q )
114+ -Q )
88115 if [ ! -d $QEMU_PATH ]; then
89116 echo " QEMU path $QEMU_PATH does not exist"
90117 exit 1
91118 fi
92119 platform=" qemu"
93120 ;;
94- -w )
121+ -W )
95122 shift
96123 wokwi_timeout=$1
97124 platform=" wokwi"
@@ -157,6 +184,7 @@ if [ $chunk_run -eq 0 ]; then
157184 exit 1
158185 fi
159186 run_test $target $test_folder /$sketch /$sketch .ino $options $erase
187+ exit $?
160188else
161189 if [ " $chunk_max " -le 0 ]; then
162190 echo " ERROR: Chunks count must be positive number"
189217 else
190218 start_index=$(( $chunk_index * $chunk_size ))
191219 if [ " $sketchcount " -le " $start_index " ]; then
192- echo " Skipping job"
193- touch $PWD /tests/.test_skipped
194220 exit 0
195221 fi
196222
202228
203229 start_num=$(( $start_index + 1 ))
204230 sketchnum=0
231+ error=0
205232
206233 for sketch in $sketches ; do
207234
@@ -210,9 +237,14 @@ else
210237 || [ " $sketchnum " -gt " $end_index " ]; then
211238 continue
212239 fi
213- echo " "
214- echo " Sketch Index $(( $sketchnum - 1 )) "
215240
216- run_test $target $sketch $options $erase
241+ printf " \033[95mSketch Index $(( $sketchnum - 1 )) \033[0m\n"
242+
243+ exit_code=0
244+ run_test $target $sketch $options $erase || exit_code=$?
245+ if [ $exit_code -ne 0 ]; then
246+ error=$exit_code
247+ fi
217248 done
249+ exit $error
218250fi
0 commit comments