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>
This commit is contained in:
co-authored by
Dmitry Ilyin
parent
ee40da8007
commit
a36a2d50aa
@@ -28,15 +28,16 @@ jobs:
|
||||
SHORT=$(git rev-parse --short HEAD)
|
||||
BUILD_ID="nightly-$(date -u +%Y%m%d)-${SHORT}"
|
||||
BUILT_AT=$(date -u +%Y-%m-%dT%H:%M:%SZ)
|
||||
PREV=$(gh release view nightly --json body -q .body 2>/dev/null \
|
||||
| sed -n 's/^sha=//p' | head -1 || true)
|
||||
if [ "${{ github.event_name }}" = "schedule" ] && [ "$PREV" = "$HEAD" ]; then
|
||||
echo "Skip: HEAD ($HEAD) already published as the latest nightly."
|
||||
echo "should_build=false" >> "$GITHUB_OUTPUT"
|
||||
else
|
||||
echo "Build: $BUILD_ID (event=${{ github.event_name }}, prev=$PREV)"
|
||||
echo "should_build=true" >> "$GITHUB_OUTPUT"
|
||||
fi
|
||||
# Nightly rebuilds unconditionally on schedule. builder.sh re-clones
|
||||
# OpenIPC/firmware at HEAD on every run, so the relevant inputs are
|
||||
# mostly outside this repo (firmware HEAD, toolchain release, kernel
|
||||
# tarball, vendor osdrv, individual package upstreams). The previous
|
||||
# gate skipped when only this repo's HEAD matched the last published
|
||||
# nightly, which made upstream fixes (e.g. an openhisilicon mipi_rx
|
||||
# regression fix that lands in firmware) invisible to users until
|
||||
# something here happened to change. Always build on schedule.
|
||||
echo "Build: $BUILD_ID (event=${{ github.event_name }})"
|
||||
echo "should_build=true" >> "$GITHUB_OUTPUT"
|
||||
echo "head_sha=$HEAD" >> "$GITHUB_OUTPUT"
|
||||
echo "short_sha=$SHORT" >> "$GITHUB_OUTPUT"
|
||||
echo "build_id=$BUILD_ID" >> "$GITHUB_OUTPUT"
|
||||
|
||||
Reference in New Issue
Block a user