GH Action Test #83
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: FLASH usage analysis | |
on: | |
push: | |
branches: | |
- 'main' | |
pull_request: | |
branches: | |
- '*' | |
env: | |
MIN_FLASH_POS_DIFF_FOR_COMMENT: 50 | |
MIN_FLASH_NEG_DIFF_FOR_COMMENT: -50 | |
jobs: | |
analyze_flash: | |
name: Analyzing ${{ matrix.target }} | |
#runs-on: [runs-on,runner=8cpu-linux-x64,image=ubuntu24-full-x64,"run-id=${{ github.run_id }}",spot=false] | |
runs-on: ubuntu-latest | |
container: | |
image: px4io/px4-dev-nuttx-focal | |
strategy: | |
matrix: | |
target: [px4_fmu-v5x, px4_fmu-v6x] | |
outputs: | |
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: | |
fetch-depth: 0 | |
submodules: recursive | |
- name: Git ownership workaround | |
run: git config --system --add safe.directory '*' | |
- name: Build Target | |
# Use special flash-analysis target if present. Otherwise fall back to the default target. | |
run: | | |
if make list_config_targets | grep ${{ matrix.target }}_flash-analysis; then | |
make ${{ matrix.target }}_flash-analysis | |
else | |
make ${{ matrix.target }} | |
fi | |
- name: Store the ELF with the change | |
# Use special flash-analysis target if present. Otherwise fall back to the default target. | |
run: | | |
if make list_config_targets | grep ${{ matrix.target }}_flash-analysis; then | |
cp ./build/${{ matrix.target }}_flash-analysis/*.elf ./with-change.elf | |
else | |
cp ./build/${{ matrix.target }}_default/*.elf ./with-change.elf | |
fi | |
- 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 | |
# Use special flash-analysis target if present. Otherwise fall back to the default target. | |
run: | | |
if make list_config_targets | grep ${{ matrix.target }}_flash-analysis; then | |
make ${{ matrix.target }}_flash-analysis | |
else | |
make ${{ matrix.target }} | |
fi | |
- name: Store the ELF before the change | |
# Use special flash-analysis target if present. Otherwise fall back to the default target. | |
run: | | |
if make list_config_targets | grep ${{ matrix.target }}_flash-analysis; then | |
cp ./build/${{ matrix.target }}_flash-analysis/*.elf ./before-change.elf | |
else | |
cp ./build/${{ matrix.target }}_default/*.elf ./before-change.elf | |
fi | |
- name: bloaty-action | |
uses: PX4/[email protected] | |
id: bloaty-step | |
with: | |
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 "${{ 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] | |
runs-on: ubuntu-latest | |
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 | |
uses: peter-evans/find-comment@v3 | |
id: fc | |
with: | |
issue-number: ${{ github.event.pull_request.number }} | |
comment-author: 'github-actions[bot]' | |
body-includes: FLASH Analysis | |
- name: Set Build Time | |
id: bt | |
run: | | |
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 | |
<details> | |
<summary>px4_fmu-v5x [Total VM Diff: ${{ env.V5X-SUMMARY-MAP-ABS }} byte (${{ env.V5X-SUMMARY-MAP-PERC}} %)]</summary> | |
``` | |
${{ needs.analyze_flash.outputs.px4_fmu-v5x-bloaty-output }} | |
``` | |
</details> | |
<details> | |
<summary>px4_fmu-v6x [Total VM Diff: ${{ env.V6X-SUMMARY-MAP-ABS }} byte (${{ env.V6X-SUMMARY-MAP-PERC }} %)]</summary> | |
``` | |
${{ needs.analyze_flash.outputs.px4_fmu-v6x-bloaty-output }} | |
``` | |
</details> | |
**Updated: _${{ steps.bt.outputs.timestamp }}_** | |
edit-mode: replace |