Fix the stored-archive check: unzip's totals row is not an entry

The rc3 release failed on a correctly-built archive. `unzip -v` ends with a
TOTALS row whose first field is also numeric, so "numeric $1" matched it and the
check read the byte count as a compression method — reporting a fully stored
archive as compressed.

The same noise appeared in my local negative control as a phantom third entry and
I read past it, which is why this reached CI. The method column must look like a
method for the row to be an entry at all.

Verified in both directions: a stored archive passes, a deflated one flags every
member and nothing else.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Uaeo9MvzKoyXuN6ZsbhtkL
This commit is contained in:
ScreenTinker 2026-08-05 11:46:06 -05:00
parent c170861124
commit 3059d8cd5c

View file

@ -103,7 +103,7 @@ if ! unzip -l "$OUT" | grep -qE ' autozip\.brs$'; then
fi
# Prove every entry is STORED. A single deflated member is enough to make the archive unopenable
# on the player, and it is invisible until a deployment fails in the field.
if unzip -v "$OUT" | awk '$1 ~ /^[0-9]+$/ && $2 != "Stored" {print $2}' | grep -q .; then
if unzip -v "$OUT" | awk '$1 ~ /^[0-9]+$/ && $2 ~ /^[A-Za-z]/ && $2 != "Stored" {print $2}' | grep -q .; then
echo "ERROR: archive contains compressed members; BrightSign needs it stored (zip -0)." >&2
unzip -v "$OUT" | sed 's/^/ /' >&2
exit 1