diff --git a/.github/workflows/flash_analysis.yml b/.github/workflows/flash_analysis.yml index 2b52095118..8ab97fdda8 100644 --- a/.github/workflows/flash_analysis.yml +++ b/.github/workflows/flash_analysis.yml @@ -8,6 +8,10 @@ on: branches: - '*' +env: + MIN_FLASH_POS_DIFF_FOR_COMMENT: 50 + MIN_FLASH_NEG_DIFF_FOR_COMMENT: -50 + jobs: analyze_flash: name: Analyzing ${{ matrix.target }} @@ -18,8 +22,10 @@ jobs: matrix: target: [px4_fmu-v5x, px4_fmu-v6x] outputs: - px4_fmu-v5x: ${{ steps.gen-output.outputs.output_px4_fmu-v5x }} - px4_fmu-v6x: ${{ steps.gen-output.outputs.output_px4_fmu-v6x }} + px4_fmu-v5x-bloaty-output: ${{ steps.gen-output.outputs.px4_fmu-v5x-bloaty-output }} + px4_fmu-v5x-bloaty-summary-map: ${{ steps.gen-output.outputs.px4_fmu-v5x-bloaty-summary-map }} + px4_fmu-v6x-bloaty-output: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-output }} + px4_fmu-v6x-bloaty-summary-map: ${{ steps.gen-output.outputs.px4_fmu-v6x-bloaty-summary-map }} steps: - uses: actions/checkout@v4 with: @@ -30,19 +36,20 @@ jobs: run: git config --system --add safe.directory '*' - name: Build Target - run: make ${{ matrix.target }} + run: make ${{ matrix.target }}_flash-analysis - name: Store the ELF with the change - run: cp ./build/${{ matrix.target }}_default/${{ matrix.target }}_default.elf ./with-change.elf + run: cp ./build/**/*.elf ./with-change.elf - name: Clean previous build run: | make clean make distclean - - name: If it's a PR checkout the base commit + - name: If it's a PR checkout the base branch if: ${{ github.event.pull_request }} - run: git checkout ${{ github.event.pull_request.base.sha }} + # As checkout creates a merge commit (merging the base branch into the PR branch), the base branch is the base for a diff of the PR changes. + run: git checkout ${{ github.event.pull_request.base.ref }} - name: If it's a push checkout the previous commit if: github.event_name == 'push' @@ -52,30 +59,39 @@ jobs: run: make submodulesupdate - name: Build - run: make ${{ matrix.target }} + run: make ${{ matrix.target }}_flash-analysis - name: Store the ELF before the change - run: cp ./build/${{ matrix.target }}_default/${{ matrix.target }}_default.elf ./before-change.elf + run: cp ./build/**/*.elf ./before-change.elf - name: bloaty-action - uses: carlosperate/bloaty-action@v1.1.0 + uses: PX4/bloaty-action@v1.0.0 id: bloaty-step with: - bloaty-args: -d sections,compileunits -n 0 ./with-change.elf -- ./before-change.elf + bloaty-file-args: ./with-change.elf -- ./before-change.elf + bloaty-additional-args: -d sections,compileunits -s vm -n 20 output-to-summary: true - name: Generate output id: gen-output run: | EOF=$(dd if=/dev/urandom bs=15 count=1 status=none | base64) - echo "output_${{ matrix.target }}<<$EOF" >> $GITHUB_OUTPUT + echo "${{ matrix.target }}-bloaty-output<<$EOF" >> $GITHUB_OUTPUT echo "${{ steps.bloaty-step.outputs.bloaty-output-encoded }}" >> $GITHUB_OUTPUT echo "$EOF" >> $GITHUB_OUTPUT + echo "${{ matrix.target }}-bloaty-summary-map<<$EOF" >> $GITHUB_OUTPUT + echo '${{ steps.bloaty-step.outputs.bloaty-summary-map }}' >> $GITHUB_OUTPUT + echo "$EOF" >> $GITHUB_OUTPUT post_pr_comment: name: Publish Results runs-on: [runs-on,runner=1cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] needs: [analyze_flash] + env: + V5X-SUMMARY-MAP-ABS: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-summary-map).vm-absolute) }} + V5X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-summary-map).vm-percentage) }} + V6X-SUMMARY-MAP-ABS: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-absolute) }} + V6X-SUMMARY-MAP-PERC: ${{ fromJSON(fromJSON(needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-summary-map).vm-percentage) }} if: ${{ github.event.pull_request }} steps: - name: Find Comment @@ -92,25 +108,32 @@ jobs: echo "timestamp=$(date +'%Y-%m-%dT%H:%M:%S')" >> $GITHUB_OUTPUT - name: Create or update comment + # This can't be moved to the job-level conditions, as GH actions don't allow a job-level if condition to access the env. + if: | + steps.fc.outputs.comment-id != '' || + env.V5X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) || + env.V5X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) || + env.V6X-SUMMARY-MAP-ABS >= fromJSON(env.MIN_FLASH_POS_DIFF_FOR_COMMENT) || + env.V6X-SUMMARY-MAP-ABS <= fromJSON(env.MIN_FLASH_NEG_DIFF_FOR_COMMENT) uses: peter-evans/create-or-update-comment@v4 with: comment-id: ${{ steps.fc.outputs.comment-id }} issue-number: ${{ github.event.pull_request.number }} body: | - ## FLASH Analysis + ## 🔎 FLASH Analysis
- px4_fmu-v5x + px4_fmu-v5x [Total VM Diff: ${{ env.V5X-SUMMARY-MAP-ABS }} byte (${{ env.V5X-SUMMARY-MAP-PERC}} %)] ``` - ${{ needs.analyze_flash.outputs.px4_fmu-v5x }} + ${{ needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-output }} ```
- px4_fmu-v6x + px4_fmu-v6x [Total VM Diff: ${{ env.V6X-SUMMARY-MAP-ABS }} byte (${{ env.V6X-SUMMARY-MAP-PERC }} %)] ``` - ${{ needs.analyze_flash.outputs.px4_fmu-v6x }} + ${{ needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-output }} ```
diff --git a/boards/px4/fmu-v5x/flash-analysis.px4board b/boards/px4/fmu-v5x/flash-analysis.px4board new file mode 100644 index 0000000000..30717ad93c --- /dev/null +++ b/boards/px4/fmu-v5x/flash-analysis.px4board @@ -0,0 +1 @@ +CONFIG_BOARD_LINKER_PREFIX="flash-analysis" diff --git a/boards/px4/fmu-v5x/nuttx-config/scripts/flash-analysis-script.ld b/boards/px4/fmu-v5x/nuttx-config/scripts/flash-analysis-script.ld new file mode 100644 index 0000000000..29c75f02ee --- /dev/null +++ b/boards/px4/fmu-v5x/nuttx-config/scripts/flash-analysis-script.ld @@ -0,0 +1,6 @@ +INCLUDE "script.ld" + +MEMORY +{ + FLASH_AXIM (rx) : ORIGIN = 0x08008000, LENGTH = 10080K +} diff --git a/boards/px4/fmu-v6x/flash-analysis.px4board b/boards/px4/fmu-v6x/flash-analysis.px4board new file mode 100644 index 0000000000..30717ad93c --- /dev/null +++ b/boards/px4/fmu-v6x/flash-analysis.px4board @@ -0,0 +1 @@ +CONFIG_BOARD_LINKER_PREFIX="flash-analysis" diff --git a/boards/px4/fmu-v6x/nuttx-config/scripts/flash-analysis-script.ld b/boards/px4/fmu-v6x/nuttx-config/scripts/flash-analysis-script.ld new file mode 100644 index 0000000000..5df2f5180a --- /dev/null +++ b/boards/px4/fmu-v6x/nuttx-config/scripts/flash-analysis-script.ld @@ -0,0 +1,6 @@ +INCLUDE "script.ld" + +MEMORY +{ + FLASH (rx) : ORIGIN = 0x08020000, LENGTH = 10080K +}