diff --git a/.github/scripts/on-push.sh b/.github/scripts/on-push.sh index 7abe3600d80..f925390da13 100755 --- a/.github/scripts/on-push.sh +++ b/.github/scripts/on-push.sh @@ -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 diff --git a/.github/scripts/set_push_chunks.sh b/.github/scripts/set_push_chunks.sh new file mode 100644 index 00000000000..472205f0c38 --- /dev/null +++ b/.github/scripts/set_push_chunks.sh @@ -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 diff --git a/.github/scripts/sketch_utils.sh b/.github/scripts/sketch_utils.sh index 1b43ced1480..cdf334a4fc6 100755 --- a/.github/scripts/sketch_utils.sh +++ b/.github/scripts/sketch_utils.sh @@ -192,7 +192,7 @@ function build_sketch(){ # build_sketch [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 [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 > ${{ env.RESULT_SIZES_TEST_FILE }} - 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 diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 3ef15df1566..2f14a6fb62f 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -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 diff --git a/.github/workflows/qemu.yml b/.github/workflows/qemu.yml index 1aa155129c8..da31054aeef 100644 --- a/.github/workflows/qemu.yml +++ b/.github/workflows/qemu.yml @@ -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' }} diff --git a/.github/workflows/wokwi.yml b/.github/workflows/wokwi.yml index 84b0acf06b4..f9eee85f95f 100644 --- a/.github/workflows/wokwi.yml +++ b/.github/workflows/wokwi.yml @@ -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' }}