summaryrefslogtreecommitdiff
path: root/.github/workflows/build.yml
diff options
context:
space:
mode:
authorMichael Rogov Papernov <[email protected]>2026-01-10 17:58:41 +0000
committerMichael Rogov Papernov <[email protected]>2026-01-16 21:49:16 +0000
commit5ad42064ea544080d47c893dafb1b41447ab9f32 (patch)
treeae3c7f5ee5919a7ffa92658fb14e8cda26e01695 /.github/workflows/build.yml
parent71ed9d1498e04f99f69fc8c0336ca41ec7a576af (diff)
Integrate MemBrowse
Diffstat (limited to '.github/workflows/build.yml')
-rw-r--r--.github/workflows/build.yml137
1 files changed, 107 insertions, 30 deletions
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index bb8c6d65d..dc5b1975e 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -3,30 +3,8 @@ name: Build
on:
workflow_dispatch:
push:
- paths:
- - 'src/**'
- - 'examples/**'
- - 'lib/**'
- - 'hw/**'
- - 'tools/build.py'
- - 'tools/get_deps.py'
- - '.github/actions/**'
- - '.github/workflows/build.yml'
- - '.github/workflows/build_util.yml'
- - '.github/workflows/ci_set_matrix.py'
+ branches: [master]
pull_request:
- paths:
- - 'src/**'
- - 'examples/**'
- - 'lib/**'
- - 'hw/**'
- - 'test/hil/**'
- - 'tools/build.py'
- - 'tools/get_deps.py'
- - '.github/actions/**'
- - '.github/workflows/build.yml'
- - '.github/workflows/build_util.yml'
- - '.github/workflows/ci_set_matrix.py'
release:
types: [ published ]
concurrency:
@@ -37,7 +15,44 @@ env:
HIL_JSON: test/hil/tinyusb.json
jobs:
+ # Check if code paths changed (skip builds if doc-only)
+ check-paths:
+ if: github.event_name == 'pull_request' || github.event_name == 'push'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: read
+ outputs:
+ code_changed: ${{ steps.filter.outputs.code }}
+ steps:
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 2 # Needed for push commit comparison
+ - uses: dorny/paths-filter@v3
+ id: filter
+ with:
+ filters: |
+ code:
+ - 'src/**'
+ - 'examples/**'
+ - 'lib/**'
+ - 'hw/**'
+ - 'test/hil/**'
+ - 'tools/build.py'
+ - 'tools/get_deps.py'
+ - '.github/actions/**'
+ - '.github/workflows/build.yml'
+ - '.github/workflows/build_util.yml'
+ - '.github/workflows/ci_set_matrix.py'
+
set-matrix:
+ needs: [check-paths]
+ if: |
+ always() && (
+ github.event_name == 'release' ||
+ github.event_name == 'workflow_dispatch' ||
+ needs.check-paths.outputs.code_changed == 'true'
+ )
runs-on: ubuntu-latest
outputs:
json: ${{ steps.set-matrix-json.outputs.matrix }}
@@ -82,6 +97,7 @@ jobs:
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
build-options: '--one-first'
upload-metrics: true
+ upload-artifacts: true
code-metrics:
needs: cmake
@@ -181,7 +197,8 @@ jobs:
# Build Make/CMake on Windows/MacOS
# ---------------------------------------
build-os:
- if: github.event_name == 'pull_request'
+ needs: [check-paths]
+ if: needs.check-paths.outputs.code_changed == 'true'
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
@@ -198,7 +215,8 @@ jobs:
# Zephyr
# ---------------------------------------
zephyr:
- if: github.event_name == 'push'
+ needs: [check-paths]
+ if: needs.check-paths.outputs.code_changed == 'true'
runs-on: ubuntu-latest
steps:
- name: Checkout TinyUSB
@@ -220,10 +238,10 @@ jobs:
# Run on PR only (hil-tinyusb), hil-hfp only run on non-forked PR
# ---------------------------------------
hil-build:
+ needs: [check-paths, set-matrix]
if: |
github.repository_owner == 'hathach' &&
- (github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch')
- needs: set-matrix
+ (github.event_name == 'workflow_dispatch' || needs.check-paths.outputs.code_changed == 'true')
uses: ./.github/workflows/build_util.yml
strategy:
fail-fast: false
@@ -242,8 +260,10 @@ jobs:
# self-hosted on local VM, for attached hardware checkout HIL_JSON
# ---------------------------------------
hil-tinyusb:
- if: github.repository_owner == 'hathach' && github.event_name != 'push'
- needs: hil-build
+ needs: [check-paths, hil-build]
+ if: |
+ github.repository_owner == 'hathach' &&
+ (github.event_name == 'release' || github.event_name == 'workflow_dispatch' || needs.check-paths.outputs.code_changed == 'true')
runs-on: [ self-hosted, X64, hathach, hardware-in-the-loop ]
steps:
- name: Get Skip Boards from previous run
@@ -283,10 +303,11 @@ jobs:
# Since IAR Token secret is not passed to forked PR, only build non-forked PR
# ---------------------------------------
hil-hfp:
+ needs: [check-paths]
if: |
github.repository_owner == 'hathach' &&
github.event.pull_request.head.repo.fork == false &&
- github.event_name != 'push'
+ (github.event_name == 'release' || github.event_name == 'workflow_dispatch' || needs.check-paths.outputs.code_changed == 'true')
runs-on: [ self-hosted, Linux, X64, hifiphile ]
env:
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
@@ -319,3 +340,59 @@ jobs:
- name: Test on actual hardware (hardware in the loop)
run: python3 test/hil/hil_test.py hfp.json
+
+ # ---------------------------------------
+ # Membrowse Memory Analysis
+ # Push: always runs (uses identical for doc-only to maintain commit chain)
+ # PR: only runs if code changed (doc-only PRs skip entirely)
+ # ---------------------------------------
+ membrowse:
+ needs: [check-paths, cmake]
+ if: |
+ always() && !cancelled() && (
+ github.event_name == 'push' ||
+ github.event_name == 'release' ||
+ github.event_name == 'workflow_dispatch' ||
+ (github.event_name == 'pull_request' && needs.check-paths.outputs.code_changed == 'true')
+ )
+ permissions:
+ contents: read
+ actions: read
+ uses: ./.github/workflows/membrowse-report.yml
+ with:
+ code_changed: ${{ needs.check-paths.outputs.code_changed == 'true' || github.event_name == 'release' || github.event_name == 'workflow_dispatch' }}
+ secrets: inherit
+
+ membrowse-comment:
+ needs: [check-paths, membrowse]
+ if: >
+ always() &&
+ github.event_name == 'pull_request' &&
+ needs.check-paths.outputs.code_changed == 'true'
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ actions: read
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v6
+
+ - name: Download report artifacts
+ id: download
+ uses: actions/download-artifact@v5
+ with:
+ pattern: membrowse-report-*
+ path: reports
+ merge-multiple: true
+ continue-on-error: true
+
+ - name: Save PR number
+ if: steps.download.outcome == 'success'
+ run: echo ${{ github.event.number }} > reports/pr_number.txt
+
+ - name: Upload Membrowse Comment Artifact
+ if: steps.download.outcome == 'success'
+ uses: actions/upload-artifact@v5
+ with:
+ name: membrowse-comment
+ path: reports/