From ff95b59f30d4b475d7abcc2f52df4abf8dddfd48 Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:09:01 +0200 Subject: [PATCH 1/9] Remove event-file from External libs wf --- .github/workflows/lib.yml | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/.github/workflows/lib.yml b/.github/workflows/lib.yml index da2e5ed6a04..42073ac4aa6 100644 --- a/.github/workflows/lib.yml +++ b/.github/workflows/lib.yml @@ -121,16 +121,3 @@ jobs: git add ${{ env.RESULT_LIBRARY_TEST_FILE }} git commit -m "Generated External Libraries Test Results" git push origin HEAD:gh-pages - - event_file: - name: "Event File" - if: | - contains(github.event.pull_request.labels.*.name, 'lib_test') - needs: compile-sketch - runs-on: ubuntu-latest - steps: - - name: Upload - uses: actions/upload-artifact@v4 - with: - name: Event File - path: ${{github.event_path}} From 64706c8890ec9dcb67e4dff9b5ee652dc0757a59 Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:09:21 +0200 Subject: [PATCH 2/9] Add compilation log to the build scripts --- .github/scripts/on-push.sh | 40 ++++++++++++++---- .github/scripts/sketch_utils.sh | 72 +++++++++++++++++++++++++++++++-- 2 files changed, 100 insertions(+), 12 deletions(-) diff --git a/.github/scripts/on-push.sh b/.github/scripts/on-push.sh index bf311b93166..65103c8b0f0 100755 --- a/.github/scripts/on-push.sh +++ b/.github/scripts/on-push.sh @@ -9,7 +9,8 @@ function build(){ local fqbn=$2 local chunk_index=$3 local chunks_cnt=$4 - shift; shift; shift; shift; + local build_log=$5 + shift; shift; shift; shift; shift; local sketches=$* local BUILD_SKETCH="${SCRIPTS_DIR}/sketch_utils.sh build" @@ -22,6 +23,9 @@ function build(){ if [ "$OS_IS_LINUX" == "1" ]; then args+=" -p $ARDUINO_ESP32_PATH/libraries" args+=" -i $chunk_index -m $chunks_cnt" + if [ $build_log -eq 1 ]; then + args+=" -l $build_log" + fi ${BUILD_SKETCHES} ${args} else for sketch in ${sketches}; do @@ -45,6 +49,7 @@ fi CHUNK_INDEX=$1 CHUNKS_CNT=$2 +BUILD_LOG=$3 BUILD_PIO=0 if [ "$#" -lt 2 ] || [ "$CHUNKS_CNT" -le 0 ]; then CHUNK_INDEX=0 @@ -55,6 +60,10 @@ elif [ "$CHUNK_INDEX" -eq "$CHUNKS_CNT" ]; then BUILD_PIO=1 fi +if [ "$BUILD_LOG" -le 0 ]; then + BUILD_LOG=0 +fi + #echo "Updating submodules ..." #git -C "$GITHUB_WORKSPACE" submodule update --init --recursive > /dev/null 2>&1 @@ -77,13 +86,28 @@ if [ "$BUILD_PIO" -eq 0 ]; then $ARDUINO_ESP32_PATH/libraries/ESP32/examples/Camera/CameraWebServer/CameraWebServer.ino\ $ARDUINO_ESP32_PATH/libraries/Insights/examples/MinimalDiagnostics/MinimalDiagnostics.ino\ " + #create sizes_file + sizes_file="$GITHUB_WORKSPACE/cli_compile_$CHUNK_INDEX.json" + + if [ "$BUILD_LOG" -eq 1 ]; then + #create sizes_file and echo start of JSON array with "boards" key + echo "{\"boards\": [" > $sizes_file + fi - build "esp32s3" $FQBN_ESP32S3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 - build "esp32s2" $FQBN_ESP32S2 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 - build "esp32c3" $FQBN_ESP32C3 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 - build "esp32c6" $FQBN_ESP32C6 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 - build "esp32h2" $FQBN_ESP32H2 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 - build "esp32" $FQBN_ESP32 $CHUNK_INDEX $CHUNKS_CNT $SKETCHES_ESP32 + #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 + + if [ "$BUILD_LOG" -eq 1 ]; then + #remove last comma from the last JSON object + sed -i '$ s/.$//' "$sizes_file" + #echo end of JSON array + echo "]}" >> $sizes_file + fi else source ${SCRIPTS_DIR}/install-platformio-esp32.sh # PlatformIO ESP32 Test @@ -102,4 +126,4 @@ else done #build_pio_sketches "$BOARD" "$OPTIONS" "$PLATFORMIO_ESP32_PATH/libraries" -fi +fi \ No newline at end of file diff --git a/.github/scripts/sketch_utils.sh b/.github/scripts/sketch_utils.sh index 70a21a15452..5b7d10dcbd1 100755 --- a/.github/scripts/sketch_utils.sh +++ b/.github/scripts/sketch_utils.sh @@ -27,6 +27,14 @@ function build_sketch(){ # build_sketch [ex shift sketchdir=$1 ;; + -i ) + shift + chunk_index=$1 + ;; + -l ) + shift + log_compilation=$1 + ;; * ) break ;; @@ -140,6 +148,9 @@ function build_sketch(){ # build_sketch [ex build_dir="$HOME/.arduino/tests/$sketchname/build.tmp" fi + output_file="$HOME/.arduino/cli_compile_output.txt" + sizes_file="$GITHUB_WORKSPACE/cli_compile_$chunk_index.json" + mkdir -p "$ARDUINO_CACHE_DIR" for i in `seq 0 $(($len - 1))` do @@ -164,13 +175,39 @@ function build_sketch(){ # build_sketch [ex --build-property "compiler.warning_flags.all=-Wall -Werror=all -Wextra" \ --build-cache-path "$ARDUINO_CACHE_DIR" \ --build-path "$build_dir" \ - $xtra_opts "${sketchdir}" + $xtra_opts "${sketchdir}" \ + > $output_file exit_status=$? if [ $exit_status -ne 0 ]; then echo ""ERROR: Compilation failed with error code $exit_status"" exit $exit_status fi + + if [ $log_compilation ]; then + #Extract the program storage space and dynamic memory usage in bytes and percentage in separate variables from the output, just the value without the string + flash_bytes=$(grep -oE 'Sketch uses ([0-9]+) bytes' $output_file | awk '{print $3}') + flash_percentage=$(grep -oE 'Sketch uses ([0-9]+) bytes \(([0-9]+)%\)' $output_file | awk '{print $5}' | tr -d '(%)') + ram_bytes=$(grep -oE 'Global variables use ([0-9]+) bytes' $output_file | awk '{print $4}') + ram_percentage=$(grep -oE 'Global variables use ([0-9]+) bytes \(([0-9]+)%\)' $output_file | awk '{print $6}' | tr -d '(%)') + + # Extract the directory path excluding the filename + directory_path=$(dirname "$sketch") + # Define the constant part + constant_part="/home/runner/Arduino/hardware/espressif/esp32/libraries/" + # Extract the desired substring using sed + lib_sketch_name=$(echo "$directory_path" | sed "s|$constant_part||") + #append json file where key is fqbn, sketch name, sizes -> extracted values + echo "{\"name\": \"$lib_sketch_name\", + \"sizes\": [{ + \"flash_bytes\": $flash_bytes, + \"flash_percentage\": $flash_percentage, + \"ram_bytes\": $ram_bytes, + \"ram_percentage\": $ram_percentage + }] + }," >> "$sizes_file" + fi + elif [ -f "$ide_path/arduino-builder" ]; then echo "Building $sketchname with arduino-builder and FQBN=$currfqbn" echo "Build path = $build_dir" @@ -204,6 +241,7 @@ function build_sketch(){ # build_sketch [ex # $xtra_opts "${sketchdir}/${sketchname}.ino" fi done + unset fqbn unset xtra_opts unset options @@ -277,6 +315,10 @@ function build_sketches(){ # build_sketches > "$sizes_file" + fi + local sketchnum=0 - args+=" -ai $ide_path -au $user_path" + args+=" -ai $ide_path -au $user_path -i $chunk_index" + if [ $log_compilation ]; then + args+=" -l $log_compilation" + fi for sketch in $sketches; do local sketchdir=$(dirname $sketch) local sketchdirname=$(basename $sketchdir) @@ -358,6 +411,18 @@ function build_sketches(){ # build_sketches > "$sizes_file" + #echo end of board sizes_file json + echo "}," >> "$sizes_file" + fi + return 0 } @@ -388,5 +453,4 @@ case "$cmd" in echo "ERROR: Unrecognized command" echo "$USAGE" exit 2 -esac - +esac \ No newline at end of file From ffb237dfa78044f7add6b81052f4082f72b03930 Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Wed, 17 Apr 2024 12:12:45 +0200 Subject: [PATCH 3/9] Add 2nd compilation run on base branch --- .github/workflows/push.yml | 51 +++++++++++++++++++++++++++++++++++++- 1 file changed, 50 insertions(+), 1 deletion(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index c7c48225ca4..f617ce46317 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -46,7 +46,16 @@ jobs: 'tools/get.py', '.github/scripts/install-arduino-ide.sh') }} - name: Build Sketches - run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} 15 + run: bash ./.github/scripts/on-push.sh ${{ matrix.chunk }} 15 1 + + #Upload cli compile json as artifact + - name: Upload cli compile json + if: github.event_name == 'pull_request' + uses: actions/upload-artifact@v4 + with: + name: pr_cli_compile_${{ matrix.chunk }} + path: cli_compile_${{ matrix.chunk }}.json + overwrite: true # Windows and MacOS build-arduino-win-mac: @@ -110,3 +119,43 @@ jobs: idf.py create-project test echo CONFIG_FREERTOS_HZ=1000 > test/sdkconfig.defaults idf.py -C test -DEXTRA_COMPONENT_DIRS=$PWD/components build + + # Ubuntu + build-arduino-base-linux: + name: Arduino Base ${{ matrix.chunk }} on ubuntu-latest + #run if its on PR only + if: github.event_name == 'pull_request' + 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] + + # Checkout base branch + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.base.ref }} + - uses: actions/setup-python@v5 + with: + python-version: '3.x' + - name: Cache tools + id: cache-linux + uses: actions/cache@v4 + with: + 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 + + #Upload cli compile json as artifact + - name: Upload cli compile json + uses: actions/upload-artifact@v4 + with: + name: master_cli_compile_${{ matrix.chunk }} + path: cli_compile_${{ matrix.chunk }}.json + overwrite: true \ No newline at end of file From cd957892d636092a2c15cd7d8bfbac39d2676349 Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:40:15 +0200 Subject: [PATCH 4/9] Fix sketch_utils script --- .github/scripts/sketch_utils.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/scripts/sketch_utils.sh b/.github/scripts/sketch_utils.sh index 5b7d10dcbd1..e8da865a067 100755 --- a/.github/scripts/sketch_utils.sh +++ b/.github/scripts/sketch_utils.sh @@ -382,8 +382,8 @@ function build_sketches(){ # build_sketches Date: Thu, 18 Apr 2024 10:40:44 +0200 Subject: [PATCH 5/9] Update on-push.sh --- .github/scripts/on-push.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/scripts/on-push.sh b/.github/scripts/on-push.sh index 65103c8b0f0..30fd1653deb 100755 --- a/.github/scripts/on-push.sh +++ b/.github/scripts/on-push.sh @@ -126,4 +126,4 @@ else done #build_pio_sketches "$BOARD" "$OPTIONS" "$PLATFORMIO_ESP32_PATH/libraries" -fi \ No newline at end of file +fi From 1728d3a994032669dd061cdc7d2c9536c423795b Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:42:42 +0200 Subject: [PATCH 6/9] Update Push workflow --- .github/workflows/push.yml | 88 ++++++++++++++++++++++---------------- 1 file changed, 51 insertions(+), 37 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index f617ce46317..9d912db35fb 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -50,7 +50,6 @@ jobs: #Upload cli compile json as artifact - name: Upload cli compile json - if: github.event_name == 'pull_request' uses: actions/upload-artifact@v4 with: name: pr_cli_compile_${{ matrix.chunk }} @@ -120,42 +119,57 @@ jobs: echo CONFIG_FREERTOS_HZ=1000 > test/sdkconfig.defaults idf.py -C test -DEXTRA_COMPONENT_DIRS=$PWD/components build - # Ubuntu - build-arduino-base-linux: - name: Arduino Base ${{ matrix.chunk }} on ubuntu-latest - #run if its on PR only - if: github.event_name == 'pull_request' + # Save artifacts to gh-pages + save-master-artifacts: + name: Save master artifacts + needs: build-arduino-linux + if: github.event_name == 'push' && github.ref == 'refs/heads/master' 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] - - # Checkout base branch steps: - - uses: actions/checkout@v4 - with: - ref: ${{ github.event.pull_request.base.ref }} - - uses: actions/setup-python@v5 - with: - python-version: '3.x' - - name: Cache tools - id: cache-linux - uses: actions/cache@v4 - with: - 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 + # Check out repository + - name: Checkout repository + uses: actions/checkout@v4 + with: + token: ${{secrets.GITHUB_TOKEN}} + fetch-depth: '0' - #Upload cli compile json as artifact - - name: Upload cli compile json - uses: actions/upload-artifact@v4 - with: - name: master_cli_compile_${{ matrix.chunk }} - path: cli_compile_${{ matrix.chunk }}.json - overwrite: true \ No newline at end of file + - name: Switch branch + run: + git checkout remotes/origin/gh-pages + + - name: Download sketches reports artifact + uses: actions/download-artifact@v4 + with: + pattern: pr_cli_compile_* + merge-multiple: true + path: master_cli_compile + + - name: List files in the directory + run: ls -R + + - name: Commit json files to gh-pages if on master + if: github.event_name == 'push' && github.ref == 'refs/heads/master' + run: | + git config user.name github-actions + git config user.email github-actions@github.com + 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 + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Save the PR number in an artifact + shell: bash + env: + PR_NUM: ${{ github.event.number }} + run: echo $PR_NUM > pr_num.txt + - name: Upload PR number + uses: actions/upload-artifact@v4 + with: + name: pr_number + path: ./pr_num.txt + overwrite: true From 916eb5682e062c3f152b20705d0c007d47a7cab9 Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:44:43 +0200 Subject: [PATCH 7/9] Upload pr number in lib.yml --- .github/workflows/lib.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/.github/workflows/lib.yml b/.github/workflows/lib.yml index 42073ac4aa6..0e98618ad5c 100644 --- a/.github/workflows/lib.yml +++ b/.github/workflows/lib.yml @@ -121,3 +121,21 @@ jobs: git add ${{ env.RESULT_LIBRARY_TEST_FILE }} git commit -m "Generated External Libraries Test Results" git push origin HEAD:gh-pages + + #Upload PR number as artifact + upload-pr-number: + name: Upload PR number + if: github.event_name == 'pull_request' + runs-on: ubuntu-latest + steps: + - name: Save the PR number in an artifact + shell: bash + env: + PR_NUM: ${{ github.event.number }} + run: echo $PR_NUM > pr_num.txt + - name: Upload PR number + uses: actions/upload-artifact@v4 + with: + name: pr_number + path: ./pr_num.txt + overwrite: true From df37416aac9545e529065f955219267d7930cc4f Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:48:14 +0200 Subject: [PATCH 8/9] Fix PR number in publish sizes --- .github/workflows/publishsizes.yml | 30 ++++++++++++++++++++++++------ 1 file changed, 24 insertions(+), 6 deletions(-) diff --git a/.github/workflows/publishsizes.yml b/.github/workflows/publishsizes.yml index 92ac4cbb42c..8c4a957b22b 100644 --- a/.github/workflows/publishsizes.yml +++ b/.github/workflows/publishsizes.yml @@ -11,7 +11,6 @@ env: # It's convenient to set variables for values used multiple times in the workflow SKETCHES_REPORTS_PATH: artifacts/sizes-report GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} jobs: sizes-test-results: @@ -22,21 +21,34 @@ jobs: github.event.workflow_run.conclusion == 'success' steps: - - name: Download and Extract Artifacts + - name: Checkout code + uses: actions/checkout@v4 # This step checks out the repository's code at gh-pages branch + with: + ref: gh-pages + + - name: Create folder structure run: | mkdir -p artifacts && cd artifacts mkdir -p sizes-report mkdir -p sizes-report/master mkdir -p sizes-report/pr + + - name: Download JSON file + run: | + mv master_cli_compile/*.json artifacts/sizes-report/master/ + + - name: Download and Extract Artifacts + run: | + 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 -j "$name.zip" -d "temp_$name" - if [[ "$name" == *"master"* ]]; then - mv "temp_$name"/* sizes-report/master - elif [[ "$name" == *"pr"* ]]; then + if [[ "$name" == "pr_num" ]]; then + mv "temp_$name"/* sizes-report + elif [[ "$name" == "pr_cli"* ]]; then mv "temp_$name"/* sizes-report/pr else mv "temp_$name"/* sizes-report @@ -45,10 +57,16 @@ jobs: done echo "Contents of parent directory:" ls -R .. + + - name: Read the pr_num file + id: pr_num_reader + 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: sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }} github-token: ${{ env.GITHUB_TOKEN }} - pr-number: ${{ env.PR_NUMBER }} \ No newline at end of file + pr-number: "${{ steps.pr_num_reader.outputs.content }}" From 723667b186d22944829c5cc5641c649141c696bb Mon Sep 17 00:00:00 2001 From: Jan Prochazka <90197375+P-R-O-C-H-Y@users.noreply.github.com> Date: Thu, 18 Apr 2024 10:53:03 +0200 Subject: [PATCH 9/9] Update external libs results with pr num file --- .github/workflows/publishlib.yml | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/.github/workflows/publishlib.yml b/.github/workflows/publishlib.yml index abfebbf4ab7..7e7a4579ca9 100644 --- a/.github/workflows/publishlib.yml +++ b/.github/workflows/publishlib.yml @@ -11,7 +11,6 @@ env: # It's convenient to set variables for values used multiple times in the workflow SKETCHES_REPORTS_PATH: artifacts/libraries-report GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - PR_NUMBER: ${{ github.event.workflow_run.pull_requests[0].number }} jobs: lib-test-results: @@ -26,21 +25,32 @@ jobs: run: | mkdir -p artifacts && cd artifacts mkdir -p libraries-report + mkdir -p workflows 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 -j "$name.zip" -d "temp_$name" - mv "temp_$name"/* libraries-report + if [[ "$name" == "pr_num" ]]; then + mv "temp_$name"/* workflows + else + mv "temp_$name"/* libraries-report + fi rm -r "temp_$name" done echo "Contents of parent directory:" ls -R .. + + - name: Read the pr_num file + id: pr_num_reader + uses: juliangruber/read-file-action@v1 + with: + path: ./artifacts/workflows/pr_num.txt - name: Report results uses: P-R-O-C-H-Y/report-size-deltas@libs with: sketches-reports-source: ${{ env.SKETCHES_REPORTS_PATH }} github-token: ${{ env.GITHUB_TOKEN }} - pr-number: ${{ env.PR_NUMBER }} \ No newline at end of file + pr-number: "${{ steps.pr_num_reader.outputs.content }}"