summaryrefslogtreecommitdiff
path: root/.github
diff options
context:
space:
mode:
authorZixun LI <[email protected]>2026-03-12 10:55:18 +0100
committerZixun LI <[email protected]>2026-03-12 10:55:18 +0100
commite2884a1b88ce89b6e724e3d3b441b8ee1f83c06c (patch)
treec322110908d4282ca7e37fe52dc9ce42be15b073 /.github
parentc06dc871d651ddaf756afdc59ed148c4b1af314d (diff)
parentac61a5b176b44db503d8bcc287a622463b65e48e (diff)
Merge branch 'master' into ncm_restart
Diffstat (limited to '.github')
-rw-r--r--.github/actions/setup_toolchain/espressif/action.yml2
-rw-r--r--.github/membrowse_pr_message.j238
-rw-r--r--.github/workflows/build.yml10
-rw-r--r--.github/workflows/claude-code-review.yml32
-rw-r--r--.github/workflows/claude.yml49
-rw-r--r--.github/workflows/membrowse-comment.yml19
6 files changed, 136 insertions, 14 deletions
diff --git a/.github/actions/setup_toolchain/espressif/action.yml b/.github/actions/setup_toolchain/espressif/action.yml
index e9d645ac8..90ef753c4 100644
--- a/.github/actions/setup_toolchain/espressif/action.yml
+++ b/.github/actions/setup_toolchain/espressif/action.yml
@@ -7,7 +7,7 @@ inputs:
toolchain_version:
description: 'Toolchain version'
required: false
- default: 'v5.3.2'
+ default: 'v5.5.3'
runs:
using: "composite"
diff --git a/.github/membrowse_pr_message.j2 b/.github/membrowse_pr_message.j2
new file mode 100644
index 000000000..fbba1ee78
--- /dev/null
+++ b/.github/membrowse_pr_message.j2
@@ -0,0 +1,38 @@
+{#- Top 10 targets with biggest memory changes + project dashboard link -#}
+{% set section_columns = ['.text', '.rodata', '.data', '.bss'] -%}
+{#- --- Compute per-target total absolute delta and collect changed targets --- -#}
+{% set changed = [] -%}
+{% for target in targets -%}
+{% if target.has_changes -%}
+{% set ns = namespace(total_delta=0, total_current=0) -%}
+{% for region in target.regions -%}
+{% set ns.total_delta = ns.total_delta + region.delta -%}
+{% set ns.total_current = ns.total_current + region.used_size -%}
+{% endfor -%}
+{% set total_old = ns.total_current - ns.total_delta -%}
+{% set pct = (ns.total_delta / total_old * 100) if total_old > 0 else 0 -%}
+{% set abs_pct = (ns.total_delta | abs) if total_old == 0 else (pct | abs) -%}
+{% set _ = changed.append({'target': target, 'total_current': ns.total_current, 'total_old': total_old, 'total_delta': ns.total_delta, 'pct': pct, 'abs_pct': abs_pct}) -%}
+{% endif -%}
+{% endfor -%}
+{#- --- Sort by absolute percentage change descending and take top 10 --- -#}
+{% set sorted_changed = changed | sort(attribute='abs_pct', reverse=true) -%}
+{% set top10 = sorted_changed[:10] -%}
+{#- --- Render --- -#}
+{% if top10 %}
+### Top {{ top10 | length }} targets by memory change (%) (out of {{ targets | length }} targets) {% if dashboard_url %} [View Project Dashboard →]({{ dashboard_url }}){% endif %}
+
+| target | .text | .rodata | .data | .bss | total | % diff |
+|--------|-------|---------|-------|------|-------|--------|
+{% for info in top10 -%}
+{% set target = info.target -%}
+{% set section_map = {} -%}
+{% for section in target.sections -%}
+{% set _ = section_map.update({section.name: section}) -%}
+{% endfor -%}
+| {% if target.comparison_url %}[{{ target.name }}]({{ target.comparison_url }}){% else %}{{ target.name }}{% endif %} |
+{%- for col in section_columns %} {% if col in section_map %}{{ "{:,}".format(section_map[col].old.size) }} → {{ "{:,}".format(section_map[col].size) }} ({{ section_map[col].delta_str }}){% else %}—{% endif %} |{% endfor %} {{ "{:,}".format(info.total_old) }} → {{ "{:,}".format(info.total_current) }} ({% if info.total_delta >= 0 %}+{{ "{:,}".format(info.total_delta) }}{% else %}{{ "{:,}".format(info.total_delta) }}{% endif %}) | {% if info.total_old > 0 %}{% if info.pct >= 0 %}+{% endif %}{{ "%.1f" | format(info.pct) }}%{% else %}N/A{% endif %} |
+{% endfor %}
+{% else %}
+No memory changes detected across {{ targets | length }} target{{ 's' if targets | length != 1 else '' }}.{% if dashboard_url %} [View Project Dashboard →]({{ dashboard_url }}){% endif %}
+{% endif -%}
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 9d8b90f5a..e0ce08141 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -182,6 +182,7 @@ jobs:
name: metrics-comment
path: |
metrics_compare.md
+ metrics.json
pr_number.txt
- name: Post Code Metrics as PR Comment
@@ -291,7 +292,14 @@ jobs:
- name: Test on actual hardware
run: |
- python3 test/hil/hil_test.py ${{ env.HIL_JSON }} $SKIP_BOARDS
+ python3 test/hil/hil_test.py ${{ env.HIL_JSON }} $SKIP_BOARDS || \
+ (if [ -f "${{ env.HIL_JSON }}.skip" ]; then
+ SKIP_BOARDS=$(cat "${{ env.HIL_JSON }}.skip")
+ echo "Re-running with SKIP_BOARDS=$SKIP_BOARDS"
+ python3 test/hil/hil_test.py ${{ env.HIL_JSON }} $SKIP_BOARDS
+ else
+ exit 1
+ fi)
# ---------------------------------------
# Hardware in the loop (HIL)
diff --git a/.github/workflows/claude-code-review.yml b/.github/workflows/claude-code-review.yml
new file mode 100644
index 000000000..5d7efc115
--- /dev/null
+++ b/.github/workflows/claude-code-review.yml
@@ -0,0 +1,32 @@
+name: Claude Code Review
+
+on:
+ pull_request_target:
+ types: [opened, synchronize, ready_for_review, reopened]
+
+jobs:
+ claude-review:
+ if: false
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: write
+ issues: read
+ id-token: write
+
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run Claude Code Review
+ id: claude-review
+ uses: anthropics/claude-code-action@v1
+ with:
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+ plugin_marketplaces: 'https://github.com/anthropics/claude-code.git'
+ plugins: 'code-review@claude-code-plugins'
+ prompt: '/code-review:code-review ${{ github.repository }}/pull/${{ github.event.pull_request.number }}'
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://code.claude.com/docs/en/cli-reference for available options
diff --git a/.github/workflows/claude.yml b/.github/workflows/claude.yml
new file mode 100644
index 000000000..9471a0591
--- /dev/null
+++ b/.github/workflows/claude.yml
@@ -0,0 +1,49 @@
+name: Claude Code
+
+on:
+ issue_comment:
+ types: [created]
+ pull_request_review_comment:
+ types: [created]
+ issues:
+ types: [opened, assigned]
+ pull_request_review:
+ types: [submitted]
+
+jobs:
+ claude:
+ if: |
+ (github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
+ (github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
+ (github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
+ (github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
+ runs-on: ubuntu-latest
+ permissions:
+ contents: read
+ pull-requests: read
+ issues: read
+ id-token: write
+ actions: read # Required for Claude to read CI results on PRs
+ steps:
+ - name: Checkout repository
+ uses: actions/checkout@v4
+ with:
+ fetch-depth: 1
+
+ - name: Run Claude Code
+ id: claude
+ uses: anthropics/claude-code-action@v1
+ with:
+ claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
+
+ # This is an optional setting that allows Claude to read CI results on PRs
+ additional_permissions: |
+ actions: read
+
+ # Optional: Give a custom prompt to Claude. If this is not specified, Claude will perform the instructions specified in the comment that tagged it.
+ # prompt: 'Update the pull request description to include a summary of changes.'
+
+ # Optional: Add claude_args to customize behavior and configuration
+ # See https://github.com/anthropics/claude-code-action/blob/main/docs/usage.md
+ # or https://code.claude.com/docs/en/cli-reference for available options
+ # claude_args: '--allowed-tools Bash(gh pr:*)'
diff --git a/.github/workflows/membrowse-comment.yml b/.github/workflows/membrowse-comment.yml
index a99c9db51..952d8ba37 100644
--- a/.github/workflows/membrowse-comment.yml
+++ b/.github/workflows/membrowse-comment.yml
@@ -9,30 +9,25 @@ on:
jobs:
post-comment:
runs-on: ubuntu-latest
+ # Run the comment job even if some of the builds fail
if: >
github.event.workflow_run.event == 'pull_request' &&
github.event.workflow_run.conclusion != 'cancelled'
permissions:
+ contents: read
actions: read
pull-requests: write
steps:
- name: Checkout repository
uses: actions/checkout@v6
- - name: Download Artifacts
- id: download
- uses: actions/download-artifact@v5
- with:
- run-id: ${{ github.event.workflow_run.id }}
- github-token: ${{ secrets.GITHUB_TOKEN }}
- name: membrowse-comment
- path: reports
- continue-on-error: true
-
- name: Post Membrowse PR comment
- if: steps.download.outcome == 'success'
+ if: ${{ env.MEMBROWSE_API_KEY != '' }}
uses: membrowse/membrowse-action/comment-action@v1
with:
- json_files: 'reports/*.json'
+ api_key: ${{ secrets.MEMBROWSE_API_KEY }}
+ commit: ${{ github.event.workflow_run.head_sha }}
+ comment_template: .github/membrowse_pr_message.j2
env:
+ MEMBROWSE_API_KEY: ${{ secrets.MEMBROWSE_API_KEY }}
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}