ci: add examples build matrix, config variants, and upstream drift watcher - #11
Merged
Merged
Conversation
- examples job: matrix of all 5 examples on ESP-IDF v6.0.1 (the version inside espressif32@7.0.1, which is what zen-clock actually pins), plus an early-warning basic_connect build against release-v6.0 (continue-on-error). - config-variants job: covers the three config combinations the 5 examples' own sdkconfig.defaults don't already exercise -- zerocopy (CONFIG_ML_ZERO_COPY_WG=y), minimal (everything optional off), and cellular-zerocopy (both features together, since neither alone would catch an interaction bug between them). Overlays live in ci/, applied via -DSDKCONFIG_DEFAULTS="sdkconfig.defaults;sdkconfig.ci" (which replaces the implicit default list, so the base file has to be re-listed alongside the overlay). - examples/failover_connect/main/CMakeLists.txt was missing REQUIRES entirely -- harmless today only because IDF links everything when a component doesn't declare REQUIRES, but it meant this was the one example that would silently build even if `microlink` fell out of the build graph. Set it to match the other 4 examples. espressif/esp-idf-ci-action interpolates `command` inside a single-quoted `bash -c '...'` -- only double quotes are usable inside the command string, noted inline where it matters.
Same pattern as fugo101/wireguard-lwip's watcher: weekly cron + workflow_dispatch, a single tracking issue updated in place and auto-closed when clean. git cherry -v against upstream/main catches missing commits by patch-id; gh pr list catches open PRs, filtered against the PR numbers UPSTREAM_PRS.md already accounts for (absorbed or deliberately skipped with a recorded reason) so the issue only surfaces genuinely new drift. Requires the upstream-drift label (created on the repo, not tracked in git).
Component-requirements expansion (which decides REQUIRES/PRIV_REQUIRES, and therefore public include-dir propagation) runs in an ESP-IDF CMake pass that happens before Kconfig is resolved -- REQUIRES can never depend on a CONFIG_* value, only SRCS can (in the later registration pass). The previous commit (ea9237a) gated the esp_driver_uart/ esp_driver_gpio REQUIRES on CONFIG_ML_ENABLE_CELLULAR, which silently no-ops: confirmed the fix never actually took effect, in both a local PlatformIO build and the real ESP-IDF Docker CI added by this same PR (everything with CONFIG_ML_ENABLE_CELLULAR=y still failed with "driver/ uart.h: No such file or directory"). Fix: make both REQUIRES unconditional, same as `driver` and esp_driver_tsens already are above them -- REQUIRES is necessarily coarser-grained than SRCS in ESP-IDF, this is normal.
config_load_peers()'s old-format migration path compared old_count (uint8_t, max 255) directly against ML_CONFIG_MAX_ALLOWED_PEERS. Every example in this repo defaults that Kconfig value to 512 -- since 255 is always <= 512, GCC's -Werror=type-limits correctly flags the comparison as always true regardless of old_count's runtime value, which is a real bug: on a config with a *smaller* max (the Kconfig range allows as low as 1), the intended clamp would silently never trigger either, since the compiler would have already proven the check meaningless for the default and this path is only reachable at all when it isn't. This was pre-existing on main, unrelated to this migration -- it just never had CI to catch it before. Fix: widen old_count to uint16_t before the comparison, so the check is against the variable's actual runtime value instead of a type range GCC can resolve at compile time.
fudio101
added a commit
that referenced
this pull request
Aug 19, 2026
Issue #23 (captive-portal detection) was closed and merged via PR #48 on 2026-08-18 but the tracker table was never updated to reflect it — the only row still missing a done marker. Also prunes the Notes section's two "conflicts to resolve before scoping" callouts (#11, #2-vs-#17), both already resolved in their own rows. Co-authored-by: Adrian.Nguyen-Qualgo <nguyen.ndt@qualgo.net> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
This file contains hidden or 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
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Two commits:
examplesjob (matrix over all 5 examples on ESP-IDF v6.0.1, plus anearly-warning release-v6.0 build) and
config-variantsjob (zerocopy,minimal, cellular-zerocopy -- the three combinations the examples'
own sdkconfig.defaults don't already exercise). Also fixes
examples/failover_connect/main/CMakeLists.txt, which was missingREQUIRESentirely.fugo101/wireguard-lwip's, filtered against the PR numbers
UPSTREAM_PRS.md already accounts for.
This is the first PR to actually exercise the real build (the
manifestjob that unblocked #10 only validates the manifest, not a full compile) --
worth watching its run closely before merging.