Build all missing stable versions and filter pre-releases#12
Build all missing stable versions and filter pre-releases#12swoboda1337 merged 5 commits intomainfrom
Conversation
check-update.yml previously took .versions[0] from the registry, which is the semver-highest version including pre-releases. When 3.0.0-rc1 was published it became the 'latest' and every subsequent check kept dispatching failing 3.0.0-rc1 builds while 2.12.4/5/6 were silently skipped. Compute the set of stable versions missing from releases and dispatch a build per missing version. Add concurrency groups so parallel builds serialize on the shared release/manifest/pages state instead of racing.
comm requires lexicographic sort but sort -V gives semver order, so the previous version errored with 'file 1 is not in sorted order'.
There was a problem hiding this comment.
Pull request overview
Updates the scheduled “check-update” GitHub Actions workflow so it reliably detects all missing stable ESP-Hosted component versions (while excluding pre-releases), and dispatches builds for each missing version. It also serializes release/manifest/pages publishing steps across concurrent build runs to avoid shared-state races.
Changes:
- Compute “missing versions” as (registry stable versions − existing GitHub releases) and dispatch one build per missing version.
- Filter out pre-release versions from the ESP component registry results.
- Add
concurrencygroups to serializerelease,manifest, anddeploy-pagesjobs across parallel workflow runs.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 3 comments.
| File | Description |
|---|---|
| .github/workflows/check-update.yml | Reworks update detection to build all unreleased stable versions and dispatch builds per version. |
| .github/workflows/build.yml | Adds concurrency groups to serialize release publishing, manifest generation, and Pages deployment. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
The previous logic treated any version in the registry without a matching release tag as 'missing', which would dispatch builds for every historical version we never built (1.0.0 through 2.11.2, dozens of them). Those old versions likely don't build under current ESP-IDF and aren't what we want to release anyway. Now we only build versions strictly newer than the highest existing release, so catching up on a cluster (like 2.12.4/5/6) still works but ancient gaps are ignored.
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 2 out of 2 changed files in this pull request and generated 4 comments.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
- Filter all semver pre-releases via jq select(contains("-") | not)
instead of a narrow rc|alpha|beta|dev regex.
- Add explicit permissions block (contents: read, actions: write) so
gh workflow run works regardless of repo default token scope.
- Emit missing_count output and gate dispatch on that, avoiding the
trailing-newline-in-heredoc edge case where outputs.missing != ''
could evaluate truthy for an empty list.
- Dedupe registry versions with sort -Vu.
- Per-target concurrency group on manifest matrix so the 4 targets
still parallelize within a run; only across-run writes to the same
target's manifest file serialize.
gh release list returns newest-first; sorting with -V matches the ascending order of AVAILABLE so the two lists are visually comparable.
Summary
check-update.ymlnow dispatches a build for every stable version newer than the highest existing release, so catch-ups like 2.12.4/5/6 all get built instead of only the latest-identifier (catchesrc,preview, etc.)permissions:block (contents: read,actions: write) sogh workflow runworks regardless of default token scopeconcurrency:groups on therelease(cross-run) andmanifest/deploy-pages(per-target cross-run) jobs so parallel builds serialize their shared-state writesWhy
On 2026-04-18, Espressif published
3.0.0-rc1. The old script took.versions[0].version(semver-highest, including pre-releases), compared to the current release, and dispatched a build. Theslaveexample was removed in 3.0.0, so every dispatch failed. On 2026-04-22 Espressif published 2.12.4, 2.12.5, and 2.12.6 — but3.0.0-rc1was still "latest" to the script, so those three versions were silently skipped.The workflow only builds forward (versions > highest existing release) rather than filling historical gaps — we don't want to retroactively build every version back to 1.0.0 that was never released.
Test plan
check-update.ymlon this branch — reported empty "Missing versions", skipped dispatch step (run 24891202979)3.0.0-rc1is filtered from the "Available" list