Push each build to openipc.org once; stop uploading size-report sidecars to releases - #170
Conversation
…releases The per-device sizes.*.json files uploaded to each dated release existed for the firmware explorer to poll. Releases are for firmware, and openipc.org no longer polls GitHub. - publish uploads the device images only, to the dated release as to nightly and latest. The size reports still travel as fw-* artifacts. With no images, no dated release is created. - A new report job, after publish and outside ci-gate, pushes the build to https://openipc.org/api/v1/builds once: the images with sha256 and each device's size report. It authenticates with its GitHub OIDC token (audience https://openipc.org); no secret is stored. The push is idempotent by build id, so the job can be re-run by itself. - push_build.py, soc_aliases.py and test_push_build.py are copies of OpenIPC/firmware's. lint.yml runs the tests. Contract: OpenIPC/website service/internal/builds/PUSH.md. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The report job no longer needs the one-day fw-* artifacts: - Each device image's size and sha256 come from the dated release after publish (`gh release view <tag> --json assets`; GitHub computes the digest on upload). An image with no digest fails the push. - The size report travels in its own reports-<device> artifact, kept 7 days; fw-* carries only the image and keeps its retention. A push that could not reach openipc.org can be re-run for a week. push_build.py and its tests are refreshed from OpenIPC/firmware. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PR Summary by QodoPush published builds to openipc.org via OIDC
AI Description
Diagram
High-Level Assessment
Files changed (6)
|
Code Review by Qodo
1.
|
From Qodo's review of #170: - Compound devices publish <matrix platform>-<storage>.tgz, with no openipc. prefix, so push_build.py dropped any whose size report was missing. It now recognises both naming schemes; tests cover each, with and without report files, and a report and its tarball being one device. - The report job downloaded reports-* before actions/checkout, which cleans the workspace, so every push would have lost its reports. Checkout now comes first and the reports land in runner.temp. - A guard tells "no reports produced" from "reports lost": if the matrix uploaded reports-* artifacts and none arrived, the push fails instead of sending devices without their detail (actions: read, to count them). - The job runs only this repository's push script; the artifacts are read as data. push_build.py and its tests are refreshed from OpenIPC/firmware. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Fixed in fea4a99:
|
Each builder nightly now tells openipc.org about itself once, directly. The
sizes.*sidecars per dated release are no longer uploaded.What changes
publishjob: stops uploadingsizes.*to the dated release. Only device tarballs are uploaded now, and they still go to the dated release,nightlyandlatest.reports-<platform>artifact kept for 7 days.reportjob runs afterpublishand can be re-run on its own.gh release view --json assets).https://openipc.org/api/v1/builds, authenticated with a GitHub Actions OIDC token for the audiencehttps://openipc.org.id-token: writeandcontents: read. No secret is added.test_push_build.py, 18 cases, run bylint.yml.Unchanged: gh-pages
manifest.jsonandmanifest.flat, which cameras'sysupgradereads;cleanup.yml; thenightlyrelease body.The receiving side is OpenIPC/website#311. openipc.org already holds the history these sidecars carried, imported once; the old files on past releases age out through
cleanup.yml. The contract is at https://github.com/OpenIPC/website/blob/builds-from-ci/service/internal/builds/PUSH.md.