fix(ci): Fix issues found in workflows (#9829)
* ci(tests): Swap cache to artifacts to avoid errors between OSes * ci(push): Fix chunk generation for compilation * ci(tests): Fix error code propagation * ci(push): Add shebang to new script * ci(push): Fix sizes upload if there is no changes * ci(bot): Fix GitHub actions bot commit info
This commit is contained in:
parent
e382746b95
commit
a31a5fca17
10 changed files with 124 additions and 107 deletions
2
.github/scripts/on-push.sh
vendored
2
.github/scripts/on-push.sh
vendored
|
|
@ -108,7 +108,7 @@ if [ "$BUILD_PIO" -eq 0 ]; then
|
|||
|
||||
if [ "$BUILD_LOG" -eq 1 ]; then
|
||||
#remove last comma from the last JSON object
|
||||
sed -i '$ s/.$//' "$sizes_file"
|
||||
sed -i '$ s/,$//' "$sizes_file"
|
||||
#echo end of JSON array
|
||||
echo "]}" >> $sizes_file
|
||||
fi
|
||||
|
|
|
|||
83
.github/scripts/set_push_chunks.sh
vendored
Normal file
83
.github/scripts/set_push_chunks.sh
vendored
Normal file
|
|
@ -0,0 +1,83 @@
|
|||
#!/bin/bash
|
||||
|
||||
build_all=false
|
||||
chunks_count=0
|
||||
|
||||
if [[ $CORE_CHANGED == 'true' ]] || [[ $IS_PR != 'true' ]]; then
|
||||
echo "Core files changed or not a PR. Building all."
|
||||
build_all=true
|
||||
chunks_count=$MAX_CHUNKS
|
||||
elif [[ $LIB_CHANGED == 'true' ]]; then
|
||||
echo "Libraries changed. Building only affected sketches."
|
||||
if [[ $NETWORKING_CHANGED == 'true' ]]; then
|
||||
echo "Networking libraries changed. Building networking related sketches."
|
||||
networking_sketches="$(find libraries/WiFi -name *.ino) "
|
||||
networking_sketches+="$(find libraries/Ethernet -name *.ino) "
|
||||
networking_sketches+="$(find libraries/PPP -name *.ino) "
|
||||
networking_sketches+="$(find libraries/NetworkClientSecure -name *.ino) "
|
||||
networking_sketches+="$(find libraries/WebServer -name *.ino) "
|
||||
fi
|
||||
if [[ $FS_CHANGED == 'true' ]]; then
|
||||
echo "FS libraries changed. Building FS related sketches."
|
||||
fs_sketches="$(find libraries/SD -name *.ino) "
|
||||
fs_sketches+="$(find libraries/SD_MMC -name *.ino) "
|
||||
fs_sketches+="$(find libraries/SPIFFS -name *.ino) "
|
||||
fs_sketches+="$(find libraries/LittleFS -name *.ino) "
|
||||
fs_sketches+="$(find libraries/FFat -name *.ino) "
|
||||
fi
|
||||
sketches="$networking_sketches $fs_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))
|
||||
if [[ -d $lib/examples ]]; then
|
||||
lib_sketches=$(find $lib/examples -name *.ino)
|
||||
sketches+="$lib_sketches "
|
||||
echo "Library sketches: $lib_sketches"
|
||||
fi
|
||||
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
|
||||
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:"
|
||||
echo "$sketches"
|
||||
|
||||
if [[ $chunks_count -gt $MAX_CHUNKS ]]; then
|
||||
echo "More sketches than the allowed number of chunks found. Limiting to $MAX_CHUNKS chunks."
|
||||
chunks_count=$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_libraries=$BUILD_LIBRARIES" >> $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
|
||||
7
.github/scripts/sketch_utils.sh
vendored
7
.github/scripts/sketch_utils.sh
vendored
|
|
@ -192,7 +192,7 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
|
||||
exit_status=$?
|
||||
if [ $exit_status -ne 0 ]; then
|
||||
echo ""ERROR: Compilation failed with error code $exit_status""
|
||||
echo "ERROR: Compilation failed with error code $exit_status"
|
||||
exit $exit_status
|
||||
fi
|
||||
|
||||
|
|
@ -236,7 +236,7 @@ function build_sketch(){ # build_sketch <ide_path> <user_path> <path-to-ino> [ex
|
|||
|
||||
exit_status=$?
|
||||
if [ $exit_status -ne 0 ]; then
|
||||
echo ""ERROR: Compilation failed with error code $exit_status""
|
||||
echo "ERROR: Compilation failed with error code $exit_status"
|
||||
exit $exit_status
|
||||
fi
|
||||
# $ide_path/arduino-builder -compile -logger=human -core-api-version=10810 \
|
||||
|
|
@ -398,6 +398,7 @@ 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 "No sketches to build for $target in this chunk"
|
||||
return 0
|
||||
fi
|
||||
|
||||
|
|
@ -437,7 +438,7 @@ function build_sketches(){ # build_sketches <ide_path> <user_path> <target> <pat
|
|||
continue
|
||||
fi
|
||||
echo ""
|
||||
echo "Building Sketch Index $(($sketchnum - 1)) - $sketchdirname"
|
||||
echo "Building Sketch Index $sketchnum - $sketchdirname"
|
||||
build_sketch $args -s $sketchdir $xtra_opts
|
||||
local result=$?
|
||||
if [ $result -ne 0 ]; then
|
||||
|
|
|
|||
4
.github/scripts/tests_run.sh
vendored
4
.github/scripts/tests_run.sh
vendored
|
|
@ -95,13 +95,12 @@ function run_test() {
|
|||
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
|
||||
printf "\033[91mFailed test: $sketchname -- Config: $i\033[0m\n\n"
|
||||
error=$result
|
||||
fi
|
||||
fi
|
||||
done
|
||||
printf "Test return code: $error\n"
|
||||
return $error
|
||||
}
|
||||
|
||||
|
|
@ -250,7 +249,6 @@ else
|
|||
|
||||
exit_code=0
|
||||
run_test $target $sketch $options $erase || exit_code=$?
|
||||
echo "Sketch $sketch exit code: $exit_code"
|
||||
if [ $exit_code -ne 0 ]; then
|
||||
error=$exit_code
|
||||
fi
|
||||
|
|
|
|||
12
.github/workflows/hw.yml
vendored
12
.github/workflows/hw.yml
vendored
|
|
@ -77,18 +77,16 @@ jobs:
|
|||
run: |
|
||||
pip install -U pip
|
||||
pip install -r tests/requirements.txt --extra-index-url https://dl.espressif.com/pypi
|
||||
apt update
|
||||
apt install -y jq
|
||||
|
||||
- name: Get binaries
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
~/.arduino/tests
|
||||
|
||||
- name: Run Tests
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
|
|
|
|||
4
.github/workflows/lib.yml
vendored
4
.github/workflows/lib.yml
vendored
|
|
@ -120,8 +120,8 @@ jobs:
|
|||
|
||||
- name: Push to github repo
|
||||
run: |
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add ${{ env.RESULT_LIBRARY_TEST_FILE }}
|
||||
git commit -m "Generated External Libraries Test Results"
|
||||
git push origin HEAD:gh-pages
|
||||
|
|
|
|||
4
.github/workflows/publishsizes-2.x.yml
vendored
4
.github/workflows/publishsizes-2.x.yml
vendored
|
|
@ -46,8 +46,8 @@ jobs:
|
|||
|
||||
- name: Push to github repo
|
||||
run: |
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add ${{ env.RESULT_SIZES_TEST_FILE }}
|
||||
git commit -m "Generated Sizes Results (master-v2.x)"
|
||||
git push origin HEAD:gh-pages
|
||||
|
|
|
|||
91
.github/workflows/push.yml
vendored
91
.github/workflows/push.yml
vendored
|
|
@ -77,6 +77,10 @@ jobs:
|
|||
libraries:
|
||||
- 'libraries/**/examples/**'
|
||||
- 'libraries/**/src/**'
|
||||
networking:
|
||||
- 'libraries/Network/src/**'
|
||||
fs:
|
||||
- 'libraries/FS/src/**'
|
||||
static_sketeches:
|
||||
- 'libraries/NetworkClientSecure/examples/WiFiClientSecure/WiFiClientSecure.ino'
|
||||
- 'libraries/BLE/examples/Server/Server.ino'
|
||||
|
|
@ -97,78 +101,18 @@ jobs:
|
|||
id: set-chunks
|
||||
env:
|
||||
LIB_FILES: ${{ steps.changed-files.outputs.libraries_all_changed_files }}
|
||||
IS_PR: ${{ github.event_name == 'pull_request' }}
|
||||
MAX_CHUNKS: ${{ env.MAX_CHUNKS }}
|
||||
BUILD_PLATFORMIO: ${{ steps.changed-files.outputs.platformio_any_changed == 'true' }}
|
||||
BUILD_IDF: ${{ steps.changed-files.outputs.idf_any_changed == 'true' }}
|
||||
BUILD_LIBRARIES: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
|
||||
BUILD_STATIC_SKETCHES: ${{ steps.changed-files.outputs.static_sketeches_any_changed == 'true' }}
|
||||
FS_CHANGED: ${{ steps.changed-files.outputs.fs_any_changed == 'true' }}
|
||||
NETWORKING_CHANGED: ${{ steps.changed-files.outputs.networking_any_changed == 'true' }}
|
||||
CORE_CHANGED: ${{ steps.changed-files.outputs.core_any_changed == 'true' }}
|
||||
LIB_CHANGED: ${{ steps.changed-files.outputs.libraries_any_changed == 'true' }}
|
||||
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_libraries=${{ steps.changed-files.outputs.libraries_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
|
||||
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_libraries=$build_libraries" >> $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
|
||||
bash ./.github/scripts/set_push_chunks.sh
|
||||
|
||||
- name: Upload sketches found
|
||||
if: ${{ steps.set-chunks.outputs.build_all == 'false' && steps.set-chunks.outputs.build_libraries == 'true' }}
|
||||
|
|
@ -336,9 +280,10 @@ jobs:
|
|||
|
||||
- name: Commit json files to gh-pages if on master
|
||||
if: github.event_name == 'push' && github.ref == 'refs/heads/master'
|
||||
continue-on-error: true
|
||||
run: |
|
||||
git config user.name github-actions
|
||||
git config user.email github-actions@github.com
|
||||
git config user.name "github-actions[bot]"
|
||||
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
|
||||
git add --all
|
||||
git commit -m "Updated cli compile json files"
|
||||
git push origin HEAD:gh-pages
|
||||
|
|
|
|||
10
.github/workflows/qemu.yml
vendored
10
.github/workflows/qemu.yml
vendored
|
|
@ -113,15 +113,11 @@ jobs:
|
|||
|
||||
- name: Get binaries
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
~/.arduino/tests
|
||||
|
||||
- name: Run Tests
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
|
|
|
|||
10
.github/workflows/wokwi.yml
vendored
10
.github/workflows/wokwi.yml
vendored
|
|
@ -91,15 +91,11 @@ jobs:
|
|||
|
||||
- name: Get binaries
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
id: cache-build-binaries
|
||||
uses: actions/cache/restore@v4
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
fail-on-cache-miss: true
|
||||
key: tests-${{ env.id }}-bin
|
||||
name: tests-bin-${{ inputs.chip }}-${{ inputs.type }}
|
||||
path: |
|
||||
~/.arduino/tests/**/build*.tmp/*.bin
|
||||
~/.arduino/tests/**/build*.tmp/*.elf
|
||||
~/.arduino/tests/**/build*.tmp/*.json
|
||||
~/.arduino/tests
|
||||
|
||||
- name: Run Tests
|
||||
if: ${{ steps.check-tests.outputs.enabled == 'true' }}
|
||||
|
|
|
|||
Loading…
Reference in a new issue