summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhathach <[email protected]>2026-02-10 23:45:24 +0700
committerhathach <[email protected]>2026-02-10 23:51:55 +0700
commit39b157d22f8a82264f07cdd31396c15b7a9c9e6d (patch)
tree1853a5a47d38442e1d70e3ba9a8a968736a04f73
parent4b8f476d52ab0bb518b851ba22323658fb978768 (diff)
add membrowse-upload target and use it in ci after build
-rw-r--r--.github/actions/get_deps/action.yml2
-rw-r--r--.github/workflows/build.yml92
-rw-r--r--.github/workflows/build_util.yml14
-rw-r--r--.github/workflows/membrowse-report.yml1
-rw-r--r--hw/bsp/family_support.cmake5
-rwxr-xr-xtools/build.py13
6 files changed, 73 insertions, 54 deletions
diff --git a/.github/actions/get_deps/action.yml b/.github/actions/get_deps/action.yml
index a84db893b..8ea36ce78 100644
--- a/.github/actions/get_deps/action.yml
+++ b/.github/actions/get_deps/action.yml
@@ -22,6 +22,8 @@ runs:
NINJA_URL=https://github.com/ninja-build/ninja/releases/download/v1.13.1/ninja-linux.zip
wget $NINJA_URL -O ninja-linux.zip
unzip ninja-linux.zip -d ninja-bin
+ pip install membrowse
+ #echo >> $GITHUB_PATH "$HOME/.local/bin"
echo >> $GITHUB_PATH "${{ github.workspace }}/ninja-bin"
shell: bash
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 352875a9d..2b0c38c4f 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -93,7 +93,9 @@ jobs:
build-args: ${{ toJSON(fromJSON(needs.set-matrix.outputs.json)[matrix.toolchain]) }}
build-options: '--one-first'
upload-metrics: true
- upload-artifacts: true
+ upload-artifacts: false
+ upload-membrowse: true
+ secrets: inherit
code-metrics:
needs: cmake
@@ -337,47 +339,47 @@ jobs:
# 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: membrowse
- # skip membrowse comment since it is too verbal
- if: false && github.event_name == 'pull_request'
- 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: Upload Membrowse Comment Artifact
- if: steps.download.outcome == 'success'
- uses: actions/upload-artifact@v5
- with:
- name: membrowse-comment
- path: reports/
+# 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: membrowse
+# # skip membrowse comment since it is too verbal
+# if: false && github.event_name == 'pull_request'
+# 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: Upload Membrowse Comment Artifact
+# if: steps.download.outcome == 'success'
+# uses: actions/upload-artifact@v5
+# with:
+# name: membrowse-comment
+# path: reports/
diff --git a/.github/workflows/build_util.yml b/.github/workflows/build_util.yml
index e62c10ca1..8a3dd8f91 100644
--- a/.github/workflows/build_util.yml
+++ b/.github/workflows/build_util.yml
@@ -24,6 +24,10 @@ on:
required: false
default: false
type: boolean
+ upload-membrowse:
+ required: false
+ default: false
+ type: boolean
os:
required: false
type: string
@@ -54,15 +58,17 @@ jobs:
- name: Build
env:
IAR_LMS_BEARER_TOKEN: ${{ secrets.IAR_LMS_BEARER_TOKEN }}
+ MEMBROWSE_API_KEY: ${{ secrets.MEMBROWSE_API_KEY }}
+ MEMBROWSE_UPLOAD_OPTION: ${{ inputs.upload-membrowse && '--membrowse-upload' || '' }}
TOOLCHAIN: ${{ inputs.toolchain }}
run: |
if [ "$TOOLCHAIN" == "esp-idf" ]; then
- docker run --rm -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py ${{ matrix.arg }}
+ docker run --rm -e MEMBROWSE_API_KEY="$MEMBROWSE_API_KEY" -v $PWD:/project -w /project espressif/idf:tinyusb python tools/build.py $MEMBROWSE_UPLOAD_OPTION ${{ matrix.arg }}
elif [ "${{ inputs.build-system }}" == "cmake-make" ] || [ "${{ inputs.build-system }}" == "make-cmake" ]; then
- python tools/build.py -s make ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
- python tools/build.py -s cmake ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
+ python tools/build.py -s make $MEMBROWSE_UPLOAD_OPTION ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
+ python tools/build.py -s cmake $MEMBROWSE_UPLOAD_OPTION ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
else
- python tools/build.py -s ${{ inputs.build-system }} ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
+ python tools/build.py -s ${{ inputs.build-system }} $MEMBROWSE_UPLOAD_OPTION ${{ steps.setup-toolchain.outputs.build_option }} ${{ inputs.build-options }} ${{ matrix.arg }}
fi
shell: bash
diff --git a/.github/workflows/membrowse-report.yml b/.github/workflows/membrowse-report.yml
index 0667418e6..f86b047df 100644
--- a/.github/workflows/membrowse-report.yml
+++ b/.github/workflows/membrowse-report.yml
@@ -38,7 +38,6 @@ jobs:
uses: actions/checkout@v6
with:
fetch-depth: 0
- submodules: recursive
# Download artifacts when code changed (build artifacts available)
- name: Download build artifacts
diff --git a/hw/bsp/family_support.cmake b/hw/bsp/family_support.cmake
index 335b56c72..57a323c4a 100644
--- a/hw/bsp/family_support.cmake
+++ b/hw/bsp/family_support.cmake
@@ -298,6 +298,11 @@ ${MEMBROWSE_EXE} report ${OPTION} $<TARGET_FILE:${TARGET}> \"$ld_scripts\"")
VERBATIM
)
+ if (NOT TARGET examples-membrowse-upload)
+ add_custom_target(examples-membrowse-upload)
+ endif ()
+ add_dependencies(examples-membrowse-upload ${TARGET}-membrowse-upload)
+
set_property(TARGET ${TARGET}-membrowse PROPERTY FOLDER ${TARGET})
set_property(TARGET ${TARGET}-membrowse-upload PROPERTY FOLDER ${TARGET})
endif ()
diff --git a/tools/build.py b/tools/build.py
index d22d06a0b..bc032fb91 100755
--- a/tools/build.py
+++ b/tools/build.py
@@ -106,7 +106,7 @@ def print_build_result(board, example, status, duration):
# -----------------------------
# CMake
# -----------------------------
-def cmake_board(board, build_args, build_flags_on):
+def cmake_board(board, build_args, build_flags_on, membrowse_upload):
ret = [0, 0, 0]
start_time = time.monotonic()
@@ -142,6 +142,8 @@ def cmake_board(board, build_args, build_flags_on):
if rcmd.returncode == 0:
ret[0] += 1
run_cmd(["cmake", "--build", build_dir, '--target', 'tinyusb_metrics'])
+ if membrowse_upload:
+ run_cmd(["cmake", "--build", build_dir, '--target', 'examples-membrowse-upload'])
# print(rcmd.stdout.decode("utf-8"))
else:
ret[1] += 1
@@ -198,13 +200,13 @@ def make_board(board, build_args):
# -----------------------------
# Build Family
# -----------------------------
-def build_boards_list(boards, build_defines, build_system, build_flags_on):
+def build_boards_list(boards, build_defines, build_system, build_flags_on, membrowse_upload):
ret = [0, 0, 0]
for b in boards:
r = [0, 0, 0]
if build_system == 'cmake':
build_args = [f'-D{d}' for d in build_defines]
- r = cmake_board(b, build_args, build_flags_on)
+ r = cmake_board(b, build_args, build_flags_on, membrowse_upload)
elif build_system == 'make':
build_args = ' '.join(f'{d}' for d in build_defines)
r = make_board(b, build_args)
@@ -273,6 +275,8 @@ def main():
parser.add_argument('--one-first', action='store_true', default=False,
help='Build only the first board (alphabetical) of each specified family')
parser.add_argument('-j', '--jobs', type=int, default=os.cpu_count(), help='Number of jobs to run in parallel')
+ parser.add_argument('--membrowse-upload', action='store_true', default=False,
+ help='Run examples-membrowse-upload target after successful CMake build')
parser.add_argument('-v', '--verbose', action='store_true', help='Verbose output')
args = parser.parse_args()
@@ -284,6 +288,7 @@ def main():
build_flags_on = args.build_flags_on
one_random = args.one_random
one_first = args.one_first
+ membrowse_upload = args.membrowse_upload
verbose = args.verbose
clean_build = args.clean
parallel_jobs = args.jobs
@@ -314,7 +319,7 @@ def main():
all_boards.extend(get_family_boards(f, one_random, one_first))
# build all boards
- result = build_boards_list(all_boards, build_defines, build_system, build_flags_on)
+ result = build_boards_list(all_boards, build_defines, build_system, build_flags_on, membrowse_upload)
total_time = time.monotonic() - total_time
print(build_separator)