diff --git a/.github/workflows/flash_analysis.yml b/.github/workflows/flash_analysis.yml
new file mode 100644
index 000000000000..d7a2d5b17191
--- /dev/null
+++ b/.github/workflows/flash_analysis.yml
@@ -0,0 +1,108 @@
+name: FLASH usage analysis
+
+on:
+ push:
+ branches:
+ - 'main'
+ pull_request:
+ branches:
+ - '*'
+
+jobs:
+ analyze_flash:
+ name: FLASH usage analysis
+ runs-on: ubuntu-latest
+ container:
+ image: px4io/px4-dev-nuttx-focal
+ strategy:
+ 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 }}
+ steps:
+ - uses: actions/checkout@v4
+ with:
+ fetch-depth: 0
+ submodules: recursive
+
+ - name: Git ownership workaround
+ run: git config --system --add safe.directory '*'
+
+ - name: Build
+ run: make ${{ matrix.target }}
+
+ - name: Store the ELF with the change
+ run: cp ./build/${{ matrix.target }}_default/${{ matrix.target }}_default.elf ./with-change.elf
+
+ - name: Clean previous build
+ run: |
+ make clean
+ make distclean
+
+ - name: If it's a PR checkout the base commit
+ if: ${{ github.event.pull_request }}
+ run: git checkout ${{ github.event.pull_request.base.sha }}
+
+ - name: If it's a push checkout the previous commit
+ if: github.event_name == 'push'
+ run: git checkout ${{ github.event.before }}
+
+ - name: Update submodules
+ run: make submodulesupdate
+
+ - name: Build
+ run: make ${{ matrix.target }}
+
+ - name: Store the ELF before the change
+ run: cp ./build/${{ matrix.target }}_default/${{ matrix.target }}_default.elf ./before-change.elf
+
+ - name: bloaty-action
+ uses: carlosperate/bloaty-action@v1.1.0
+ id: bloaty-step
+ with:
+ bloaty-args: -d sections,compileunits -n 0 ./with-change.elf -- ./before-change.elf
+ 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 "${{ steps.bloaty-step.outputs.bloaty-output-encoded }}" >> $GITHUB_OUTPUT
+ echo "$EOF" >> $GITHUB_OUTPUT
+
+ post_pr_comment:
+ name: Post PR comment
+ runs-on: ubuntu-latest
+ needs: [analyze_flash]
+ steps:
+ - name: If it's a PR add a comment with the bloaty output
+ if: ${{ github.event.pull_request }}
+ uses: actions/github-script@v6
+ with:
+ script: |
+ const comment = [
+ '## FLASH Analysis',
+ '',
+ 'px4_fmu-v5x
',
+ '',
+ '```',
+ `${{ needs.analyze_flash.outputs.px4_fmu-v5x }}`,
+ '```',
+ ' ',
+ '',
+ '',
+ 'px4_fmu-v6x
',
+ '',
+ '```',
+ `${{ needs.analyze_flash.outputs.px4_fmu-v6x }}`,
+ '```',
+ ' '
+ ]
+ github.rest.issues.createComment({
+ issue_number: context.issue.number,
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ body: comment.join('\n')
+ })