whiskers.git / tools / README.md

tools

ScriptWhat
make-cat.pyWrites the ginger cat's twelve SVGs from the SVG set it is given.
make-sounds.pySynthesises the poke and dizzy sound effects as WAV files.
install-android.shInstalls the debug APK on a connected device; configured by environment variables, see its header.
release-apks.shBuilds the three release APKs of one calendar version into ~/whiskers-release/<version>/ (see its header).
run-whiskersd.sh, preflight.shStart the service and check everything the app talks to; both take their addresses from the environment or an argument.
check-private.shFails if a term from your gitignored .private-terms appears in a tracked file.
build-core.shBuilds the Rust core for both Android ABIs, generates the Kotlin bindings and writes the grey cat's drawing (gen-kotlin); Gradle runs it before every build.

Keeping the repository free of private details

Copy nothing personal into a tracked file. To make that checkable, put the terms that must never appear (a child's or family member's name, a hostname, an IP address, a device serial, a user name, a personal path) one per line in .private-terms at the repository root. That file is gitignored and must stay out of git: the terms are exactly what the repository must not contain. tools/check-private.sh greps every tracked file for them (case-insensitive, fixed strings; blank lines and # comments are ignored) and prints file:line for each hit, exiting non-zero. Without the file it says so and passes, because there is nothing to check against; WHISKERS_REQUIRE_PRIVATE_TERMS=1 makes a missing file an error. tools/preflight.sh runs it, and so does a Rust test (whiskers-core's tests/private_terms.rs), so cargo test catches a regression. It skips the vendored third-party/pixel-icons and the icon allowlist, which have to name upstream's icons (a short term matches inside ordinary words there).