ci(refactor): Refactor workflows and skip files (#9696)
* ci(refactor): Refactor workflows and skip files * ci(refactor): Refactor workflows and skip files * ci(refactor): Improvements and compilation of only related files * ci(refactor): Delete duplicated steps * ci(refactor): General improvements * ci(refactor): Delete duplicated lines * ci(refactor): Rename jobs
This commit is contained in:
parent
ebb77c4611
commit
f5b8e27df7
535 changed files with 2067 additions and 698 deletions
8
.github/scripts/install-platformio-esp32.sh
vendored
8
.github/scripts/install-platformio-esp32.sh
vendored
|
|
@ -89,7 +89,9 @@ function count_sketches(){ # count_sketches <examples-path>
|
|||
if [[ "${sketchdirname}.ino" != "$sketchname" ]]; then
|
||||
continue
|
||||
fi
|
||||
if [[ -f "$sketchdir/.test.skip" ]]; then
|
||||
is_target=$(jq -r --arg target $target '.targets[$target]' $sketchdir/ci.json)
|
||||
# If the target is listed as false, skip the sketch. Otherwise, include it.
|
||||
if [[ "$is_target" == "false" ]]; then
|
||||
continue
|
||||
fi
|
||||
echo $sketch >> sketches.txt
|
||||
|
|
@ -161,8 +163,10 @@ function build_pio_sketches(){ # build_pio_sketches <board> <options> <examples-
|
|||
local sketchdir=$(dirname $sketch)
|
||||
local sketchdirname=$(basename $sketchdir)
|
||||
local sketchname=$(basename $sketch)
|
||||
is_target=$(jq -r --arg target $target '.targets[$target]' $sketchdir/ci.json)
|
||||
# If the target is listed as false, skip the sketch. Otherwise, include it.
|
||||
if [ "${sketchdirname}.ino" != "$sketchname" ] \
|
||||
|| [ -f "$sketchdir/.test.skip" ]; then
|
||||
|| [[ "$is_target" == "false" ]]; then
|
||||
continue
|
||||
fi
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
|
|
|
|||
20
.github/scripts/on-push.sh
vendored
20
.github/scripts/on-push.sh
vendored
|
|
@ -10,7 +10,8 @@ function build(){
|
|||
local chunk_index=$3
|
||||
local chunks_cnt=$4
|
||||
local build_log=$5
|
||||
shift; shift; shift; shift; shift;
|
||||
local sketches_file=$6
|
||||
shift; shift; shift; shift; shift; shift;
|
||||
local sketches=$*
|
||||
|
||||
local BUILD_SKETCH="${SCRIPTS_DIR}/sketch_utils.sh build"
|
||||
|
|
@ -23,6 +24,9 @@ function build(){
|
|||
if [ "$OS_IS_LINUX" == "1" ]; then
|
||||
args+=" -p $ARDUINO_ESP32_PATH/libraries"
|
||||
args+=" -i $chunk_index -m $chunks_cnt"
|
||||
if [ -n "$sketches_file" ]; then
|
||||
args+=" -f $sketches_file"
|
||||
fi
|
||||
if [ $build_log -eq 1 ]; then
|
||||
args+=" -l $build_log"
|
||||
fi
|
||||
|
|
@ -50,6 +54,7 @@ fi
|
|||
CHUNK_INDEX=$1
|
||||
CHUNKS_CNT=$2
|
||||
BUILD_LOG=$3
|
||||
SKETCHES_FILE=$4
|
||||
BUILD_PIO=0
|
||||
if [ "$#" -lt 2 ] || [ "$CHUNKS_CNT" -le 0 ]; then
|
||||
CHUNK_INDEX=0
|
||||
|
|
@ -69,7 +74,6 @@ fi
|
|||
|
||||
SCRIPTS_DIR="./.github/scripts"
|
||||
if [ "$BUILD_PIO" -eq 0 ]; then
|
||||
#source ${SCRIPTS_DIR}/install-arduino-ide.sh
|
||||
source ${SCRIPTS_DIR}/install-arduino-cli.sh
|
||||
source ${SCRIPTS_DIR}/install-arduino-core-esp32.sh
|
||||
|
||||
|
|
@ -95,12 +99,12 @@ if [ "$BUILD_PIO" -eq 0 ]; then
|
|||
fi
|
||||
|
||||
#build sketches for different targets
|
||||
build "esp32s3" $FQBN_ESP32S3 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32s2" $FQBN_ESP32S2 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32c3" $FQBN_ESP32C3 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32c6" $FQBN_ESP32C6 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32h2" $FQBN_ESP32H2 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $BUILD_LOG $SKETCHES_ESP32
|
||||
build "esp32s3" $FQBN_ESP32S3 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
build "esp32s2" $FQBN_ESP32S2 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
build "esp32c3" $FQBN_ESP32C3 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
build "esp32c6" $FQBN_ESP32C6 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
build "esp32h2" $FQBN_ESP32H2 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
build "esp32" $FQBN_ESP32 "$CHUNK_INDEX" "$CHUNKS_CNT" "$BUILD_LOG" "$SKETCHES_FILE" "$SKETCHES_ESP32"
|
||||
|
||||
if [ "$BUILD_LOG" -eq 1 ]; then
|
||||
#remove last comma from the last JSON object
|
||||
|
|
|
|||
82
.github/scripts/sketch_utils.sh
vendored
82
.github/scripts/sketch_utils.sh
vendored
|
|
@ -43,6 +43,7 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
done
|
||||
|
||||
xtra_opts=$*
|
||||
len=0
|
||||
|
||||
if [ -z $sketchdir ]; then
|
||||
echo "ERROR: Sketch directory not provided"
|
||||
|
|
@ -64,13 +65,17 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
# precedence. Note that the following logic also falls to the default
|
||||
# parameters if no arguments were passed and no file was found.
|
||||
|
||||
if [ -z $options ] && [ -f $sketchdir/cfg.json ]; then
|
||||
if [ -z $options ] && [ -f $sketchdir/ci.json ]; then
|
||||
# The config file could contain multiple FQBNs for one chip. If
|
||||
# that's the case we build one time for every FQBN.
|
||||
|
||||
len=`jq -r --arg chip $target '.targets[] | select(.name==$chip) | .fqbn | length' $sketchdir/cfg.json`
|
||||
fqbn=`jq -r --arg chip $target '.targets[] | select(.name==$chip) | .fqbn' $sketchdir/cfg.json`
|
||||
else
|
||||
len=`jq -r --arg target $target '.fqbn[$target] | length' $sketchdir/ci.json`
|
||||
if [ $len -gt 0 ]; then
|
||||
fqbn=`jq -r --arg target $target '.fqbn[$target] | sort' $sketchdir/ci.json`
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ ! -z $options ] || [ $len -eq 0 ]; then
|
||||
# Since we are passing options, we will end up with only one FQBN to
|
||||
# build.
|
||||
|
||||
|
|
@ -78,12 +83,12 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
|
||||
# Default FQBN options if none were passed in the command line.
|
||||
|
||||
esp32_opts="FlashMode=dio,PSRAM=enabled,PartitionScheme=huge_app"
|
||||
esp32s2_opts="PSRAM=enabled,PartitionScheme=huge_app"
|
||||
esp32s3_opts="PSRAM=opi,USBMode=default,PartitionScheme=huge_app"
|
||||
esp32c3_opts="FlashMode=dio,PartitionScheme=huge_app"
|
||||
esp32c6_opts="PartitionScheme=huge_app"
|
||||
esp32h2_opts="PartitionScheme=huge_app"
|
||||
esp32_opts="PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dio"
|
||||
esp32s2_opts="PSRAM=enabled,PartitionScheme=huge_app,FlashMode=dio"
|
||||
esp32s3_opts="PSRAM=opi,USBMode=default,PartitionScheme=huge_app,FlashMode=dio"
|
||||
esp32c3_opts="PartitionScheme=huge_app,FlashMode=dio"
|
||||
esp32c6_opts="PartitionScheme=huge_app,FlashMode=dio"
|
||||
esp32h2_opts="PartitionScheme=huge_app,FlashMode=dio"
|
||||
|
||||
# Select the common part of the FQBN based on the target. The rest will be
|
||||
# appended depending on the passed options.
|
||||
|
|
@ -135,7 +140,14 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
|
||||
sketchname=$(basename $sketchdir)
|
||||
|
||||
if [[ -n $target ]] && [[ -f "$sketchdir/.skip.$target" ]]; then
|
||||
# If the target is listed as false, skip the sketch. Otherwise, include it.
|
||||
if [ -f $sketchdir/ci.json ]; then
|
||||
is_target=$(jq -r --arg target $target '.targets[$target]' $sketchdir/ci.json)
|
||||
else
|
||||
is_target="true"
|
||||
fi
|
||||
|
||||
if [[ "$is_target" == "false" ]]; then
|
||||
echo "Skipping $sketchname for target $target"
|
||||
exit 0
|
||||
fi
|
||||
|
|
@ -247,9 +259,10 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
unset options
|
||||
}
|
||||
|
||||
function count_sketches(){ # count_sketches <path> [target]
|
||||
function count_sketches(){ # count_sketches <path> [target] [file]
|
||||
local path=$1
|
||||
local target=$2
|
||||
local file=$3
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "ERROR: Illegal number of parameters"
|
||||
|
|
@ -257,12 +270,17 @@ function count_sketches(){ # count_sketches <path> [target]
|
|||
fi
|
||||
|
||||
rm -rf sketches.txt
|
||||
touch sketches.txt
|
||||
if [ ! -d "$path" ]; then
|
||||
touch sketches.txt
|
||||
return 0
|
||||
fi
|
||||
|
||||
local sketches=$(find $path -name *.ino | sort)
|
||||
if [ -n "$file" ]; then
|
||||
local sketches=$(cat $file)
|
||||
else
|
||||
local sketches=$(find $path -name *.ino | sort)
|
||||
fi
|
||||
|
||||
local sketchnum=0
|
||||
for sketch in $sketches; do
|
||||
local sketchdir=$(dirname $sketch)
|
||||
|
|
@ -270,12 +288,19 @@ function count_sketches(){ # count_sketches <path> [target]
|
|||
local sketchname=$(basename $sketch)
|
||||
if [[ "$sketchdirname.ino" != "$sketchname" ]]; then
|
||||
continue
|
||||
elif [[ -n $target ]] && [[ -f "$sketchdir/.skip.$target" ]]; then
|
||||
continue
|
||||
else
|
||||
echo $sketch >> sketches.txt
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
elif [[ -n $target ]]; then
|
||||
# If the target is listed as false, skip the sketch. Otherwise, include it.
|
||||
if [ -f $sketchdir/ci.json ]; then
|
||||
is_target=$(jq -r --arg target $target '.targets[$target]' $sketchdir/ci.json)
|
||||
else
|
||||
is_target="true"
|
||||
fi
|
||||
if [[ "$is_target" == "false" ]]; then
|
||||
continue
|
||||
fi
|
||||
fi
|
||||
echo $sketch >> sketches.txt
|
||||
sketchnum=$(($sketchnum + 1))
|
||||
done
|
||||
return $sketchnum
|
||||
}
|
||||
|
|
@ -319,6 +344,10 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
|
|||
shift
|
||||
log_compilation=$1
|
||||
;;
|
||||
-f )
|
||||
shift
|
||||
sketches_file=$1
|
||||
;;
|
||||
* )
|
||||
break
|
||||
;;
|
||||
|
|
@ -328,7 +357,7 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
|
|||
|
||||
local xtra_opts=$*
|
||||
|
||||
if [ -z $chunk_index ] || [ -z $chunk_max ]; then
|
||||
if [ -z "$chunk_index" ] || [ -z "$chunk_max" ]; then
|
||||
echo "ERROR: Invalid chunk paramters"
|
||||
echo "$USAGE"
|
||||
exit 1
|
||||
|
|
@ -339,13 +368,18 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
|
|||
return 1
|
||||
fi
|
||||
|
||||
if [ "$chunk_index" -gt "$chunk_max" ] && [ "$chunk_max" -ge 2 ]; then
|
||||
if [ "$chunk_index" -gt "$chunk_max" ] && [ "$chunk_max" -ge 2 ]; then
|
||||
chunk_index=$chunk_max
|
||||
fi
|
||||
|
||||
set +e
|
||||
count_sketches "$path" "$target"
|
||||
local sketchcount=$?
|
||||
if [ -n "$sketches_file" ]; then
|
||||
count_sketches "$path" "$target" "$sketches_file"
|
||||
local sketchcount=$?
|
||||
else
|
||||
count_sketches "$path" "$target"
|
||||
local sketchcount=$?
|
||||
fi
|
||||
set -e
|
||||
local sketches=$(cat sketches.txt)
|
||||
rm -rf sketches.txt
|
||||
|
|
@ -364,8 +398,6 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
|
|||
else
|
||||
start_index=$(( $chunk_index * $chunk_size ))
|
||||
if [ "$sketchcount" -le "$start_index" ]; then
|
||||
echo "Skipping job"
|
||||
touch ~/.build_skipped
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
|
|
|||
3
.github/scripts/tests_build.sh
vendored
3
.github/scripts/tests_build.sh
vendored
|
|
@ -51,7 +51,6 @@ while [ ! -z "$1" ]; do
|
|||
shift
|
||||
done
|
||||
|
||||
#source ${SCRIPTS_DIR}/install-arduino-ide.sh
|
||||
source ${SCRIPTS_DIR}/install-arduino-cli.sh
|
||||
source ${SCRIPTS_DIR}/install-arduino-core-esp32.sh
|
||||
|
||||
|
|
@ -72,7 +71,7 @@ fi
|
|||
|
||||
if [ $chunk_build -eq 1 ]; then
|
||||
BUILD_CMD="${SCRIPTS_DIR}/sketch_utils.sh chunk_build"
|
||||
args+=" -p $test_folder"
|
||||
args+=" -p $test_folder -i 0 -m 1"
|
||||
else
|
||||
BUILD_CMD="${SCRIPTS_DIR}/sketch_utils.sh build"
|
||||
args+=" -s $test_folder/$sketch"
|
||||
|
|
|
|||
76
.github/scripts/tests_run.sh
vendored
76
.github/scripts/tests_run.sh
vendored
|
|
@ -8,16 +8,28 @@ function run_test() {
|
|||
local sketchdir=$(dirname $sketch)
|
||||
local sketchname=$(basename $sketchdir)
|
||||
local result=0
|
||||
local error=0
|
||||
|
||||
if [[ -f "$sketchdir/.skip.$platform" ]] || [[ -f "$sketchdir/.skip.$target" ]] || [[ -f "$sketchdir/.skip.$platform.$target" ]]; then
|
||||
echo "Skipping $sketchname test for $target, platform: $platform"
|
||||
skipfile="$sketchdir/.test_skipped"
|
||||
touch $skipfile
|
||||
exit 0
|
||||
# If the target or platform is listed as false, skip the sketch. Otherwise, include it.
|
||||
if [ -f $sketchdir/ci.json ]; then
|
||||
is_target=$(jq -r --arg target $target '.targets[$target]' $sketchdir/ci.json)
|
||||
selected_platform=$(jq -r --arg platform $platform '.platforms[$platform]' $sketchdir/ci.json)
|
||||
else
|
||||
is_target="true"
|
||||
selected_platform="true"
|
||||
fi
|
||||
|
||||
if [ $options -eq 0 ] && [ -f $sketchdir/cfg.json ]; then
|
||||
len=`jq -r --arg chip $target '.targets[] | select(.name==$chip) | .fqbn | length' $sketchdir/cfg.json`
|
||||
if [[ $is_target == "false" ]] || [[ $selected_platform == "false" ]]; then
|
||||
printf "\033[93mSkipping $sketchname test for $target, platform: $platform\033[0m\n"
|
||||
printf "\n\n\n"
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ $options -eq 0 ] && [ -f $sketchdir/ci.json ]; then
|
||||
len=`jq -r --arg target $target '.fqbn[$target] | length' $sketchdir/ci.json`
|
||||
if [ $len -eq 0 ]; then
|
||||
len=1
|
||||
fi
|
||||
else
|
||||
len=1
|
||||
fi
|
||||
|
|
@ -25,12 +37,23 @@ function run_test() {
|
|||
if [ $len -eq 1 ]; then
|
||||
# build_dir="$sketchdir/build"
|
||||
build_dir="$HOME/.arduino/tests/$sketchname/build.tmp"
|
||||
report_file="$sketchdir/$sketchname.xml"
|
||||
report_file="$sketchdir/$target/$sketchname.xml"
|
||||
fi
|
||||
|
||||
for i in `seq 0 $(($len - 1))`
|
||||
do
|
||||
echo "Running test: $sketchname -- Config: $i"
|
||||
fqbn="Default"
|
||||
|
||||
if [ $len -ne 1 ]; then
|
||||
fqbn=`jq -r --arg target $target --argjson i $i '.fqbn[$target] | sort | .[$i]' $sketchdir/ci.json`
|
||||
elif [ -f $sketchdir/ci.json ]; then
|
||||
has_fqbn=`jq -r --arg target $target '.fqbn[$target]' $sketchdir/ci.json`
|
||||
if [ "$has_fqbn" != "null" ]; then
|
||||
fqbn=`jq -r --arg target $target '.fqbn[$target] | .[0]' $sketchdir/ci.json`
|
||||
fi
|
||||
fi
|
||||
|
||||
printf "\033[95mRunning test: $sketchname -- Config: $fqbn\033[0m\n"
|
||||
if [ $erase_flash -eq 1 ]; then
|
||||
esptool.py -c $target erase_flash
|
||||
fi
|
||||
|
|
@ -38,7 +61,7 @@ function run_test() {
|
|||
if [ $len -ne 1 ]; then
|
||||
# build_dir="$sketchdir/build$i"
|
||||
build_dir="$HOME/.arduino/tests/$sketchname/build$i.tmp"
|
||||
report_file="$sketchdir/$sketchname$i.xml"
|
||||
report_file="$sketchdir/$target/$sketchname$i.xml"
|
||||
fi
|
||||
|
||||
if [ $platform == "wokwi" ]; then
|
||||
|
|
@ -55,7 +78,7 @@ function run_test() {
|
|||
elif [ $target == "esp32c3" ]; then
|
||||
extra_args+=" --qemu-prog-path qemu-system-riscv32 --qemu-cli-args=\"-machine $target -icount 3 -nographic\""
|
||||
else
|
||||
echo "Unsupported QEMU target: $target"
|
||||
printf "\033[91mUnsupported QEMU target: $target\033[0m\n"
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
|
|
@ -63,19 +86,23 @@ function run_test() {
|
|||
fi
|
||||
|
||||
result=0
|
||||
echo "pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args"
|
||||
printf "\033[95mpytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args\033[0m\n"
|
||||
bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$?
|
||||
result=$?
|
||||
printf "\n"
|
||||
if [ $result -ne 0 ]; then
|
||||
result=0
|
||||
echo "Retrying test: $sketchname -- Config: $i"
|
||||
printf "\033[95mRetrying test: $sketchname -- Config: $i\033[0m\n"
|
||||
printf "\033[95mpytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args\033[0m\n"
|
||||
bash -c "set +e; pytest tests --build-dir $build_dir -k test_$sketchname --junit-xml=$report_file $extra_args; exit \$?" || result=$?
|
||||
printf "\n"
|
||||
result=$?
|
||||
if [ $result -ne 0 ]; then
|
||||
exit $result
|
||||
error=$result
|
||||
fi
|
||||
fi
|
||||
done
|
||||
printf "\n"
|
||||
return $error
|
||||
}
|
||||
|
||||
SCRIPTS_DIR="./.github/scripts"
|
||||
|
|
@ -92,14 +119,14 @@ while [ ! -z "$1" ]; do
|
|||
-c )
|
||||
chunk_run=1
|
||||
;;
|
||||
-q )
|
||||
-Q )
|
||||
if [ ! -d $QEMU_PATH ]; then
|
||||
echo "QEMU path $QEMU_PATH does not exist"
|
||||
exit 1
|
||||
fi
|
||||
platform="qemu"
|
||||
;;
|
||||
-w )
|
||||
-W )
|
||||
shift
|
||||
wokwi_timeout=$1
|
||||
platform="wokwi"
|
||||
|
|
@ -165,6 +192,7 @@ if [ $chunk_run -eq 0 ]; then
|
|||
exit 1
|
||||
fi
|
||||
run_test $target $test_folder/$sketch/$sketch.ino $options $erase
|
||||
exit $?
|
||||
else
|
||||
if [ "$chunk_max" -le 0 ]; then
|
||||
echo "ERROR: Chunks count must be positive number"
|
||||
|
|
@ -197,8 +225,6 @@ else
|
|||
else
|
||||
start_index=$(( $chunk_index * $chunk_size ))
|
||||
if [ "$sketchcount" -le "$start_index" ]; then
|
||||
echo "Skipping job"
|
||||
touch $PWD/tests/.test_skipped
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
|
@ -210,6 +236,7 @@ else
|
|||
|
||||
start_num=$(( $start_index + 1 ))
|
||||
sketchnum=0
|
||||
error=0
|
||||
|
||||
for sketch in $sketches; do
|
||||
|
||||
|
|
@ -218,9 +245,14 @@ else
|
|||
|| [ "$sketchnum" -gt "$end_index" ]; then
|
||||
continue
|
||||
fi
|
||||
echo ""
|
||||
echo "Sketch Index $(($sketchnum - 1))"
|
||||
|
||||
run_test $target $sketch $options $erase
|
||||
printf "\033[95mSketch Index $(($sketchnum - 1))\033[0m\n"
|
||||
|
||||
exit_code=0
|
||||
run_test $target $sketch $options $erase || exit_code=$?
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
error=$exit_code
|
||||
fi
|
||||
done
|
||||
exit $error
|
||||
fi
|
||||
|
|
|
|||
10
.github/scripts/upload_py_tools.sh
vendored
10
.github/scripts/upload_py_tools.sh
vendored
|
|
@ -1,11 +1,11 @@
|
|||
#!/bin/bash
|
||||
CHANGED_FILES=$1
|
||||
echo "Pushing '$CHANGED_FILES' as $GITHUB_ACTOR"
|
||||
git config --global github.user "$GITHUB_ACTOR"
|
||||
git config --global user.name "$GITHUB_ACTOR"
|
||||
git config --global user.email "$GITHUB_ACTOR@users.noreply.github.com"
|
||||
echo "Pushing '$CHANGED_FILES' as github-actions[bot]"
|
||||
git config --global github.user "github-actions[bot]"
|
||||
git config --global user.name "github-actions[bot]"
|
||||
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
for tool in $CHANGED_FILES; do
|
||||
git add tools/$tool.exe
|
||||
done
|
||||
git commit -m "Push binary to tools"
|
||||
git commit -m "change(tools): Push generated binaries to PR"
|
||||
git push
|
||||
|
|
|
|||
6
.github/workflows/boards.yml
vendored
6
.github/workflows/boards.yml
vendored
|
|
@ -3,6 +3,10 @@ name: Boards Test
|
|||
# The workflow will run on schedule and labeled pull requests
|
||||
on:
|
||||
pull_request:
|
||||
paths:
|
||||
- 'boards.txt'
|
||||
- 'libraries/ESP32/examples/CI/CIBoardsTest/CIBoardsTest.ino'
|
||||
- '.github/workflows/boards.yml'
|
||||
|
||||
env:
|
||||
# It's convenient to set variables for values used multiple times in the workflow
|
||||
|
|
@ -24,7 +28,7 @@ jobs:
|
|||
uses: dcarbone/install-jq-action@v1.0.1
|
||||
|
||||
- name: Get board name
|
||||
run:
|
||||
run:
|
||||
bash .github/scripts/find_new_boards.sh ${{ github.repository }} ${{github.event.number}}
|
||||
|
||||
test-boards:
|
||||
|
|
|
|||
3
.github/workflows/build_py_tools.yml
vendored
3
.github/workflows/build_py_tools.yml
vendored
|
|
@ -89,6 +89,7 @@ jobs:
|
|||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{ secrets.TOOLS_UPLOAD_PAT }}
|
||||
ref: ${{ github.event.pull_request.head.ref }}
|
||||
- name: Set up Python 3.8
|
||||
# Skip setting python on ARM because of missing compatibility: https://github.com/actions/setup-python/issues/108
|
||||
|
|
@ -107,7 +108,7 @@ jobs:
|
|||
pyinstaller --distpath ./${{ env.DISTPATH }} -F --icon=.github/pytools/espressif.ico tools/$tool.py
|
||||
done
|
||||
- name: Sign binaries
|
||||
if: matrix.os == 'windows-latest'
|
||||
if: matrix.os == 'windows-latest' && env.CERTIFICATE != '' && env.CERTIFICATE_PASSWORD != ''
|
||||
env:
|
||||
CERTIFICATE: ${{ secrets.CERTIFICATE }}
|
||||
CERTIFICATE_PASSWORD: ${{ secrets.CERTIFICATE_PASSWORD }}
|
||||
|
|
|
|||
93
.github/workflows/build_tests.yml
vendored
Normal file
93
.github/workflows/build_tests.yml
vendored
Normal file
|
|
@ -0,0 +1,93 @@
|
|||
name: Build tests
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
type:
|
||||
type: string
|
||||
description: 'Type of tests to build'
|
||||
required: true
|
||||
chip:
|
||||
type: string
|
||||
description: 'Chip to build tests for'
|
||||
required: true
|
||||
|
||||
concurrency:
|
||||
group: tests-build-${{ github.event.pull_request.number || github.ref }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
build-tests:
|
||||
name: Build ${{ inputs.type }} tests for ${{ inputs.chip }}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
id: ${{ github.event.pull_request.number || github.ref }}-${{ github.event.pull_request.head.sha || github.sha }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
steps:
|
||||
- name: Check if already built
|
||||
if: ${{ github.event.pull_request.number != null }}
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: tests-${{ env.id }}-bin
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
- name: Evaluate if tests should be built
|
||||
id: check-build
|
||||
run: |
|
||||
cache_exists=${{ steps.cache-build-binaries.outputs.cache-hit == 'true' }}
|
||||
enabled=true
|
||||
|
||||
if [[ $cache_exists == 'true' ]]; then
|
||||
echo "Already built, skipping"
|
||||
enabled=false
|
||||
fi
|
||||
|
||||
echo "enabled=$enabled" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
- name: Get libs cache
|
||||
uses: actions/cache@v4
|
||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||
with:
|
||||
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
||||
path: |
|
||||
./tools/dist
|
||||
./tools/esp32-arduino-libs
|
||||
./tools/esptool
|
||||
./tools/mk*
|
||||
./tools/openocd-esp32
|
||||
./tools/riscv32-*
|
||||
./tools/xtensa-*
|
||||
|
||||
- name: Build sketches
|
||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||
run: |
|
||||
bash .github/scripts/tests_build.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }}
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as cache
|
||||
uses: actions/cache/save@v4
|
||||
if: ${{ steps.check-build.outputs.enabled == 'true' }}
|
||||
with:
|
||||
key: tests-${{ env.id }}-bin
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} binaries as artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||
overwrite: true
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
2
.github/workflows/docs_build.yml
vendored
2
.github/workflows/docs_build.yml
vendored
|
|
@ -27,6 +27,8 @@ jobs:
|
|||
submodules: true
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
cache-dependency-path: docs/requirements.txt
|
||||
cache: 'pip'
|
||||
python-version: '3.10'
|
||||
- name: Build
|
||||
run: |
|
||||
|
|
|
|||
2
.github/workflows/docs_deploy.yml
vendored
2
.github/workflows/docs_deploy.yml
vendored
|
|
@ -25,6 +25,8 @@ jobs:
|
|||
submodules: true
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
cache-dependency-path: docs/requirements.txt
|
||||
cache: 'pip'
|
||||
python-version: '3.10'
|
||||
- name: Deploy Documentation
|
||||
env:
|
||||
|
|
|
|||
275
.github/workflows/hil.yml
vendored
275
.github/workflows/hil.yml
vendored
|
|
@ -1,275 +0,0 @@
|
|||
name: Run tests
|
||||
|
||||
on:
|
||||
pull_request:
|
||||
types: [opened, reopened, synchronize, labeled]
|
||||
|
||||
schedule:
|
||||
- cron: '0 2 * * *'
|
||||
|
||||
env:
|
||||
MAX_CHUNKS: 15
|
||||
WOKWI_TIMEOUT: 120000 # Milliseconds
|
||||
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
|
||||
|
||||
concurrency:
|
||||
group: hil-${{github.event.pull_request.number || github.ref}}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
gen_chunks:
|
||||
if: |
|
||||
github.event_name == 'pull_request' ||
|
||||
(github.event_name == 'schedule' && github.repository == 'espressif/arduino-esp32')
|
||||
name: Generate Chunks matrix
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
chunks: ${{ steps.gen-chunks.outputs.chunks }}
|
||||
test_folder: ${{ steps.gen-chunks.outputs.test_folder }}
|
||||
test_type: ${{ steps.gen-chunks.outputs.test_type }}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Generate Chunks matrix
|
||||
id: gen-chunks
|
||||
run: |
|
||||
set +e
|
||||
if [ "${{contains(github.event.pull_request.labels.*.name, 'hil_test')}}" == "true" ] && \
|
||||
[ "${{contains(github.event.pull_request.labels.*.name, 'perf_test')}}" == "false" ]; then
|
||||
test_folder="tests/validation"
|
||||
test_type="validation"
|
||||
elif [ "${{contains(github.event.pull_request.labels.*.name, 'hil_test')}}" == "false" ] && \
|
||||
[ "${{contains(github.event.pull_request.labels.*.name, 'perf_test')}}" == "true" ]; then
|
||||
test_folder="tests/performance"
|
||||
test_type="performance"
|
||||
else
|
||||
test_folder="tests"
|
||||
test_type="all"
|
||||
fi
|
||||
.github/scripts/sketch_utils.sh count $test_folder
|
||||
sketches=$?
|
||||
if [[ $sketches -ge ${{env.MAX_CHUNKS}} ]]; then
|
||||
$sketches=${{env.MAX_CHUNKS}}
|
||||
fi
|
||||
set -e
|
||||
rm sketches.txt
|
||||
CHUNKS=$(jq -c -n '$ARGS.positional' --args `seq 0 1 $((sketches - 1))`)
|
||||
echo "chunks=${CHUNKS}" >> $GITHUB_OUTPUT
|
||||
echo "test_folder=${test_folder}" >> $GITHUB_OUTPUT
|
||||
echo "test_type=${test_type}" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Upload Event file
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: event_file
|
||||
path: ${{github.event_path}}
|
||||
|
||||
build:
|
||||
needs: gen_chunks
|
||||
name: ${{matrix.chip}}-Build#${{matrix.chunks}}
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
matrix:
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
chunks: ${{fromJson(needs.gen_chunks.outputs.chunks)}}
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Build sketches
|
||||
run: |
|
||||
bash .github/scripts/tests_build.sh -c -type ${{ needs.gen_chunks.outputs.test_type }} -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}}
|
||||
|
||||
- name: Upload ${{matrix.chip}}-${{matrix.chunks}} artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: ${{matrix.chip}}-${{matrix.chunks}}.artifacts
|
||||
if-no-files-found: error
|
||||
path: |
|
||||
~/.build_skipped
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
qemu-test:
|
||||
needs: [gen_chunks, build]
|
||||
name: ${{matrix.chip}}-QEMU_Test#${{matrix.chunks}}
|
||||
if: ${{ false }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
chip: ['esp32', 'esp32c3'] # Currently only ESP32 and ESP32-C3 are supported by QEMU
|
||||
chunks: ${{fromJson(needs.gen_chunks.outputs.chunks)}}
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
QEMU_INSTALL_PATH: "$HOME"
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Get QEMU version
|
||||
uses: pozetroninc/github-action-get-latest-release@v0.7.0
|
||||
id: get-qemu-version
|
||||
with:
|
||||
token: ${{secrets.GITHUB_TOKEN}}
|
||||
owner: espressif
|
||||
repo: qemu
|
||||
excludes: prerelease, draft
|
||||
|
||||
- name: Cache tools
|
||||
id: cache-linux
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
path: |
|
||||
~/qemu
|
||||
~/.cache/pip
|
||||
key: qemu-${{ steps.get-qemu-version.outputs.release }}-${{ hashFiles('.github/workflows/hil.yml') }}
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
sudo apt update && sudo apt install libpixman-1-0 libnuma1 libglib2.0-0 libslirp0 libsdl2-2.0-0
|
||||
|
||||
- name: Download QEMU
|
||||
if: steps.cache-linux.outputs.cache-hit != 'true'
|
||||
run: |
|
||||
cd ${{ env.QEMU_INSTALL_PATH }}
|
||||
underscore_release=$(echo ${{ steps.get-qemu-version.outputs.release }} | sed 's/\-/_/g')
|
||||
curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-riscv32-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-riscv32.tar.xz
|
||||
curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-xtensa-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-xtensa.tar.xz
|
||||
tar -xf qemu-riscv32.tar.xz
|
||||
tar -xf qemu-xtensa.tar.xz
|
||||
rm qemu-*
|
||||
echo "QEMU_PATH=${{ env.QEMU_INSTALL_PATH }}/qemu" >> $GITHUB_ENV
|
||||
|
||||
- name: Download ${{matrix.chip}}-${{matrix.chunks}} artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{matrix.chip}}-${{matrix.chunks}}.artifacts
|
||||
path: ~/
|
||||
|
||||
- name: Run Tests
|
||||
run: QEMU_PATH="${{env.QEMU_PATH}}" bash .github/scripts/tests_run.sh -c -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}} -q
|
||||
|
||||
- name: Check if tests were skipped
|
||||
id: check-test-skipped
|
||||
run: |
|
||||
if [ $(find "tests" -name ".test_skipped") ]; then
|
||||
echo "skipped=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "skipped=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Upload test result artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() && steps.check-test-skipped.outputs.skipped == 'false' }}
|
||||
with:
|
||||
name: qemu_results-${{matrix.chip}}-${{matrix.chunks}}
|
||||
path: tests/*/*.xml
|
||||
|
||||
wokwi-test:
|
||||
needs: [gen_chunks, build]
|
||||
if: github.event_name == 'schedule'
|
||||
name: ${{matrix.chip}}-Wokwi_Test#${{matrix.chunks}}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
chunks: ${{fromJson(needs.gen_chunks.outputs.chunks)}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download ${{matrix.chip}}-${{matrix.chunks}} artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{matrix.chip}}-${{matrix.chunks}}.artifacts
|
||||
path: ~/
|
||||
|
||||
- name: Install Wokwi CLI
|
||||
run: curl -L https://wokwi.com/ci/install.sh | sh
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
sudo apt update && sudo apt install -y -qq jq
|
||||
|
||||
- name: Run Tests
|
||||
env:
|
||||
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
|
||||
run: |
|
||||
bash .github/scripts/tests_run.sh -c -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}} -w ${{env.WOKWI_TIMEOUT}}
|
||||
|
||||
- name: Check if tests were skipped
|
||||
id: check-test-skipped
|
||||
run: |
|
||||
if [ $(find "tests" -name ".test_skipped") ]; then
|
||||
echo "skipped=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "skipped=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Upload test result artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() && steps.check-test-skipped.outputs.skipped == 'false' }}
|
||||
with:
|
||||
name: wokwi_results-${{matrix.chip}}-${{matrix.chunks}}
|
||||
path: tests/**/*.xml
|
||||
|
||||
hardware-test:
|
||||
needs: [gen_chunks, build]
|
||||
name: ${{matrix.chip}}-Hardware_Test#${{matrix.chunks}}
|
||||
if: |
|
||||
contains(github.event.pull_request.labels.*.name, 'hil_test') || github.event_name == 'schedule'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
chunks: ${{fromJson(needs.gen_chunks.outputs.chunks)}}
|
||||
runs-on: [arduino, "${{matrix.chip}}"]
|
||||
container:
|
||||
image: python:3.10.1-bullseye
|
||||
options: --privileged
|
||||
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
|
||||
- name: Download ${{matrix.chip}}-${{matrix.chunks}} artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{matrix.chip}}-${{matrix.chunks}}.artifacts
|
||||
path: ~/
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
apt update && apt install -y -qq jq
|
||||
|
||||
- name: Run Tests
|
||||
run: |
|
||||
bash .github/scripts/tests_run.sh -c -type ${{ needs.gen_chunks.outputs.test_type }} -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}} -e
|
||||
|
||||
- name: Check if tests were skipped
|
||||
id: check-test-skipped
|
||||
run: |
|
||||
if [ $(find "tests" -name ".test_skipped") ]; then
|
||||
echo "skipped=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "skipped=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
|
||||
- name: Upload test result artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() && steps.check-test-skipped.outputs.skipped == 'false' }}
|
||||
with:
|
||||
name: hw_results-${{matrix.chip}}-${{matrix.chunks}}
|
||||
if-no-files-found: error
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
105
.github/workflows/hw.yml
vendored
Normal file
105
.github/workflows/hw.yml
vendored
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
name: Hardware tests
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
type:
|
||||
type: string
|
||||
description: 'Type of tests to run'
|
||||
required: true
|
||||
chip:
|
||||
type: string
|
||||
description: 'Chip to run tests for'
|
||||
required: true
|
||||
|
||||
concurrency:
|
||||
group: tests-hw-${{ github.event.pull_request.number || github.ref }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
hardware-test:
|
||||
name: Hardware ${{ inputs.chip }} ${{ inputs.type }} tests
|
||||
runs-on: [arduino, "${{ inputs.chip }}"]
|
||||
env:
|
||||
id: ${{ github.event.pull_request.number || github.ref }}-${{ github.event.pull_request.head.sha || github.sha }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
container:
|
||||
image: python:3.10.1-bullseye
|
||||
options: --privileged
|
||||
steps:
|
||||
- name: Check if already built
|
||||
if: ${{ github.event.pull_request.number != null }}
|
||||
id: cache-results
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: tests-${{ env.id }}-results-hw
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
|
||||
- name: Evaluate if tests should be run
|
||||
id: check-tests
|
||||
run: |
|
||||
cache_exists=${{ steps.cache-results.outputs.cache-hit == 'true' }}
|
||||
enabled=true
|
||||
|
||||
if [[ $cache_exists == 'true' ]]; then
|
||||
echo "Already ran, skipping"
|
||||
enabled=false
|
||||
fi
|
||||
|
||||
echo "enabled=$enabled" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout repository
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
cache-dependency-path: tests/requirements.txt
|
||||
cache: 'pip'
|
||||
python-version: '3.10.1'
|
||||
|
||||
- name: Install dependencies
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
|
||||
- name: Get binaries
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
- name: Run Tests
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
run: |
|
||||
bash .github/scripts/tests_run.sh -c -type ${{ inputs.type }} -t ${{ inputs.chip }} -i 0 -m 1 -e
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as cache
|
||||
uses: actions/cache/save@v4
|
||||
if: ${{ always() && steps.check-tests.outputs.enabled == 'true' }}
|
||||
with:
|
||||
key: tests-${{ env.id }}-results-hw
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} hardware results as artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: tests-results-hw-${{ inputs.chip }}-${{ inputs.type }}
|
||||
overwrite: true
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
38
.github/workflows/publish.yml
vendored
38
.github/workflows/publish.yml
vendored
|
|
@ -1,38 +0,0 @@
|
|||
name: Unit Test Results
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [Run tests]
|
||||
branches-ignore: [master]
|
||||
|
||||
types:
|
||||
- completed
|
||||
|
||||
jobs:
|
||||
unit-test-results:
|
||||
name: Unit Test Results
|
||||
runs-on: ubuntu-latest
|
||||
if: |
|
||||
github.event.workflow_run.event == 'pull_request' &&
|
||||
(github.event.workflow_run.conclusion == 'success' ||
|
||||
github.event.workflow_run.conclusion == 'failure')
|
||||
steps:
|
||||
- name: Download and Extract Artifacts
|
||||
env:
|
||||
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
|
||||
run: |
|
||||
mkdir -p artifacts && cd artifacts
|
||||
artifacts_url=${{ github.event.workflow_run.artifacts_url }}
|
||||
gh api "$artifacts_url" -q '.artifacts[] | [.name, .archive_download_url] | @tsv' | while read artifact
|
||||
do
|
||||
IFS=$'\t' read name url <<< "$artifact"
|
||||
gh api $url > "$name.zip"
|
||||
unzip -d "$name" "$name.zip"
|
||||
done
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v1
|
||||
with:
|
||||
commit: ${{ github.event.workflow_run.head_sha }}
|
||||
event_file: artifacts/event_file/event.json
|
||||
event_name: ${{ github.event.workflow_run.event }}
|
||||
files: "artifacts/**/*.xml"
|
||||
4
.github/workflows/publishsizes.yml
vendored
4
.github/workflows/publishsizes.yml
vendored
|
|
@ -2,7 +2,7 @@ name: Sizes Results
|
|||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [ESP32 Arduino CI]
|
||||
workflows: [Compilation Tests]
|
||||
types:
|
||||
- completed
|
||||
|
||||
|
|
@ -63,7 +63,7 @@ jobs:
|
|||
uses: juliangruber/read-file-action@v1
|
||||
with:
|
||||
path: ./artifacts/sizes-report/pr_num.txt
|
||||
|
||||
|
||||
- name: Report results
|
||||
uses: P-R-O-C-H-Y/report-size-deltas@sizes_v2
|
||||
with:
|
||||
|
|
|
|||
211
.github/workflows/push.yml
vendored
211
.github/workflows/push.yml
vendored
|
|
@ -1,4 +1,4 @@
|
|||
name: ESP32 Arduino CI
|
||||
name: Compilation Tests
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
|
|
@ -7,13 +7,35 @@ on:
|
|||
- master
|
||||
- release/*
|
||||
pull_request:
|
||||
paths:
|
||||
- 'cores/**'
|
||||
- 'libraries/**'
|
||||
- '!libraries/**.md'
|
||||
- '!libraries/**.txt'
|
||||
- '!libraries/**.properties'
|
||||
- '!libraries/**.py'
|
||||
- 'package/**'
|
||||
- 'tools/**.py'
|
||||
- 'platform.txt'
|
||||
- 'programmers.txt'
|
||||
- 'idf_component.yml'
|
||||
- 'Kconfig.projbuild'
|
||||
- 'package.json'
|
||||
- '.github/workflows/push.yml'
|
||||
- '.github/scripts/**'
|
||||
- '!.github/scripts/find_*'
|
||||
- '!.github/scripts/on-release.sh'
|
||||
- '!.github/scripts/tests_*'
|
||||
- '!.github/scripts/upload_*'
|
||||
|
||||
concurrency:
|
||||
group: build-${{github.event.pull_request.number || github.ref}}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
env:
|
||||
MAX_CHUNKS: 15
|
||||
|
||||
jobs:
|
||||
cmake-check:
|
||||
name: Check cmake file
|
||||
runs-on: ubuntu-latest
|
||||
|
|
@ -21,32 +43,184 @@ jobs:
|
|||
- uses: actions/checkout@v4
|
||||
- run: bash ./.github/scripts/check-cmakelists.sh
|
||||
|
||||
gen-chunks:
|
||||
name: Generate chunks
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
build_all: ${{ steps.set-chunks.outputs.build_all }}
|
||||
build_static_sketches: ${{ steps.set-chunks.outputs.build_static_sketches }}
|
||||
build_idf: ${{ steps.set-chunks.outputs.build_idf }}
|
||||
build_platformio: ${{ steps.set-chunks.outputs.build_platformio }}
|
||||
chunk_count: ${{ steps.set-chunks.outputs.chunk_count }}
|
||||
chunks: ${{ steps.set-chunks.outputs.chunks }}
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 2
|
||||
|
||||
- name: Get changed files
|
||||
id: changed-files
|
||||
uses: tj-actions/changed-files@v44
|
||||
with:
|
||||
files_yaml: |
|
||||
core:
|
||||
- '.github/**'
|
||||
- '!.github/scripts/install-platformio-esp32.sh'
|
||||
- 'cores/**'
|
||||
- 'package/**'
|
||||
- 'tools/**'
|
||||
- '!tools/platformio-build.py'
|
||||
- 'platform.txt'
|
||||
- 'programmers.txt'
|
||||
libraries:
|
||||
- 'libraries/**/examples/**'
|
||||
- 'libraries/**/src/**'
|
||||
static_sketeches:
|
||||
- 'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino'
|
||||
- 'libraries/BLE/examples/Server/Server.ino'
|
||||
- 'libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino'
|
||||
- 'libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics.ino'
|
||||
- 'libraries/NetworkClientSecure/src/**'
|
||||
- 'libraries/BLE/src/**'
|
||||
- 'libraries/Insights/src/**'
|
||||
idf:
|
||||
- 'idf_component.yml'
|
||||
- 'Kconfig.projbuild'
|
||||
platformio:
|
||||
- 'package.json'
|
||||
- '.github/scripts/install-platformio-esp32.sh'
|
||||
- 'tools/platformio-build.py'
|
||||
|
||||
- name: Set chunks
|
||||
id: set-chunks
|
||||
env:
|
||||
LIB_FILES: ${{ steps.changed-files.outputs.libraries_all_changed_files }}
|
||||
run: |
|
||||
build_all=false
|
||||
chunks_count=0
|
||||
is_pr=${{ github.event_name == 'pull_request' }}
|
||||
|
||||
build_platformio=${{ steps.changed-files.outputs.platformio_any_changed == 'true' }}
|
||||
build_idf=${{ steps.changed-files.outputs.idf_any_changed == 'true' }}
|
||||
build_static_sketches=${{ steps.changed-files.outputs.static_sketeches_any_changed == 'true' }}
|
||||
|
||||
core_changed=${{ steps.changed-files.outputs.core_any_changed == 'true' }}
|
||||
lib_changed=${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
|
||||
|
||||
if [[ $core_changed == 'true' ]] || [[ $is_pr != 'true' ]]; then
|
||||
echo "Core files changed or not a PR. Building all."
|
||||
build_all=true
|
||||
chunks_count=${{ env.MAX_CHUNKS }}
|
||||
elif [[ $lib_changed == 'true' ]]; then
|
||||
echo "Libraries changed. Building only affected sketches."
|
||||
sketches=""
|
||||
for file in $LIB_FILES; do
|
||||
if [[ $file == *.ino ]]; then
|
||||
# If file ends with .ino, add it to the list of sketches
|
||||
echo "Sketch found: $file"
|
||||
sketches+="$file "
|
||||
elif [[ $(basename $(dirname $file)) == "src" ]]; then
|
||||
# If file is in a src directory, find all sketches in the parent/examples directory
|
||||
echo "Library src file found: $file"
|
||||
lib=$(dirname $(dirname $file))
|
||||
lib_sketches=$(find $lib/examples -name *.ino)
|
||||
sketches+="$lib_sketches "
|
||||
echo "Library sketches: $lib_sketches"
|
||||
else
|
||||
# If file is in a example folder but it is not a sketch, find all sketches in the current directory
|
||||
echo "File in example folder found: $file"
|
||||
sketch=$(find $(dirname $file) -name *.ino)
|
||||
sketches+="$sketch "
|
||||
echo "Sketch in example folder: $sketch"
|
||||
fi
|
||||
echo ""
|
||||
done
|
||||
else
|
||||
echo "Unhandled change triggered the build. This should not happen."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -n $sketches ]]; then
|
||||
# Remove duplicates
|
||||
sketches=$(echo $sketches | tr ' ' '\n' | sort | uniq)
|
||||
for sketch in $sketches; do
|
||||
echo $sketch >> sketches_found.txt
|
||||
chunks_count=$((chunks_count+1))
|
||||
done
|
||||
echo "Number of sketches found: $chunks_count"
|
||||
echo "Sketches: $sketches"
|
||||
|
||||
if [[ $chunks_count -gt ${{ env.MAX_CHUNKS }} ]]; then
|
||||
echo "More sketches than the allowed number of chunks found. Limiting to ${{ env.MAX_CHUNKS }} chunks."
|
||||
chunks_count=${{ env.MAX_CHUNKS }}
|
||||
fi
|
||||
fi
|
||||
|
||||
chunks='["0"'
|
||||
for i in $(seq 1 $(( $chunks_count - 1 )) ); do
|
||||
chunks+=",\"$i\""
|
||||
done
|
||||
chunks+="]"
|
||||
|
||||
echo "build_all=$build_all" >> $GITHUB_OUTPUT
|
||||
echo "build_static_sketches=$build_static_sketches" >> $GITHUB_OUTPUT
|
||||
echo "build_idf=$build_idf" >> $GITHUB_OUTPUT
|
||||
echo "build_platformio=$build_platformio" >> $GITHUB_OUTPUT
|
||||
echo "chunk_count=$chunks_count" >> $GITHUB_OUTPUT
|
||||
echo "chunks=$chunks" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Upload sketches found
|
||||
if: ${{ steps.set-chunks.outputs.build_all == 'false' }}
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: sketches_found
|
||||
path: sketches_found.txt
|
||||
overwrite: true
|
||||
if-no-files-found: error
|
||||
|
||||
# Ubuntu
|
||||
build-arduino-linux:
|
||||
name: Arduino ${{ matrix.chunk }} on ubuntu-latest
|
||||
needs: gen-chunks
|
||||
runs-on: ubuntu-latest
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
chunk: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
|
||||
chunk: ${{ fromJson(needs.gen-chunks.outputs.chunks) }}
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
with:
|
||||
python-version: '3.x'
|
||||
- name: Cache tools
|
||||
id: cache-linux
|
||||
|
||||
- name: Get libs cache
|
||||
uses: actions/cache@v4
|
||||
with:
|
||||
key: libs-${{ runner.os }}-${{ runner.arch }}-${{ hashFiles('package/package_esp32_index.template.json', 'tools/get.py') }}
|
||||
path: |
|
||||
./tools/dist
|
||||
~/arduino_ide
|
||||
key: ${{ runner.os }}-${{ hashFiles('package/package_esp32_index.template.json',
|
||||
'tools/get.py',
|
||||
'.github/scripts/install-arduino-ide.sh') }}
|
||||
- name: Build Sketches
|
||||
run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} 15 1
|
||||
./tools/esp32-arduino-libs
|
||||
./tools/esptool
|
||||
./tools/mk*
|
||||
./tools/openocd-esp32
|
||||
./tools/riscv32-*
|
||||
./tools/xtensa-*
|
||||
|
||||
- name: Build all sketches
|
||||
if: ${{ needs.gen-chunks.outputs.build_all == 'true' }}
|
||||
run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} ${{ env.MAX_CHUNKS }} 1
|
||||
|
||||
- name: Download sketches found
|
||||
if: ${{ needs.gen-chunks.outputs.build_all == 'false' }}
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: sketches_found
|
||||
|
||||
- name: Build selected sketches
|
||||
if: ${{ needs.gen-chunks.outputs.build_all == 'false' }}
|
||||
run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} ${{ needs.gen-chunks.outputs.chunk_count }} 1 sketches_found.txt
|
||||
|
||||
#Upload cli compile json as artifact
|
||||
- name: Upload cli compile json
|
||||
|
|
@ -59,6 +233,8 @@ jobs:
|
|||
# Windows and MacOS
|
||||
build-arduino-win-mac:
|
||||
name: Arduino on ${{ matrix.os }}
|
||||
needs: gen-chunks
|
||||
if: ${{ needs.gen-chunks.outputs.build_all == 'true' || needs.gen-chunks.outputs.build_static_sketches == 'true' }}
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
|
@ -76,6 +252,11 @@ jobs:
|
|||
# PlatformIO on Windows, Ubuntu and Mac
|
||||
build-platformio:
|
||||
name: PlatformIO on ${{ matrix.os }}
|
||||
needs: gen-chunks
|
||||
if: |
|
||||
needs.gen-chunks.outputs.build_all == 'true' ||
|
||||
needs.gen-chunks.outputs.build_static_sketches == 'true' ||
|
||||
needs.gen-chunks.outputs.build_platformio == 'true'
|
||||
runs-on: ${{ matrix.os }}
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
|
@ -92,6 +273,8 @@ jobs:
|
|||
|
||||
build-esp-idf-component:
|
||||
name: Build with ESP-IDF ${{ matrix.idf_ver }} for ${{ matrix.idf_target }}
|
||||
needs: gen-chunks
|
||||
if: ${{ needs.gen-chunks.outputs.build_all == 'true' || needs.gen-chunks.outputs.build_idf == 'true' }}
|
||||
runs-on: ubuntu-20.04
|
||||
strategy:
|
||||
fail-fast: false
|
||||
|
|
@ -127,7 +310,7 @@ jobs:
|
|||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
# Check out repository
|
||||
- name: Checkout repository
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
with:
|
||||
token: ${{secrets.GITHUB_TOKEN}}
|
||||
|
|
@ -143,7 +326,7 @@ jobs:
|
|||
pattern: pr_cli_compile_*
|
||||
merge-multiple: true
|
||||
path: master_cli_compile
|
||||
|
||||
|
||||
- name: List files in the directory
|
||||
run: ls -R
|
||||
|
||||
|
|
@ -155,7 +338,7 @@ jobs:
|
|||
git add --all
|
||||
git commit -m "Updated cli compile json files"
|
||||
git push origin HEAD:gh-pages
|
||||
|
||||
|
||||
#Upload PR number as artifact
|
||||
upload-pr-number:
|
||||
name: Upload PR number
|
||||
|
|
|
|||
138
.github/workflows/qemu.yml
vendored
Normal file
138
.github/workflows/qemu.yml
vendored
Normal file
|
|
@ -0,0 +1,138 @@
|
|||
name: QEMU tests
|
||||
|
||||
on:
|
||||
workflow_call:
|
||||
inputs:
|
||||
chip:
|
||||
required: true
|
||||
type: string
|
||||
type:
|
||||
required: true
|
||||
type: string
|
||||
|
||||
concurrency:
|
||||
group: qemu-${{ github.event.pull_request.number || github.ref }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
cancel-in-progress: true
|
||||
|
||||
jobs:
|
||||
qemu-test:
|
||||
name: QEMU ${{ inputs.chip }} ${{ inputs.type }} tests
|
||||
env:
|
||||
id: ${{ github.event.pull_request.number || github.ref }}-${{ github.event.pull_request.head.sha || github.sha }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
QEMU_INSTALL_PATH: "$HOME"
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Check if already run
|
||||
if: ${{ github.event.pull_request.number != null }}
|
||||
id: get-cache-results
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
key: tests-${{ env.id }}-results-qemu
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
|
||||
- name: Evaluate if tests should be run
|
||||
id: check-tests
|
||||
run: |
|
||||
cache_exists=${{ steps.get-cache-results.outputs.cache-hit == 'true' }}
|
||||
enabled=true
|
||||
|
||||
if [[ $cache_exists == 'true' ]]; then
|
||||
echo "Already ran, skipping"
|
||||
enabled=false
|
||||
fi
|
||||
|
||||
echo "enabled=$enabled" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
- uses: actions/setup-python@v5
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
cache-dependency-path: tests/requirements.txt
|
||||
cache: 'pip'
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install Python dependencies
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
|
||||
- name: Install APT dependencies
|
||||
uses: awalsh128/cache-apt-pkgs-action@v1.4.2
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
packages: libpixman-1-0 libnuma1 libglib2.0-0 libslirp0 libsdl2-2.0-0
|
||||
version: 1.0
|
||||
|
||||
- name: Get QEMU version
|
||||
uses: pozetroninc/github-action-get-latest-release@v0.7.0
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
id: get-qemu-version
|
||||
with:
|
||||
token: ${{secrets.GITHUB_TOKEN}}
|
||||
owner: espressif
|
||||
repo: qemu
|
||||
excludes: prerelease, draft
|
||||
|
||||
- name: Cache QEMU
|
||||
id: cache-qemu
|
||||
uses: actions/cache@v4
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
path: |
|
||||
~/qemu
|
||||
key: qemu-${{ steps.get-qemu-version.outputs.release }}-${{ hashFiles('.github/workflows/qemu.yml') }}
|
||||
|
||||
- name: Download QEMU
|
||||
if: steps.cache-qemu.outputs.cache-hit != 'true' && steps.check-tests.outputs.enabled == 'true'
|
||||
run: |
|
||||
cd ${{ env.QEMU_INSTALL_PATH }}
|
||||
underscore_release=$(echo ${{ steps.get-qemu-version.outputs.release }} | sed 's/\-/_/g')
|
||||
curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-riscv32-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-riscv32.tar.xz
|
||||
curl -L https://github.com/espressif/qemu/releases/download/${{ steps.get-qemu-version.outputs.release }}/qemu-xtensa-softmmu-${underscore_release}-x86_64-linux-gnu.tar.xz > qemu-xtensa.tar.xz
|
||||
tar -xf qemu-riscv32.tar.xz
|
||||
tar -xf qemu-xtensa.tar.xz
|
||||
rm qemu-*
|
||||
echo "QEMU_PATH=${{ env.QEMU_INSTALL_PATH }}/qemu" >> $GITHUB_ENV
|
||||
|
||||
- name: Get binaries
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
- name: Run Tests
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
run: QEMU_PATH="${{ env.QEMU_INSTALL_PATH }}" bash .github/scripts/tests_run.sh -c -type ${{inputs.type}} -t ${{inputs.chip}} -i 0 -m 1 -Q
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as cache
|
||||
uses: actions/cache/save@v4
|
||||
if: ${{ always() && steps.check-tests.outputs.enabled == 'true' }}
|
||||
with:
|
||||
key: tests-${{ env.id }}-results-qemu
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} QEMU results as artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: always()
|
||||
with:
|
||||
name: tests-results-qemu-${{ inputs.chip }}-${{ inputs.type }}
|
||||
overwrite: true
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
198
.github/workflows/tests.yml
vendored
Normal file
198
.github/workflows/tests.yml
vendored
Normal file
|
|
@ -0,0 +1,198 @@
|
|||
name: Runtime Tests
|
||||
|
||||
on:
|
||||
workflow_dispatch:
|
||||
pull_request_target:
|
||||
types: [opened, reopened, closed, synchronize, labeled, unlabeled]
|
||||
paths:
|
||||
- 'tests/**'
|
||||
- 'cores/**'
|
||||
- 'libraries/**'
|
||||
- '!libraries/**.md'
|
||||
- '!libraries/**.txt'
|
||||
- '!libraries/**.properties'
|
||||
- 'package/**'
|
||||
- '.github/workflows/tests.yml'
|
||||
- '.github/workflows/build_tests.yml'
|
||||
- '.github/workflows/hw.yml'
|
||||
- '.github/workflows/wokwi.yml'
|
||||
- '.github/workflows/qemu.yml'
|
||||
- '.github/scripts/install-*.sh'
|
||||
- '.github/scripts/tests_*.sh'
|
||||
- '.github/scripts/sketch_utils.sh'
|
||||
schedule:
|
||||
- cron: '0 2 * * *'
|
||||
|
||||
concurrency:
|
||||
group: tests-${{ github.event.pull_request.number || github.ref }}
|
||||
cancel-in-progress: true
|
||||
|
||||
# To avoid giving elevated permissions to the entire workflow, specify default permissions at the top level
|
||||
# and then override them for specific jobs.
|
||||
permissions: { contents: read }
|
||||
|
||||
jobs:
|
||||
gen-matrix:
|
||||
name: Generate matrix
|
||||
if: github.event.action != 'closed'
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
build-types: ${{ steps.set-matrix.outputs.build-types }}
|
||||
hw-types: ${{ steps.set-matrix.outputs.hw-types }}
|
||||
wokwi-types: ${{ steps.set-matrix.outputs.wokwi-types }}
|
||||
qemu-types: ${{ steps.set-matrix.outputs.qemu-types }}
|
||||
steps:
|
||||
- name: Set matrix
|
||||
id: set-matrix
|
||||
run: |
|
||||
build_types='["validation"'
|
||||
hw_types='["validation"'
|
||||
wokwi_types='["validation"'
|
||||
qemu_types='["validation"'
|
||||
|
||||
is_pr=${{ github.event.pull_request.number != null }}
|
||||
is_performance_enabled=${{ contains(github.event.pull_request.labels.*.name, 'perf_test') }}
|
||||
|
||||
if [[ $is_pr != 'true' ]] || [[ $is_performance_enabled == 'true' ]]; then
|
||||
build_types+=',"performance"'
|
||||
hw_types+=',"performance"'
|
||||
#wokwi_types+=',"performance"'
|
||||
#qemu_types+=',"performance"'
|
||||
fi
|
||||
|
||||
echo "build-types=$build_types]" >> $GITHUB_OUTPUT
|
||||
echo "hw-types=$hw_types]" >> $GITHUB_OUTPUT
|
||||
echo "wokwi-types=$wokwi_types]" >> $GITHUB_OUTPUT
|
||||
echo "qemu-types=$qemu_types]" >> $GITHUB_OUTPUT
|
||||
|
||||
call-build-tests:
|
||||
name: Build
|
||||
uses: espressif/arduino-esp32/.github/workflows/build_tests.yml@master
|
||||
needs: gen-matrix
|
||||
if: github.event.action != 'closed'
|
||||
strategy:
|
||||
matrix:
|
||||
type: ${{ fromJson(needs.gen-matrix.outputs.build-types) }}
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
with:
|
||||
type: ${{ matrix.type }}
|
||||
chip: ${{ matrix.chip }}
|
||||
|
||||
call-hardware-tests:
|
||||
name: Hardware
|
||||
uses: espressif/arduino-esp32/.github/workflows/hw.yml@master
|
||||
needs: [gen-matrix, call-build-tests]
|
||||
if: |
|
||||
github.repository == 'espressif/arduino-esp32' &&
|
||||
(github.event_name != 'pull_request_target' ||
|
||||
contains(github.event.pull_request.labels.*.name, 'hil_test'))
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
type: ${{ fromJson(needs.gen-matrix.outputs.hw-types) }}
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
with:
|
||||
type: ${{ matrix.type }}
|
||||
chip: ${{ matrix.chip }}
|
||||
|
||||
call-wokwi-tests:
|
||||
name: Wokwi
|
||||
uses: espressif/arduino-esp32/.github/workflows/wokwi.yml@master
|
||||
needs: [gen-matrix, call-build-tests]
|
||||
if: github.event.action != 'closed'
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
type: ${{ fromJson(needs.gen-matrix.outputs.wokwi-types) }}
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
secrets:
|
||||
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
|
||||
with:
|
||||
type: ${{ matrix.type }}
|
||||
chip: ${{ matrix.chip }}
|
||||
|
||||
# This job is disabled for now
|
||||
call-qemu-tests:
|
||||
name: QEMU
|
||||
uses: espressif/arduino-esp32/.github/workflows/qemu.yml@master
|
||||
needs: [gen-matrix, call-build-tests]
|
||||
if: false
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
type: ${{ fromJson(needs.gen-matrix.outputs.qemu-types) }}
|
||||
chip: ['esp32', 'esp32c3']
|
||||
with:
|
||||
type: ${{ matrix.type }}
|
||||
chip: ${{ matrix.chip }}
|
||||
|
||||
unit-test-results:
|
||||
name: Unit Test Results
|
||||
needs: [call-hardware-tests, call-wokwi-tests, call-qemu-tests]
|
||||
if: always() && github.event_name == 'pull_request_target'
|
||||
runs-on: ubuntu-latest
|
||||
permissions:
|
||||
checks: write
|
||||
pull-requests: write
|
||||
steps:
|
||||
- name: Download and Extract HW Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
merge-multiple: true
|
||||
pattern: tests-results-hw-*
|
||||
path: ./results/hw
|
||||
|
||||
- name: Download and Extract Wokwi Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
merge-multiple: true
|
||||
pattern: tests-results-wokwi-*
|
||||
path: ./results/wokwi
|
||||
|
||||
- name: Download and Extract QEMU Artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
continue-on-error: true
|
||||
with:
|
||||
merge-multiple: true
|
||||
pattern: tests-results-qemu-*
|
||||
path: ./results/qemu
|
||||
|
||||
- name: Publish Unit Test Results
|
||||
uses: EnricoMi/publish-unit-test-result-action@v2
|
||||
with:
|
||||
commit: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
files: ./results/**/*.xml
|
||||
clean:
|
||||
name: Clean objects
|
||||
needs: unit-test-results
|
||||
if: always() && ${{ github.event_name }} == 'pull_request_target' && ${{ github.event.action }} != 'closed'
|
||||
permissions:
|
||||
actions: write
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Clean up caches
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
script: |
|
||||
const ref = '${{ github.event.pull_request.number || github.ref }}';
|
||||
const key_prefix = 'tests-' + ref + '-';
|
||||
|
||||
await github.paginate(github.rest.actions.getActionsCacheList, {
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
per_page: 100,
|
||||
key: key_prefix
|
||||
}).then(caches => {
|
||||
if (caches) {
|
||||
for (const cache of caches) {
|
||||
console.log(`Deleting cache: ${cache.key}`);
|
||||
github.rest.actions.deleteActionsCacheById({
|
||||
owner: context.repo.owner,
|
||||
repo: context.repo.repo,
|
||||
cache_id: cache.id
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
220
.github/workflows/wokwi.yml
vendored
220
.github/workflows/wokwi.yml
vendored
|
|
@ -1,159 +1,121 @@
|
|||
name: Run tests in wokwi on PR
|
||||
name: Wokwi tests
|
||||
|
||||
on:
|
||||
workflow_run:
|
||||
workflows: [Run tests]
|
||||
types:
|
||||
- completed
|
||||
workflow_call:
|
||||
inputs:
|
||||
chip:
|
||||
type: string
|
||||
description: 'Chip to run tests for'
|
||||
required: true
|
||||
type:
|
||||
type: string
|
||||
description: 'Type of tests to run'
|
||||
required: true
|
||||
secrets:
|
||||
WOKWI_CLI_TOKEN:
|
||||
description: 'Wokwi CLI API token'
|
||||
required: true
|
||||
|
||||
permissions:
|
||||
statuses: write
|
||||
concurrency:
|
||||
group: tests-wokwi-${{ github.event.pull_request.number || github.ref }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
cancel-in-progress: true
|
||||
|
||||
env:
|
||||
MAX_CHUNKS: 15
|
||||
WOKWI_TIMEOUT: 600000 # Milliseconds
|
||||
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
jobs:
|
||||
get_event_file:
|
||||
name: Get event file
|
||||
wokwi-test:
|
||||
name: Wokwi ${{ inputs.chip }} ${{ inputs.type }} tests
|
||||
env:
|
||||
id: ${{ github.event.pull_request.number || github.ref }}-${{ github.event.pull_request.head.sha || github.sha }}-${{ inputs.chip }}-${{ inputs.type }}
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
ref: ${{ steps.get-ref.outputs.ref }}
|
||||
steps:
|
||||
- name: Download event file
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
run-id: ${{github.event.workflow_run.id}}
|
||||
github-token: ${{env.GITHUB_TOKEN}}
|
||||
name: event_file
|
||||
# Disabled as Wokwi infrastrucutre is not stable (so we can re-trigger the tests manually)
|
||||
# - name: Check if already run
|
||||
# if: ${{ github.event.pull_request.number != null }}
|
||||
# id: get-cache-results
|
||||
# uses: actions/cache/restore@v4
|
||||
# with:
|
||||
# key: tests-${{ env.id }}-results-wokwi
|
||||
# path: |
|
||||
# tests/**/*.xml
|
||||
# tests/**/result_*.json
|
||||
|
||||
- name: Get ref
|
||||
id: get-ref
|
||||
- name: Evaluate if tests should be run
|
||||
id: check-tests
|
||||
run: |
|
||||
PR_NUMBER=$(jq -r '.number' event.json)
|
||||
echo "PR_NUMBER = $PR_NUMBER"
|
||||
echo "ref=$PR_NUMBER" >> $GITHUB_OUTPUT
|
||||
cache_exists=${{ steps.get-cache-results.outputs.cache-hit == 'true' }}
|
||||
enabled=true
|
||||
|
||||
if [[ $cache_exists == 'true' ]]; then
|
||||
echo "Already ran, skipping"
|
||||
enabled=false
|
||||
fi
|
||||
|
||||
echo "enabled=$enabled" >> $GITHUB_OUTPUT
|
||||
|
||||
gen_chunks:
|
||||
if: github.event.workflow_run.event == 'pull_request' && github.event.workflow_run.conclusion == 'success'
|
||||
name: Generate Chunks matrix
|
||||
runs-on: ubuntu-latest
|
||||
needs: get_event_file
|
||||
outputs:
|
||||
chunks: ${{ steps.gen-chunks.outputs.chunks }}
|
||||
concurrency:
|
||||
group: wokwi-${{ needs.get_event_file.outputs.ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
steps:
|
||||
- name: Checkout Repository
|
||||
uses: actions/checkout@v4
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
ref: ${{ github.event.workflow_run.head_sha }} # Check out the code of the PR to generate accurate chunks
|
||||
ref: ${{ github.event.pull_request.head.sha || github.sha }}
|
||||
|
||||
- name: Generate Chunks matrix
|
||||
id: gen-chunks
|
||||
run: |
|
||||
set +e
|
||||
.github/scripts/sketch_utils.sh count tests
|
||||
sketches=$?
|
||||
if [[ $sketches -ge ${{env.MAX_CHUNKS}} ]]; then
|
||||
$sketches=${{env.MAX_CHUNKS}}
|
||||
fi
|
||||
set -e
|
||||
rm sketches.txt
|
||||
CHUNKS=$(jq -c -n '$ARGS.positional' --args `seq 0 1 $((sketches - 1))`)
|
||||
echo "chunks=${CHUNKS}" >>$GITHUB_OUTPUT
|
||||
|
||||
wokwi-test:
|
||||
needs: [get_event_file, gen_chunks]
|
||||
name: ${{matrix.chip}}-Wokwi_Test#${{matrix.chunks}}
|
||||
concurrency:
|
||||
group: wokwi-${{ needs.get_event_file.outputs.ref || github.ref }}-${{matrix.chip}}-${{matrix.chunks}}
|
||||
cancel-in-progress: true
|
||||
strategy:
|
||||
fail-fast: false
|
||||
matrix:
|
||||
chip: ['esp32', 'esp32s2', 'esp32s3', 'esp32c3', 'esp32c6', 'esp32h2']
|
||||
chunks: ${{fromJson(needs.gen_chunks.outputs.chunks)}}
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout repository
|
||||
uses: actions/checkout@v4
|
||||
- uses: actions/setup-python@v5
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
with:
|
||||
ref: ${{ github.event.workflow_run.head_sha }} # Check out the code of the PR to get correct pytest files
|
||||
|
||||
- name: Download ${{matrix.chip}}-${{matrix.chunks}} artifacts
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: ${{matrix.chip}}-${{matrix.chunks}}.artifacts
|
||||
path: ~/
|
||||
run-id: ${{github.event.workflow_run.id}}
|
||||
github-token: ${{env.GITHUB_TOKEN}}
|
||||
|
||||
- name: Install Wokwi CLI
|
||||
run: curl -L https://wokwi.com/ci/install.sh | sh
|
||||
|
||||
- name: Wokwi CI Server
|
||||
uses: wokwi/wokwi-ci-server-action@v1
|
||||
cache-dependency-path: tests/requirements.txt
|
||||
cache: 'pip'
|
||||
python-version: '3.x'
|
||||
|
||||
- name: Install dependencies
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
sudo apt update && sudo apt install -y -qq jq
|
||||
|
||||
- name: Install Wokwi CLI
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
run: curl -L https://wokwi.com/ci/install.sh | sh
|
||||
|
||||
- name: Wokwi CI Server
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
uses: wokwi/wokwi-ci-server-action@v1
|
||||
|
||||
- name: Get binaries
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
|
||||
- name: Run Tests
|
||||
if: steps.check-tests.outputs.enabled == 'true'
|
||||
env:
|
||||
WOKWI_CLI_TOKEN: ${{ secrets.WOKWI_CLI_TOKEN }}
|
||||
run: |
|
||||
bash .github/scripts/tests_run.sh -c -t ${{matrix.chip}} -i ${{matrix.chunks}} -m ${{env.MAX_CHUNKS}} -w ${{env.WOKWI_TIMEOUT}}
|
||||
bash .github/scripts/tests_run.sh -c -type ${{ inputs.type }} -t ${{inputs.chip}} -i 0 -m 1 -W ${{env.WOKWI_TIMEOUT}}
|
||||
|
||||
- name: Check if tests were skipped
|
||||
id: check-test-skipped
|
||||
run: |
|
||||
if [ $(find "tests" -name ".test_skipped") ]; then
|
||||
echo "skipped=true" >> $GITHUB_OUTPUT
|
||||
else
|
||||
echo "skipped=false" >> $GITHUB_OUTPUT
|
||||
fi
|
||||
# Disabled as Wokwi infrastrucutre is not stable (so we can re-trigger the tests manually)
|
||||
# - name: Upload ${{ inputs.chip }} ${{ inputs.type }} Wokwi results as cache
|
||||
# uses: actions/cache/save@v4
|
||||
# if: ${{ always() && steps.check-tests.outputs.enabled == 'true' }}
|
||||
# with:
|
||||
# key: tests-${{ env.id }}-results-wokwi
|
||||
# path: |
|
||||
# tests/**/*.xml
|
||||
# tests/**/result_*.json
|
||||
|
||||
- name: Upload test result artifacts
|
||||
- name: Upload ${{ inputs.chip }} ${{ inputs.type }} Wokwi results as artifacts
|
||||
uses: actions/upload-artifact@v4
|
||||
if: ${{ always() && steps.check-test-skipped.outputs.skipped == 'false' }}
|
||||
if: always()
|
||||
with:
|
||||
name: wokwi_results-${{matrix.chip}}-${{matrix.chunks}}
|
||||
path: tests/**/*.xml
|
||||
|
||||
report-result:
|
||||
name: Report wokwi test result
|
||||
runs-on: ubuntu-latest
|
||||
needs: [get_event_file, wokwi-test]
|
||||
concurrency:
|
||||
group: wokwi-${{ needs.get_event_file.outputs.ref || github.ref }}
|
||||
cancel-in-progress: true
|
||||
if: always() && github.event.workflow_run.event == 'pull_request'
|
||||
steps:
|
||||
- name: Report result
|
||||
uses: actions/github-script@v7
|
||||
with:
|
||||
debug: true
|
||||
script: |
|
||||
const owner = '${{ github.repository_owner }}';
|
||||
const repo = '${{ github.repository }}'.split('/')[1];
|
||||
const sha = '${{ github.event.workflow_run.head_sha }}';
|
||||
const result = '${{ needs.wokwi-test.result }}' == 'success' ? 'success' : 'failure';
|
||||
core.debug(`owner: ${owner}`);
|
||||
core.debug(`repo: ${repo}`);
|
||||
core.debug(`sha: ${sha}`);
|
||||
core.debug(`result: ${result}`);
|
||||
const { context: name, state } = (await github.rest.repos.createCommitStatus({
|
||||
context: 'Wokwi tests',
|
||||
description: 'Wokwi simulator tests',
|
||||
owner: owner,
|
||||
repo: repo,
|
||||
sha: sha,
|
||||
state: result,
|
||||
target_url: 'https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}'
|
||||
})).data;
|
||||
core.info(`${name} is ${state}`);
|
||||
|
||||
name: tests-results-wokwi-${{ inputs.chip }}-${{ inputs.type }}
|
||||
overwrite: true
|
||||
path: |
|
||||
tests/**/*.xml
|
||||
tests/**/result_*.json
|
||||
|
|
|
|||
5
libraries/ArduinoOTA/examples/BasicOTA/ci.json
Normal file
5
libraries/ArduinoOTA/examples/BasicOTA/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
5
libraries/AsyncUDP/examples/AsyncUDPClient/ci.json
Normal file
5
libraries/AsyncUDP/examples/AsyncUDPClient/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
5
libraries/AsyncUDP/examples/AsyncUDPServer/ci.json
Normal file
5
libraries/AsyncUDP/examples/AsyncUDPServer/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/BLE5_extended_scan/ci.json
Normal file
6
libraries/BLE/examples/BLE5_extended_scan/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/BLE5_multi_advertising/ci.json
Normal file
6
libraries/BLE/examples/BLE5_multi_advertising/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/BLE5_periodic_advertising/ci.json
Normal file
6
libraries/BLE/examples/BLE5_periodic_advertising/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/BLE5_periodic_sync/ci.json
Normal file
6
libraries/BLE/examples/BLE5_periodic_sync/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Beacon_Scanner/ci.json
Normal file
5
libraries/BLE/examples/Beacon_Scanner/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Client/ci.json
Normal file
5
libraries/BLE/examples/Client/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/EddystoneTLM_Beacon/ci.json
Normal file
6
libraries/BLE/examples/EddystoneTLM_Beacon/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
6
libraries/BLE/examples/EddystoneURL_Beacon/ci.json
Normal file
6
libraries/BLE/examples/EddystoneURL_Beacon/ci.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32h2": false,
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Notify/ci.json
Normal file
5
libraries/BLE/examples/Notify/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Scan/ci.json
Normal file
5
libraries/BLE/examples/Scan/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Server/ci.json
Normal file
5
libraries/BLE/examples/Server/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Server_multiconnect/ci.json
Normal file
5
libraries/BLE/examples/Server_multiconnect/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/UART/ci.json
Normal file
5
libraries/BLE/examples/UART/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/Write/ci.json
Normal file
5
libraries/BLE/examples/Write/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
5
libraries/BLE/examples/iBeacon/ci.json
Normal file
5
libraries/BLE/examples/iBeacon/ci.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32s2": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
9
libraries/BluetoothSerial/examples/GetLocalMAC/ci.json
Normal file
9
libraries/BluetoothSerial/examples/GetLocalMAC/ci.json
Normal file
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
{
|
||||
"targets": {
|
||||
"esp32c3": false,
|
||||
"esp32c6": false,
|
||||
"esp32h2": false,
|
||||
"esp32s2": false,
|
||||
"esp32s3": false
|
||||
}
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue