tools
| Script | What |
|---|---|
make-cat.py | Writes the ginger cat's twelve SVGs from the SVG set it is given. |
make-sounds.py | Synthesises the poke and dizzy sound effects as WAV files. |
install-android.sh | Installs the debug APK on a connected device; configured by environment variables, see its header. |
release-apks.sh | Builds the three release APKs of one calendar version into ~/whiskers-release/<version>/ (see its header). |
run-whiskersd.sh, preflight.sh | Start the service and check everything the app talks to; both take their addresses from the environment or an argument. |
check-private.sh | Fails if a term from your gitignored .private-terms appears in a tracked file. |
build-core.sh | Builds 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).