diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..381241f --- /dev/null +++ b/Makefile @@ -0,0 +1,41 @@ +.PHONY: test lint fmt fmt-check check build dev clean docker hooks + +# Use `timeout` (GNU coreutils) when available so `make test` is hard-capped. +# On macOS without coreutils this is empty and the cap is skipped. +TIMEOUT := $(shell command -v timeout 2>/dev/null || command -v gtimeout 2>/dev/null) + +YARN := yarn run + +test: + @$(TIMEOUT) $(if $(TIMEOUT),30s,) $(YARN) vitest run --reporter=dot || \ + { echo "--- Rerunning with verbose for details ---"; \ + $(YARN) vitest run --reporter=verbose; exit 1; } + +lint: + @$(YARN) eslint . + @$(YARN) prettier --check . + +fmt: + @$(YARN) prettier --write . + +fmt-check: + @$(YARN) prettier --check . + +check: test lint fmt-check + +build: + @$(YARN) tsc + +dev: + @$(YARN) tsc --watch + +clean: + @rm -rf dist coverage .vitest-cache *.tsbuildinfo + +docker: + docker build -t quack . + +hooks: + @printf '#!/bin/sh\nset -e\nmake check\n' > .git/hooks/pre-commit + @chmod +x .git/hooks/pre-commit + @echo "Installed pre-commit hook (runs make check)."