From bb7b05cfd77921be1f8a5434c83fd3ecc42d597f Mon Sep 17 00:00:00 2001 From: bring42 Date: Fri, 24 Jul 2026 11:30:08 +0200 Subject: [PATCH] =?UTF-8?q?ci(release):=20sync=20ui-concepts/=20=E2=86=92?= =?UTF-8?q?=20data/=20before=20building=20the=20LittleFS=20image?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The release build packaged web assets from the committed data/, but the UI source of truth is ui-concepts/ (synced via scripts/sync_web.py, a manual step that was easy to forget — so a release could ship a stale UI). Run the sync in CI before buildfs so every release always carries the latest UI regardless of what's committed in data/. .gz are gitignored and regenerated by the buildfs gzip pre-hook, so no committed artifacts drift. The tag-to-release trigger is unchanged: cutting a release stays a deliberate human action; only the sync is automated. Co-Authored-By: Claude Opus 4.8 --- .github/workflows/release.yml | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c3691a2..cdf5549 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -31,6 +31,13 @@ jobs: id: ver run: echo "version=${GITHUB_REF_NAME#v}" >> "$GITHUB_OUTPUT" + # Regenerate data/ from the ui-concepts/ sources so the LittleFS image + # always ships the latest UI. data/ is a build output (its .gz are + # gitignored); this removes the manual `sync_web.py` step from the + # release path, so the committed data/ can never drift into a release. + - name: Sync web UI (ui-concepts/ → data/) + run: python3 scripts/sync_web.py + # Build firmware + LittleFS image for every board, then assemble a # manifest.json carrying SHA-256 checksums the device verifies before it # boots a downloaded image. Asset ids MUST match BOARD_ID_BY_ENV in