Replies: 2 comments
|
Phase 1 shipped and live: https://github.com/ispyisail/gargoyle-firmware
Everything above was tested against real behavior before going live: a 13-assertion headless-browser test of the Finder's search/filter/EOL-badge/copy-to-clipboard UX, the gatherer tested against a mocked Next up: Phase 2 (plugin feeds) whenever you're ready. |
|
Phase 2 shipped and live: plugin feed generation via A real correction surfaced while building this, now fixed everywhere it was stated: the original plan assumed opkg would accept an absolute URL in a package's
Also found and fixed, only because I tested under the actual Next up: Phase 3 (firmware build workflow) whenever you're ready. |
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
Status: Ready for review · implements the server side of #62 (signed OTA) and its Rung-2 Firmware Finder · full doc:
docs/firmware-hosting-plan.mdinispyisail/gargoyle-toolsGoal
Host every Gargoyle firmware image and every plugin package on GitHub, with a searchable download page (hundreds of device/version combinations), a plugin feed the firmware points at out of the box, and CI that builds and publishes all of it — on the free tier.
One assumption to correct first
Plugins are not identical across firmwares: binary plugin packages are per-architecture (
aarch64_cortex-a53for the MT6000,mips_24kcfor most ath79, ...) and per-Gargoyle-major. What is true: one arch's plugin set serves every device of that arch, and script-only plugins (archall) are shared. So the feed layout is per-release + per-arch — a dozen directories, not hundreds.The load-bearing GitHub facts
.ipksmanifest-*.json, feed index filesTwo conclusions: big binaries live in Releases (never git, never Pages), and GitHub itself cannot be customized for search — release pages aren't searchable by device. The search experience is a static Pages site we control: CI generates an
index.json(device, board_name, aliases, target, version, channel, sha256, URL) and a single page filters it client-side as you type. This page is the Firmware Finder from #62 (Rung 2) — same artifact, one build.Repository layout
A new dedicated repo (suggest
gargoyle-firmware), separate from source so release assets, Pages and publish workflows never tangle with source PRs:The
devices/directory makes fleet-gating metadata versioned, reviewable data — marking a device EOL becomes a PR, not a script edit.The plugin feed
Correction (Phase 2 implementation): the original draft above assumed opkg would resolve an absolute URL in a package's
Filename:field, letting the index live on Pages while packages rode the Release CDN. Reading opkg's actual source (libopkg/opkg_download.c'sopkg_download_pkg()) shows that's wrong: opkg concatenates the package list URL and every package'sFilename:onto the exact samesrc/gz <name> <url>base with a plain"%s/%s", no absolute-URL case. Index and packages must live at the same base URL — so both now live together in the same release, no Pages involvement for this part:scripts/make-feed.shbuildsPackages/Packages.gzby downloading every.ipkin aplugins-<major>-<arch>release (small enough — a few KB to low hundreds of KB — that pulling real control-file fields and hashing actual bytes directly is cheap and more correct than guessing from filenames) and uploads the index back into that same release. The apk migration keeps the same same-base shape (APKINDEX + signed packages; the gapk signing runbook already covers keys).Firmware change (small, one place): the default
src/gz gargoyle_core <url>line in the opkg.conf template thatgpkg-uci-defaultsinstalls — pointed directly at theplugins-<major>-<arch>release's own download base for the matching major+arch at build time. Users keep add/remove sources in the Plugins page exactly as today.CI on the free tier — honest assessment
dl/+ ccache caches (10 GB/repo) keep rebuilds well inside it, from-scratch toolchains may flirt with the limit.Pipeline per release
Phases
make-index.sh, searchable Pages site. Immediately useful.make-manifest.shemits RFC: Signed OTA firmware upgrade (usign/fwtool/sysupgrade + signed manifest) #62's signedmanifest-{stable,testing}.jsonwith floors/EOL/history fromdevices/; the Finder gains the drag-in-a-backup-tarball identifier (Rung 2 complete). Lands alongside RFC: Signed OTA firmware upgrade (usign/fwtool/sysupgrade + signed manifest) #62 phase 2.Risks / open questions
gh release create.Feedback welcome — especially on the dedicated-repo split, self-hosted vs fully-hosted builds (key custody), and whether the Finder should launch with the backfilled historical versions or current releases only.
All reactions