Move is_high_frequency() from out-of-line definition in helpers.cpp
to inline in the header. This allows the compiler to inline the
trivial check (num_requests > 0) at the call site in
Application::loop(), avoiding a function call every loop iteration.
Explicitly checkout the base branch SHA for consistency and to
ensure the shared codeowners.js script is always loaded from
trusted code, not the PR head.
- Actually filter bot reviews (not just comment about it)
- Use core.setFailed() instead of silently swallowing errors
- Remove unused getEffectiveOwners import from detectors.js
pull_request_review checks out the PR merge commit by default,
which means require() would load the PR author's version of
shared scripts. Explicitly checkout the base branch SHA instead.
Add a workflow that automatically manages a code-owner-approved label
on PRs when component-specific codeowners submit approvals. This helps
maintainers prioritize PRs that have domain-expert sign-off.
The workflow triggers on pull_request_review events and recalculates
the label based on all current reviews. Only individual component
codeowners count - the catch-all @esphome/core team is excluded.
Uses last-match-wins semantics for CODEOWNERS pattern matching.
Also extracts shared CODEOWNERS parsing logic into a reusable module
at .github/scripts/codeowners.js and updates codeowner-review-request
and auto-label-pr workflows to use it.
The BK72xx SDK creates the main Arduino task at FreeRTOS priority 3,
which is lower than all WiFi (4-5), LwIP (4), and TCP/IP (7) tasks.
This causes the main loop to be preempted for ~100ms whenever WiFi
background processing runs (beacon handling, DHCP, WPA supplicant).
By contrast, RTL87xx creates its main task at osPriorityRealtime
(the highest priority), so it never experiences this issue.
Raise the BK72xx main task priority to 6 during arch_init(): above
WiFi/LwIP tasks (4-5) so they don't preempt the main loop, but below
the TCP/IP thread (7) so packet processing keeps priority. This is
safe because ESPHome yields voluntarily via yield_with_select_() and
the Arduino mainTask yield() after each loop() iteration.
Tested on CB3S (BK7231N) - loop time drops from ~110ms to ~14ms.