Commit Graph
115 Commits
Author SHA1 Message Date
9d85e993fb ci: evict majestic's moving S3 tarball from the dl cache too (#109)
PR #105 added a "Refresh moving-ref package downloads" step that drops
*-{HEAD,master,main,dist}.tar.gz before each build so buildroot re-fetches
the current ref. That fixed the majestic-webui-dist.tar.gz staleness (the
*-dist.tar.gz case), but it never matched majestic itself.

majestic downloads from S3 as majestic.<family>.<variant>.master.tar.bz2
(majestic.mk) — a DOT separator, .tar.bz2, and an S3 host the old pattern
deliberately spared as "content-addressed". But that S3 object is a moving
`master` build, re-uploaded on every majestic CI run, with no .hash to force
a refetch. So it stayed frozen in the monthly builder-dl cache while the
webui refreshed — the exact desync that shipped a pre-x-groups majestic in a
t31 lite image against the current webui, blanking the settings page with
"No settings groups in schema."

Broaden the eviction to a regex covering both -ref and .ref separators across
gz/bz2/xz, so majestic.*.master.tar.bz2 and majestic-webui-dist.tar.gz are
both dropped while semver/SHA-pinned tarballs keep their cache.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-28 14:00:25 +03:00
edb7251bf3 devices: add CP Plus CP-UNC-TA21L2C (gk7205v200_lite, SC223A) (#106)
Dahua-OEM 2 MP camera. The SC223A is on hardware I2C0 routed to the
VI-RAW pads (0x112c0060/0x64 func2) rather than the default mipi-sensor
pads (0x30/0x34 func1) the SDK probes, and needs a 27 MHz MCLK
(0x120100f0=0x19; SDK default 0x11/div4 leaves it unresponsive).
S71devmem re-muxes the pads, selects the SENSOR_RSTN reset (GPIO8_7
func2) and fixes MCLK after S70vendor/load_goke; the stock
open_sensor_i2c then reaches the sensor over /dev/i2c-0. No kernel
module needed.

Verified on hardware: chip-id 0xcb3e over HW I2C0, MIPI lock 1920x1080
zero errors, majestic streams correct colour 1080p.

Co-authored-by: build <build@local>
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-27 07:37:44 +03:00
97356e0cfe ci: re-fetch moving-ref package downloads each build (#105)
builder caches BR2_DL_DIR (/tmp/builder-dl) under a monthly key (date +%m), and
actions/cache only saves on a key miss, so the first build of the month freezes it for
weeks. Packages pinned to a moving ref (VERSION = HEAD/branch, or the majestic-webui
`dist` release asset) download as a constant <pkg>-<ref>.tar.gz, so buildroot keeps
reusing the stale tarball — defeating the clean firmware-HEAD re-clone builder does for
freshness.

Empirically, a 2026-06-14 builder nightly shipped a ~2-week-old majestic-webui (full
bootstrap.min.css, no mj-settings.js) while the firmware nightly of the same day shipped
the current slim UI. Drop *-{HEAD,master,main,dist}.tar.gz before each build (master.yml
+ build-one.yml) so buildroot re-fetches the current ref. Mirrors the same fix in
OpenIPC/firmware.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-15 09:32:06 +03:00
da13271f94 ci: mirror firmware's size-report sidecar (OpenIPC/firmware#2166) (#102)
Firmware PR #2166 added a `size-report` Makefile target + the
`general/scripts/size_report.py` analyser that emits a per-package /
per-kernel-module `sizes.<soc>-<variant>.json` next to the .tgz. Builder
clones firmware fresh on every run and shells to `make BOARD=...`, so the
script + target are already available downstream — this PR adds the CI wiring
and manifest extension so the JSON ships as a release asset and surfaces
through https://openipc.github.io/builder/manifest.json.

Three changes:

* `builder.sh`: best-effort `make size-report` after the main build, and
  copy `sizes.*.json` into the timestamped archive next to `.tgz` /
  `rootfs.squashfs.*`. Failure is swallowed so a legacy `OPENIPC_FW_REV` pin
  to a pre-#2166 firmware ref can't sink the build.

* `.github/workflows/master.yml`: new `Build size report` step after the
  existing `Build firmware`. Mirrors the bimodal rename trick the .tgz path
  already does — compound matrix entries (`<soc>_<variant>_<vendor>-<model>`)
  share `<soc>_<variant>` and would otherwise collide on the firmware-side
  `sizes.<soc>-<variant>.json` filename when uploaded to the same release
  tag. Compound entries get the JSON renamed to `sizes.<NAME>.json`; simple
  entries keep `sizes.<soc>-<variant>.json`. `${{env.SIZES}}` is added to
  all three upload `files:` blocks (dated / nightly / latest).

* `.github/scripts/enrich_manifest.py`: `SIZES_COMPOUND_RE` +
  `SIZES_SIMPLE_RE`, a `parse_sizes()` helper that tries compound first
  (because `[^._-]+` in the simple soc class would otherwise accept the
  compound form too), the sidecar is recorded at the platform level under
  a `"sizes"` key in `manifest.json`, and a new `@sizes <build_id>
  <platform> <size> <url>` line type is emitted in `manifest.flat`
  alongside the existing `@channel` directive.

Schema is unchanged for existing consumers — on-device sysupgrade reads
positional 4-column `manifest.flat` lines and stays inert on unknown
`@`-prefixed directives.

Co-authored-by: John <zekccsripfwrocp-15689@yn.furvionx.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-06-03 15:05:05 +03:00
a36a2d50aa ci: always rebuild on schedule (drop builder-HEAD-only dedupe) (#98)
The preflight gate skipped scheduled runs whenever this repo's HEAD
matched the SHA recorded in the previous nightly release body. That key
ignores every upstream input the build actually depends on:
OpenIPC/firmware HEAD, the toolchain release, the kernel tarball, the
vendor osdrv packages, and individual buildroot package upstreams.
builder.sh re-clones OpenIPC/firmware fresh on every run, so those
inputs do move between nightlies even when this repo is quiet.

The concrete failure mode this caused: on 2026-05-26 OpenIPC/firmware
bumped its hisilicon-opensdk pin to b958db4, which contains the V4
mipi_rx vsync IRQ fix (openhisilicon PR #195, closes #194 — torn
frames / 'Timeout from venc channel 0' on hi3516ev200, gk7205v200,
gk7205v210, gk7205v300, hi3516ev300 hardware). The next builder
nightly (2026-05-27 07:00 UTC) ran with this repo unchanged since
2026-05-25, so preflight skipped the entire Firmware matrix. Field
cameras (verified: gk7205v210_lite_vixand-ivg-g4h at IP redacted,
running BUILD_ID nightly-20260526-ee40da8, srcversion
8EF923DF907C1F7F3C6898E — the pre-fix open_mipi_rx fingerprint from
PR #195's verification table) kept pulling the stale 'latest' release
asset and kept showing the regression after sysupgrade.

A cross-input dedupe key would be possible (firmware HEAD + toolchain
URL hash + ...) but enumerates every upstream this build pulls. Simpler
and correct: scheduled nightlies always build. workflow_dispatch is
unaffected — that path was already unconditional.

Co-authored-by: Dmitry Ilyin <zekccsripfwrocp-15689@yn.furvionx.com>
2026-05-27 16:56:02 +03:00
910c6326a3 ci: cache Buildroot dl/ at /tmp/builder-dl (mirrors firmware's dl cache) (#96)
OpenIPC/firmware/.github/workflows/build.yml has a `output/dl` cache
step that mirrors the Buildroot download directory across runs. This
saves both runner-minutes and — importantly — masks transient upstream
mirror failures: once any cron has cached the canonical tarball for a
package, every subsequent run reuses it regardless of whether the
primary URL is healthy that day.

builder's master.yml + build-one.yml had no equivalent. Each cron run
fully re-downloads the entire dl/ tree, so every package's upstream
must be healthy in every run. Hit hard 2026-05-24 by
wireguard-tools-1.0.20210914.tar.xz: it's served from a cgit
`snapshot/` URL on git.zx2c4.com which regenerates the tarball
per-request with shifting sha256, and `sources.buildroot.net` also
served drifted bytes — see kaeru
'wireguard-zx2c4-tarball-regeneration-hash-drift'. Result: random
matrix entries fail with hash mismatches each cron, with selection
roulette-style (93 boards enable wireguard; on any given run a few
roll snake-eyes on the download).

Mirror firmware's pattern with one wrinkle: builder.sh does
`rm -rf openipc` at the top of every run to force a clean re-clone of
firmware, which would obliterate `openipc/output/dl/` if we cached the
default path. Cache `/tmp/builder-dl` instead (outside the openipc
tree) and point Buildroot at it via BR2_DL_DIR env var, honored per
Buildroot manual section "Location of source tarballs". Same restore +
save lifecycle as firmware's, same monthly key shape.

Effect:
  - First cron after merge: full download as usual; warms /tmp/builder-dl.
  - Subsequent crons: instant cache hit for unchanged packages; only
    re-download for version bumps. Removes the wireguard-roulette class
    of failure entirely once cache is populated.

build-one.yml gets the same treatment so single-board dispatches share
the cache pool.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-24 21:42:11 +03:00
6bf71492fd ci/nightly: SHA-gate cron, publish dated nightly-* releases, BUILD_ID env (#91)
Mirror the OpenIPC/firmware nightly redesign (PRs #2111-#2129) to
builder. This commit is PR-Bld-A: the build.yml-side changes only.
Subsequent PRs add the manifest aggregator + retention sweep
(PR-Bld-B) and the build-one.yml commit input (PR-Bld-C).

Changes:

1. **Preflight SHA gate**. New `preflight` job reads `sha=` from the
   rolling `nightly` release body. On schedule events it short-
   circuits the matrix when HEAD matches the previously-published
   SHA; PRs and workflow_dispatch always build. Mirrors firmware's
   #2111.

2. **Three release tags per build**:
   - `nightly-YYYYMMDD-<short>` (prerelease, content-addressable,
     the unit of history — 90-day retention via PR-Bld-B's
     cleanup.yml).
   - `nightly` (rolling channel pointer; body carries sha/short/
     built_at).
   - `latest` (legacy alias, kept one cycle so existing sysupgrade
     clients hitting the old hardcoded URL don't break).

3. **`BUILD_ID` / `BUILD_SHA` / `BUILD_PLATFORM` env** exported at
   the job level from preflight outputs. firmware's rootfs_script.sh
   (which builder.sh reuses via its clone of firmware) picks BUILD_ID
   + BUILD_SHA into /etc/os-release automatically. BUILD_PLATFORM is
   set to the matrix entry (e.g. `gk7205v200_fpv_caddx-fly`) and is
   forward-compatible with Phase 3 of the mirror plan (the firmware-
   side rootfs_script.sh update that emits BUILD_PLATFORM as an
   os-release field).

4. **Retry budget** around `bash builder.sh`. Matches firmware's
   `30 60 120 300 600 1200` ladder, covering toolchain/CDN flakes
   (#2115 + #2129 in firmware).

5. **Telegram caption** leads with `Build: <build_id>`; obsolete
   `Tag: ${TAG_NAME}` line gone; workflow-level `env: TAG_NAME=
   latest` removed.

No on-device firmware changes; builder cameras keep their existing
sysupgrade legacy URL until Phase 2 of the mirror (sysupgrade variant
routing) lands in OpenIPC/firmware.

See ~/.claude/plans/mirror-nightly-redesign-to-builder.md.

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-23 23:05:33 +03:00
Signor PellegrinoandGitHub 5627956b6d Replace ssc377qe_fpv_generic with ssc377qe_fpv_ccdcam-im50q01-tipoman 2026-04-12 20:12:41 +03:00
Signor Pellegrino (from Citadel PC) 3536392828 Add ssc377qe_fpv_ccdcam-im50q01-tipoman profile 2026-04-11 18:54:23 +03:00
Signor PellegrinoandGitHub 2ba771ada7 Add new APFPV configurations to master.yml 2026-04-06 00:14:44 +03:00
Signor PellegrinoandGitHub 01590e34ca Add ssc377qe_fpv_generic to workflow 2026-04-05 00:57:21 +03:00
cronyx fd2666c7c9 correct locations, autobuild, readme 2026-02-14 19:20:49 +03:00
elvoblinandGitHub 7703cd18eb Board ipg g3 wr (#71)
* add: ipg-g3-wr device

* update exclude lists

* wip: gk7202v300_lite_ipg-g3-wr
2025-11-05 19:14:38 +03:00
Signor Pellegrino (from Citadel PC) 8d4c399de7 Add gk7205v300_lite_vixand-ivg-g6s 2025-10-31 19:40:32 +03:00
Signor Pellegrino (from Citadel PC) d77caf21c7 Update files for t40_lite_movols-mo-805p 2025-09-10 19:27:12 +03:00
cronyx 9060f0a967 update workflow 2025-08-29 11:18:14 +03:00
Signor Pellegrino (from Citadel PC) e494573166 Update cmcc-ds-ytj5301 profile 2025-08-28 16:05:14 +03:00
Ystinia Zalatova (from Futurae PC) d508523872 Adding integration of three new devices on the T31N processor 2025-08-24 21:26:08 +01:00
cronyx d7d26507d7 base profile for aceline aip-o4 2025-08-07 20:48:39 +03:00
viktorxda e05c0261be Add ssc378qe_apfpv_defconfig 2025-08-05 00:42:25 +02:00
cronyx d6a1285f46 update workflow 2025-08-02 14:50:02 +03:00
viktorxda 9168fc2e93 Add ssc338q_apfpv_defconfig 2025-05-29 20:08:07 +02:00
Signor Pellegrino (from Citadel PC) 5dfa02a499 Add ssc337_lite_tiandy-tc-c321n-v2 profile 2025-03-03 09:49:08 +03:00
cronyx e43425ac0b fix name format 2025-02-16 21:08:07 +03:00
cronyx 011f954925 update workflow 2025-02-16 20:44:34 +03:00
Petru SoroagaandGitHub 9fbdc407f1 Updated RubyFPV firmware names (#46) 2025-02-14 11:05:42 +03:00
Petru SoroagaandGitHub 3107679295 Updated RubyFPV target images (#44)
Rationale:
End users might not know exactly what hardware they have, they just want to find RubyFPV firmware options, so in the release page, in the list of released firmware packages, it makes sense to have all RubyFPV related configs in a single place in the list (so all start with the same RubyFPV prefix).
2025-02-13 16:34:50 +03:00
Petru SoroagaandGitHub ca332c8aff Updated builder steps and configs for RubyFPV (#42) 2025-02-11 22:18:48 +03:00
cronyx 9fa7fe8d1a update workflow 2025-02-10 00:07:27 +03:00
Signor Pellegrino (from Citadel PC) d326af45d0 Initial t31_lite_cmcc-hdc-51-a6-v10 device 2025-02-08 00:23:36 +03:00
viktorxda c9c477f4ea Update master.yml 2025-01-28 11:38:31 +01:00
viktorxda 7f40eaf57b Add hisilicon-mini configurations 2025-01-27 10:41:40 +01:00
viktorxdaandGitHub 3e69df0d30 Add firmware fpv configurations (#40) 2025-01-27 09:21:28 +01:00
Signor Pellegrino (from Citadel PC) a3f1ab94f4 Add profile for XM G4H 2025-01-26 00:05:57 +03:00
Signor Pellegrino (from Citadel PC) ab363606db Add gk7205v200_lite_tiandy-tc-c321n profile 2025-01-18 23:17:08 +03:00
Signor Pellegrino (from Citadel PC) 324d5dc8a7 Add tiandy-tc-c32qn profile 2025-01-18 00:58:32 +03:00
Signor Pellegrino (from Citadel PC) e128c1b695 Add openipc-thinker-aio profile 2024-12-03 00:19:30 +03:00
Signor Pellegrino (from Citadel PC) 48038d9815 Uptate ssc333_lite_tp-link-tapo-c110-v26 2024-11-25 23:08:52 +03:00
Signor Pellegrino (from Citadel PC) ddd0a42c66 Add ssc338q_fpv_caddx-fly profile 2024-11-14 11:48:01 +03:00
viktorxdaandGitHub 5fcb9a01a1 Sync firmware changes (#32) 2024-10-26 00:36:47 +03:00
Signor Pellegrino (from Citadel PC) 0272c964b4 Add MSPOSD package to all SSC338Q profiles 2024-10-07 20:45:50 +03:00
viktorxda 3ecd6de6b5 Add ssc338q_fpv_openipc-mario-aio 2024-09-07 22:02:34 +02:00
cronyx 9f135d81a1 add imou-c22e-s2-v2 to autobuild 2024-08-05 13:29:26 +03:00
cronyx 3cfdd40b9d Vixand IVG-G6S-W 2024-08-03 15:31:12 +03:00
Signor Pellegrino 11069f811c Add hi3518ev300_lite_bathhouse profile 2024-06-13 23:49:07 +03:00
cronyx 3eff3eb8fc update workflow 2024-05-03 15:36:31 +03:00
Signor Pellegrino (from Citadel PC) 0c00262143 Remove unused profile gk7205v300_lite_elsar-v1 2024-04-29 21:35:57 +03:00
cronyx 9226123806 add Trassir TR-W2C1 v1 2024-04-29 12:26:42 +03:00
Viktor 918e6be82f Update Update ssc338q_fpv_openipc 2024-04-14 00:35:41 +02:00
Viktor d8138a185a Update github workflow 2024-04-09 16:28:06 +02:00