#!/usr/bin/env bash # The checks every push has to pass: formatting, static analysis (infos are fatal too), and # the server's and the app's tests. The pre-push hook runs this script, and so does CI on # every push (.forgejo/workflows/ci.yaml). # # Install the hook in a fresh clone: ln -s ../../tool/check.sh .git/hooks/pre-push # Skip it for one push: git push --no-verify # # It checks the working tree, so uncommitted changes count as well. set -euo pipefail cd "$(git rev-parse --show-toplevel)" if ! git diff --quiet HEAD; then echo 'Note: the working tree has uncommitted changes; they are checked too.' fi # Our own Dart files. Generated code is left out: the client package as a whole, the # server's generated sources and test tools, and the app's localizations (gen-l10n). (A # loop instead of mapfile: macOS ships bash 3.) own=() while IFS= read -r file; do own+=("$file"); done < <( git ls-files '*.dart' | grep -v -E '^halkyon_learn_client/|/lib/src/generated/|/serverpod_test_tools\.dart$|/lib/l10n/app_localizations' ) echo '▸ Formatting' if [ ${#own[@]} -gt 0 ]; then dart format --output=none --set-exit-if-changed "${own[@]}" fi echo '▸ Analysis' dart analyze --fatal-infos echo '▸ Server tests' if git ls-files 'halkyon_learn_server/test/*_test.dart' | grep -q .; then (cd halkyon_learn_server && dart test) else echo 'No server tests yet.' fi echo '▸ App tests' # The sync tests need `serverpod start` running; run them by hand with # `flutter test -t requires-server` in the app package. (cd halkyon_learn_flutter && flutter test -x requires-server) echo '✓ All checks passed.'