| #!/usr/bin/env bash |
| set -euo pipefail |
|
|
| |
|
|
| echo "π Running pre-commit checks..." |
|
|
| |
| |
| |
| staged_go=$(git diff --cached --name-only --diff-filter=ACM | grep '\.go$' || true) |
| if [ -n "$staged_go" ]; then |
| echo "π¦ Checking Go files..." |
| |
| |
| unformatted=$(gofmt -l $staged_go 2>/dev/null || true) |
| if [ -n "$unformatted" ]; then |
| echo "β gofmt: files not formatted:" |
| echo "$unformatted" |
| echo "Run: gofmt -w $unformatted" |
| exit 1 |
| fi |
|
|
| |
| GOLANGCI_LINT="" |
| if command -v golangci-lint &>/dev/null; then |
| GOLANGCI_LINT="golangci-lint" |
| elif [ -x "${GOPATH:-$HOME/go}/bin/golangci-lint" ]; then |
| GOLANGCI_LINT="${GOPATH:-$HOME/go}/bin/golangci-lint" |
| elif [ -x "$HOME/go/bin/golangci-lint" ]; then |
| GOLANGCI_LINT="$HOME/go/bin/golangci-lint" |
| fi |
|
|
| if [ -n "$GOLANGCI_LINT" ]; then |
| dirs=$(echo "$staged_go" | xargs -n1 dirname | sort -u | sed 's|$|/...|') |
| if ! $GOLANGCI_LINT run --timeout=5m $dirs; then |
| echo "β golangci-lint: issues found" |
| exit 1 |
| fi |
| else |
| echo "β οΈ golangci-lint not found, skipping Go lint" |
| echo " Install: go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@latest" |
| fi |
| |
| echo "β
Go checks passed" |
| fi |
|
|
| |
| |
| |
| staged_web=$(git diff --cached --name-only --diff-filter=ACM | grep '^dashboard/.*\.\(ts\|tsx\|js\|jsx\|css\)$' || true) |
| if [ -n "$staged_web" ]; then |
| echo "π Checking dashboard files..." |
| |
| cd dashboard |
| |
| |
| if ! command -v bun &>/dev/null; then |
| echo "β οΈ bun not found, skipping dashboard checks" |
| cd .. |
| else |
| |
| echo " β TypeScript..." |
| if ! bun run tsc --noEmit 2>/dev/null; then |
| echo "β TypeScript: type errors found" |
| cd .. |
| exit 1 |
| fi |
| |
| |
| echo " β ESLint..." |
| if ! bun run lint 2>/dev/null; then |
| echo "β ESLint: issues found" |
| cd .. |
| exit 1 |
| fi |
| |
| |
| echo " β Prettier..." |
| staged_rel=$(echo "$staged_web" | sed 's|^dashboard/||') |
| if ! echo "$staged_rel" | xargs bunx prettier --check 2>/dev/null; then |
| echo "β Prettier: files not formatted" |
| echo "Run: cd dashboard && bun run format" |
| cd .. |
| exit 1 |
| fi |
| |
| cd .. |
| echo "β
Dashboard checks passed" |
| fi |
| fi |
|
|
| |
| |
| |
| if [ -z "$staged_go" ] && [ -z "$staged_web" ]; then |
| echo "βοΈ No Go or dashboard files staged, skipping checks" |
| fi |
|
|
| echo "β
All pre-commit checks passed" |
|
|