mirror of
https://github.com/coder/coder.git
synced 2026-06-02 20:48:20 +00:00
feat: smart file-based target selection for scripts/githooks (#23358)
Pre-commit classifies staged files and runs make pre-commit-light when no Go, TypeScript, or Makefile changes are present. This skips gen, lint/go, lint/ts, fmt/go, fmt/ts, and the binary build. A markdown-only commit takes seconds instead of minutes. Pre-push uses the same heuristic: if only light files changed (docs, shell, terraform, etc.), tests are skipped entirely. Falls back to the full make targets when Go/TS/Makefile changes are detected, CODER_HOOK_RUN_ALL=1 is set, or the diff range can't be determined. Also adds test-storybook to make pre-push (vitest with the storybook project in Playwright browser mode).
This commit is contained in:
committed by
GitHub
parent
03a1653324
commit
23542cb6af
@@ -522,6 +522,10 @@ RESET := $(shell tput sgr0 2>/dev/null)
|
||||
fmt: fmt/ts fmt/go fmt/terraform fmt/shfmt fmt/biome fmt/markdown
|
||||
.PHONY: fmt
|
||||
|
||||
# Subset of fmt that does not require Go or Node toolchains.
|
||||
fmt-light: fmt/shfmt fmt/terraform fmt/markdown
|
||||
.PHONY: fmt-light
|
||||
|
||||
fmt/go:
|
||||
ifdef FILE
|
||||
# Format single file
|
||||
@@ -629,6 +633,10 @@ LINT_ACTIONS_TARGETS := $(if $(CI),,lint/actions/actionlint)
|
||||
lint: lint/shellcheck lint/go lint/ts lint/examples lint/helm lint/site-icons lint/markdown lint/check-scopes lint/migrations lint/bootstrap $(LINT_ACTIONS_TARGETS)
|
||||
.PHONY: lint
|
||||
|
||||
# Subset of lint that does not require Go or Node toolchains.
|
||||
lint-light: lint/shellcheck lint/markdown lint/helm lint/bootstrap lint/migrations lint/actions/actionlint lint/typos
|
||||
.PHONY: lint-light
|
||||
|
||||
lint/site-icons:
|
||||
./scripts/check_site_icons.sh
|
||||
.PHONY: lint/site-icons
|
||||
@@ -771,6 +779,25 @@ pre-commit:
|
||||
echo "$(GREEN)✓ pre-commit passed$(RESET) ($$(( $$(date +%s) - $$start ))s)"
|
||||
.PHONY: pre-commit
|
||||
|
||||
# Lightweight pre-commit for changes that don't touch Go or
|
||||
# TypeScript. Skips gen, lint/go, lint/ts, fmt/go, fmt/ts, and
|
||||
# the binary build. Used by the pre-commit hook when only docs,
|
||||
# shell, terraform, helm, or other fast-to-check files changed.
|
||||
pre-commit-light:
|
||||
start=$$(date +%s)
|
||||
logdir=$$(mktemp -d "$${TMPDIR:-/tmp}/coder-pre-commit-light.XXXXXX")
|
||||
echo "$(BOLD)pre-commit-light$(RESET) ($$logdir)"
|
||||
echo "fmt:"
|
||||
$(MAKE) --no-print-directory -j$(PARALLEL_JOBS) MAKE_TIMED=1 MAKE_LOGDIR=$$logdir fmt-light
|
||||
$(check-unstaged)
|
||||
echo "lint:"
|
||||
$(MAKE) --no-print-directory -j$(PARALLEL_JOBS) MAKE_TIMED=1 MAKE_LOGDIR=$$logdir lint-light
|
||||
$(check-unstaged)
|
||||
$(check-untracked)
|
||||
rm -rf $$logdir
|
||||
echo "$(GREEN)✓ pre-commit-light passed$(RESET) ($$(( $$(date +%s) - $$start ))s)"
|
||||
.PHONY: pre-commit-light
|
||||
|
||||
pre-push:
|
||||
start=$$(date +%s)
|
||||
logdir=$$(mktemp -d "$${TMPDIR:-/tmp}/coder-pre-push.XXXXXX")
|
||||
@@ -779,6 +806,7 @@ pre-push:
|
||||
$(MAKE) --no-print-directory -j$(PARALLEL_JOBS) MAKE_TIMED=1 MAKE_LOGDIR=$$logdir \
|
||||
test \
|
||||
test-js \
|
||||
test-storybook \
|
||||
site/out/index.html
|
||||
rm -rf $$logdir
|
||||
echo "$(GREEN)✓ pre-push passed$(RESET) ($$(( $$(date +%s) - $$start ))s)"
|
||||
@@ -1313,6 +1341,11 @@ test-js: site/node_modules/.installed
|
||||
pnpm test:ci
|
||||
.PHONY: test-js
|
||||
|
||||
test-storybook: site/node_modules/.installed
|
||||
cd site/
|
||||
pnpm exec vitest run --project=storybook
|
||||
.PHONY: test-storybook
|
||||
|
||||
# sqlc-cloud-is-setup will fail if no SQLc auth token is set. Use this as a
|
||||
# dependency for any sqlc-cloud related targets.
|
||||
sqlc-cloud-is-setup:
|
||||
|
||||
Reference in New Issue
Block a user