Repository navigation
Add CI build workflow and root Makefile - #54
Merged
Merged
Conversation
- .github/workflows/build.yml: build the Flipper FAP (ufbt, release + dev SDK channels), the Cloudflare Worker (tsc + wrangler dry-run bundle) and the ESP32-S2 firmware (ESP-IDF v5.2.8) on every push to main and every pull request; syntax-check the inline scripts of the web image-prep page; run `ufbt lint` as a non-blocking advisory job. No path filters, because the shared UART protocol header is compiled into both the FAP and the ESP firmware. - Makefile: one entry point for developers (setup, build-all, build-fap, build-worker, build-esp, launch, flash-esp, serve-web, lint, clean). Works with the stock GNU Make 3.81 on macOS. Auto-detects the ESP-IDF Python virtualenv when export.sh would otherwise look for one matching a newer system python3. - esp32-wifi-fw/sdkconfig.defaults: pin CONFIG_IDF_TARGET="esp32s2" so clean builds (CI, fresh clones) no longer fall back to plain esp32. - cloud-plugins/package.json: add the `build` script (wrangler dry-run bundle) that the Makefile and CI rely on. - README/CONTRIBUTING: document the make targets and CI; add a build badge. - .gitignore: ignore .venv/ and the .clang-format generated by ufbt lint. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
- Export IDF_TARGET=esp32s2 so ESP-IDF performs the same target consistency check locally that the CI action gets from its IDF_TARGET env: a stale sdkconfig generated for another chip is now refused instead of built. - Print an absolute path in the export.sh failure hint; zsh does not tilde-expand VAR=~/path, so the old hint produced a literal "~". - launch depends on build-fap and flash-esp on build-esp, so `make -j` cannot run two builders in the same tree. - clean/distclean refuse to run outside the repository root (they delete cwd-relative paths). Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This was referenced Sep 16, 2026
Merged
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.
Summary
Adds automated builds for every deliverable in the repo plus a root
Makefileso developers get one entry point for all three toolchains.CI (
.github/workflows/build.yml)Runs on every pull request and every push to
main(plus manual dispatch). Five independent jobs:fapflipperzero-ufbt-action@v0.1, matrix over thereleaseSDK channel (hard gate, matches firmware 1.4.3 / API 87.1 / f7) and thedevchannel (allowed to fail, early warning for API breaks). Uploadsdist/*.fap+ debug ELF.workernpm ci,tsc --noEmit,wrangler deploy --dry-runbundle (no Cloudflare credentials needed). Uploadsdist/index.js.esp32esp-idf-ci-action@v1with theespressif/idf:v5.2.8image, targetesp32s2, then asserts the generatedsdkconfigreally resolved to the S2. Uploads the four flashable binaries +flasher_args.json.web<script>fromweb-image-prep/index.htmland runsnode --checkon each, so a syntax error is caught before Pages deploys it.lintufbt lint, non-blocking:maincurrently fails clang-format because of the column-aligned macros/struct fields, and lint walks the non-FAP folders too.There are deliberately no
paths:filters:esp32-wifi-fw/shared/tt_wifi_proto.his compiled into both the FAP and the ESP firmware, so a change on either side must rebuild both. PR runs cancel superseded runs; pushes tomainnever cancel.Makefile
make/make helplists targets:setup,build-all,build-fap,build-worker,build-esp,launch,flash-esp,serve-web,lint,check-worker,clean,distclean. Works with the stock GNU Make 3.81 on macOS as well as 4.x.UFBT,IDF_PATH,ESP_PORT,WEB_PORTand friends are overridable.cleanonly removes generated outputs.build-espauto-detects the ESP-IDF Python virtualenv when exactly one~/.espressif/python_env/idf5.2_py*_envexists, becauseexport.shotherwise looks for an env matching whateverpython3is first onPATHand fails on machines where Homebrew Python has moved on sinceinstall.shran.Other changes
esp32-wifi-fw/sdkconfig.defaults: pinsCONFIG_IDF_TARGET="esp32s2". Without it a fresh clone (or CI) runsidf.py buildfor plain esp32.cloud-plugins/package.json: adds thebuildscript (wrangler deploy --dry-run --outdir dist) the Makefile and CI rely on.make build-fap..gitignore:.venv/and the.clang-formatthatufbt lintgenerates.Verification
sdkconfig, only the newCONFIG_IDF_TARGETline): resolved to esp32s2, ESP-IDF v5.2.8, zero warnings, all four binaries produced, app at 32% headroom in its OTA slot.make build-fapproducesdist/tagtinker.fap(Target 7, API 87.1). Note: plainufbt buildonly validates inside~/.ufbt/buildand never copies todist/; the target runs bareufbt, same as the CI action.make build-workertype-checks and bundles (287 KiB);make build-espsucceeds with no manual environment variables.build.yml: YAML parses; everyuses:ref resolves upstream; everywith:key was checked against the pinnedaction.ymlfiles; theespressif/idf:v5.2.8tag exists on Docker Hub; the inline-script checker passes on the current page and fails on an injected syntax error.make -ndry runs exit 0 with the expected commands.Notes for reviewers
.fap; dev SDK API 88.2 also builds; ESP32-S2 firmware 885 KB with target verified; worker bundle 287 KiB; web check 1/1 scripts OK; lint red-but-non-blocking as intended). Upstream CI is waiting for the first-time-contributor approval.dev-channel FAP job and thelintjob show as red inside a green run when they fail. That is intentional.wrangler3.x warns that v4 is available; upgrading is out of scope here.🤖 Generated with Claude Code