Files
kvitt/tools/git-hooks/pre-commit
T
jacobh2 cab3e935d6 SPEC v0.1 and project rules for Kvitt
Write SPEC.md v0.1 from the owner interview (requirements, data model,
stack, API outline, security, business rules, deployment, milestones,
UX sprint brief, contracts). Fill the CLAUDE.md blanks, move the Gradle
pin files into android/, point the tools at android/ and server/, and
record the git bootstrap exception in the handoff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 20:39:02 +02:00

36 lines
1.7 KiB
Bash
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# Kvitt pre-commit hook: the fast subset of both gates. Installed by tools/install-git-hooks.sh.
# Each check runs only when its project exists, so the hook works on branches before android/ or server/ exist.
set -e
top=$(git rev-parse --show-toplevel)
# Secrets and personal data never reach git (CLAUDE.md › Never commit).
bad=$(git -C "$top" ls-files --cached -- '*local.properties' '*.jks' '*.keystore' '*.p12' '*.aar' 'models/' 'export/' \
'*service-account*.json' '*google-services.json' '*.pem' '*.sqlite' '*.db' 'infra/secrets/' | head -5)
if [ -n "$bad" ]; then
echo "pre-commit: a secret, keystore, vendor binary or personal-data file is staged or tracked:" >&2
echo "$bad" >&2
echo "Unstage with: git rm --cached <file>" >&2
exit 1
fi
# Android: the pure model tests, on the pinned JDK (android/gradle.properties); the shell's java may be a stub.
if [ -x "$top/android/gradlew" ] && [ -d "$top/android/core/model" ]; then
case "$("${JAVA_HOME:+$JAVA_HOME/bin/}java" -version 2>&1 | head -1)" in
*\"25*) ;;
*) [ -d /opt/homebrew/opt/openjdk@25 ] && export JAVA_HOME=/opt/homebrew/opt/openjdk@25/libexec/openjdk.jdk/Contents/Home ;;
esac
(cd "$top/android" && ./gradlew --quiet :core:model:test) || {
echo "pre-commit: Android fast tests failed (see above). Run tools/gradle-serial.sh check for the full picture." >&2
exit 1
}
fi
# Server: the pure domain crate tests.
if [ -f "$top/server/Cargo.toml" ] && [ -d "$top/server/crates/kvitt-domain" ] && command -v cargo >/dev/null 2>&1; then
(cd "$top/server" && cargo test --quiet -p kvitt-domain) || {
echo "pre-commit: kvitt-domain tests failed (see above). Run the server gate for the full picture." >&2
exit 1
}
fi