- SnapshotGalleryTests rendered at displayScale: 2.0 (was native 3.0)
→ 49MB → 15MB (~69% reduction)
- Records via SNAPSHOT_TESTING_RECORD=1 env var (no code edits needed)
- scripts/optimize_goldens.sh runs zopflipng (or pngcrush fallback)
over both iOS and Android golden dirs
- scripts/{record,verify}_snapshots.sh one-command wrappers
- Makefile targets: make {record,verify,optimize}-snapshots
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
84 lines
2.8 KiB
Bash
Executable File
84 lines
2.8 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
#
|
|
# record_snapshots.sh — regenerate every parity-gallery golden in one pass.
|
|
#
|
|
# Use this after an intentional UI change (new color token, redesigned
|
|
# layout, etc.) so the committed baseline matches the new look. Reviewers
|
|
# see the PNG diff alongside your code change in the PR — that dual-diff
|
|
# is the whole point of the parity gallery.
|
|
#
|
|
# Usage
|
|
# -----
|
|
# ./scripts/record_snapshots.sh # iOS + Android
|
|
# ./scripts/record_snapshots.sh --ios-only
|
|
# ./scripts/record_snapshots.sh --android-only
|
|
#
|
|
# Pipeline
|
|
# --------
|
|
# 1. (Android) `./gradlew :composeApp:recordRoborazziDebug`
|
|
# 2. (iOS) Delete iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests,
|
|
# set SNAPSHOT_TESTING_RECORD=1, run xcodebuild test for
|
|
# SnapshotGalleryTests. The env var is read by
|
|
# SnapshotGalleryTests.swift to flip SnapshotTesting.record
|
|
# between `.missing` (default — safe) and `.all` (overwrite).
|
|
# 3. Run `scripts/optimize_goldens.sh` across both golden directories to
|
|
# shrink the fresh PNGs.
|
|
#
|
|
set -euo pipefail
|
|
|
|
cd "$(dirname "$0")/.."
|
|
ROOT="$(pwd)"
|
|
|
|
platform="both"
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--ios-only) platform="ios" ;;
|
|
--android-only) platform="android" ;;
|
|
-h|--help)
|
|
sed -n '3,18p' "$0"
|
|
exit 0
|
|
;;
|
|
*)
|
|
echo "usage: $0 [--ios-only|--android-only]" >&2
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# ---------- Android ----------
|
|
if [ "$platform" = "both" ] || [ "$platform" = "android" ]; then
|
|
echo "==> Recording Android goldens…"
|
|
./gradlew :composeApp:recordRoborazziDebug
|
|
fi
|
|
|
|
# ---------- iOS ----------
|
|
if [ "$platform" = "both" ] || [ "$platform" = "ios" ]; then
|
|
echo "==> Recording iOS goldens…"
|
|
rm -rf iosApp/HoneyDueTests/__Snapshots__/SnapshotGalleryTests
|
|
(
|
|
cd iosApp
|
|
# SNAPSHOT_TESTING_RECORD=1 flips SnapshotTesting.isRecording to
|
|
# `.all` (see SnapshotGalleryTests.swift).
|
|
SNAPSHOT_TESTING_RECORD=1 xcodebuild test \
|
|
-project honeyDue.xcodeproj \
|
|
-scheme HoneyDue \
|
|
-destination "${IOS_SIM_DESTINATION:-platform=iOS Simulator,name=iPhone 17,OS=latest}" \
|
|
-only-testing:HoneyDueTests/SnapshotGalleryTests \
|
|
2>&1 | tail -30
|
|
)
|
|
fi
|
|
|
|
# ---------- Optimize ----------
|
|
echo "==> Optimizing PNGs…"
|
|
"$ROOT/scripts/optimize_goldens.sh"
|
|
|
|
# ---------- Parity HTML (P4 follow-up) ----------
|
|
if [ -x "$ROOT/scripts/build_parity_gallery.py" ]; then
|
|
echo "==> Regenerating parity HTML gallery…"
|
|
python3 "$ROOT/scripts/build_parity_gallery.py"
|
|
else
|
|
echo "==> (parity HTML generator not yet present — skipping)"
|
|
fi
|
|
|
|
echo "==> Done. Review the PNG diff with your code change before committing."
|