Files
forgefirm/meta-forgefirm/recipes-forgefirm/forgetest/forgetest.bb
T
ScottW514 88ec984e28 Audit follow-through: runbook, bench tools, recipes, release tooling
BRINGUP describes the present: the 54-test catalog and its seven-test
always core, the tier counts, the shipped low-temperature gates, the
density floor ($35 = 10), the two local core commits, the ffboot env
write, the aa-offset route, the current bench image, and the bench
measurements the audit asks for (pooled into the next session). The
workstation shell notes and every em dash are gone.

forgetest: the takeover waits for the cloud client too (found by its
command line); the unauthenticated /boot probe names the endpoint's
parameter; the UI prose is American English. Recipes: forgetest
fetches its package directory and init script only and drops
__pycache__ at unpack; the dev image no longer re-adds forgectrl; the
release image's remove list drops the gfui-client the BSP no longer
has; the platform identity strips the kernel's local-version hash
from the modules directory name, so a re-patched kernel keeps its
fingerprints. grblhal restart is stop then start. release.sh --dev
packs the dev image. fixture.sh refuses a readable env file.

Bench tools: the live-fire drills measure the lid-IR baseline before
every run and point at the fire-watch thresholds the engine reads;
one thermistor conversion (gfbench.degc) serves every drill; the six
dated measurement records leave the tool directory; feeder.c names the
two sysfs writes its caller makes.

Host tests: forgetest 258 pass; the coverage lint reports no uncovered
path across 54 tests. Acceptance: forgectrl.auth covers the /boot
probe; update.* cover ffboot and the manifest identity; the runbook
and bench-tool changes have no catalog consequence.
2026-09-02 09:51:23 -04:00

84 lines
3.4 KiB
BlitzBasic

SUMMARY = "ForgeFIRM release acceptance tool (dev image)"
DESCRIPTION = "Runs the release acceptance catalog against the machine from a \
self-contained web page (HTTP :8090), keeps the append-only result log under \
/data/forgetest, exports the release artifact the release gate reads, and \
carries the bench diagnostics page. Installed only on the dev image."
HOMEPAGE = "https://github.com/openglow-org/forgefirm"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/MIT;md5=0835ade698e0bcf8506ecda2f7b4f302"
# The tool's canonical home is forgetest/ in this repo; the bench scripts
# it drives live in scripts/bench/. Both are packaged from the same tree
# that builds the images, so the catalog and the gate agree by construction.
FILESEXTRAPATHS:prepend := "${THISDIR}/../../../:"
# The package directory and the init script, not the tool's whole tree: the
# host unit tests and their caches would otherwise enter the fetch checksum
# and rebuild the dev image after a workstation test run.
SRC_URI = " \
file://forgetest/forgetest/ \
file://forgetest/forgetest.init \
file://scripts/bench/ \
"
do_unpack:append() {
import subprocess
subprocess.call(['find', d.getVar('WORKDIR') + '/forgetest', d.getVar('WORKDIR') + '/scripts',
'-name', '__pycache__', '-type', 'd', '-prune', '-exec', 'rm', '-rf', '{}', '+'])
}
S = "${WORKDIR}"
inherit python3-dir update-rc.d forgefirm-manifest
# Non-git sources: fingerprint the package directory (dev-only component;
# it identifies the campaign, never a test fingerprint).
FORGEFIRM_MANIFEST_SRC = "${WORKDIR}/forgetest/forgetest"
# The standard-library packages the tool imports (the page server, the
# catalog, the bench scripts), not the python3 meta-package: the dev image
# must carry no module the release image lacks, or a missing module in
# the release rootfs would pass the campaign unseen.
RDEPENDS:${PN} = " \
python3-core \
python3-compression \
python3-crypt \
python3-fcntl \
python3-io \
python3-json \
python3-logging \
python3-math \
python3-netclient \
python3-netserver \
python3-shell \
python3-statistics \
forgectrl \
"
INITSCRIPT_NAME = "forgetest"
INITSCRIPT_PARAMS = "start 95 2 3 4 5 . stop 70 0 1 6 ."
do_install() {
# the package (sources only; python compiles on first import)
for f in $(cd ${WORKDIR}/forgetest/forgetest && find . -name '*.py' -type f); do
install -Dm 0644 ${WORKDIR}/forgetest/forgetest/$f \
${D}${PYTHON_SITEPACKAGES_DIR}/forgetest/$f
done
# the page's sources (ui/), gzipped: page.py inflates them once at
# first request, and bytes here are bytes on the ext4 rootfs
for f in $(cd ${WORKDIR}/forgetest/forgetest/ui && find . -type f); do
install -d ${D}${PYTHON_SITEPACKAGES_DIR}/forgetest/ui/$(dirname $f)
gzip -9 -n -c ${WORKDIR}/forgetest/forgetest/ui/$f \
> ${D}${PYTHON_SITEPACKAGES_DIR}/forgetest/ui/$f.gz
chmod 0644 ${D}${PYTHON_SITEPACKAGES_DIR}/forgetest/ui/$f.gz
done
# the bench scripts the #bench tab drives
install -d ${D}${datadir}/forgetest/bench
for f in ${WORKDIR}/scripts/bench/*.py; do
install -m 0755 $f ${D}${datadir}/forgetest/bench/
done
install -Dm 0755 ${WORKDIR}/forgetest/forgetest.init ${D}${sysconfdir}/init.d/forgetest
}
FILES:${PN} += "${PYTHON_SITEPACKAGES_DIR}/forgetest ${datadir}/forgetest"