Files
data-platform/Makefile
2026-03-04 14:56:14 +00:00

126 lines
5.3 KiB
Makefile
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.

.PHONY: help install sync build up down restart logs ps \
build-code reload-code reload-usercode \
dbt-parse dbt-run dbt-test dbt-build dbt-seed dbt-clean dbt-deps dbt-docs \
dagster-dev \
lint lint-fix lint-python lint-sql lint-format \
pre-commit pre-commit-install \
test clean
# Default Docker Compose project containers
COMPOSE := docker compose
DBT_DIR := dbt
DBT := uv run dbt
# Container(s) that carry user code
CODE_SERVICES := dagster-usercode
## —— Help ——————————————————————————————————————————————————————
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*##' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*## "}; {printf " \033[36m%-18s\033[0m %s\n", $$1, $$2}'
## —— Python / uv ——————————————————————————————————————————————
install: ## Install all dependencies (including dev) with uv
uv sync
sync: install ## Alias for install
## —— Docker Compose ———————————————————————————————————————————
build: ## Build all Docker images
$(COMPOSE) build
up: ## Start all services in the background
$(COMPOSE) up -d
down: ## Stop and remove all services
$(COMPOSE) down
restart: ## Restart all services
$(COMPOSE) restart
logs: ## Tail logs for all services (ctrl-c to quit)
$(COMPOSE) logs -f
ps: ## Show running containers
$(COMPOSE) ps
## —— User-code container shortcuts ————————————————————————————
build-code: ## Rebuild only the user-code containers
$(COMPOSE) build $(CODE_SERVICES)
reload-code: ## Rebuild and restart the user-code containers (no downtime for postgres)
$(COMPOSE) build $(CODE_SERVICES)
$(COMPOSE) up -d --no-deps $(CODE_SERVICES)
reload-usercode: ## Rebuild and restart only the gRPC usercode server
$(COMPOSE) build dagster-usercode
$(COMPOSE) up -d --no-deps --force-recreate dagster-usercode
## —— dbt (local, via uv) —————————————————————————————————————
dbt-parse: ## Parse the dbt project and generate manifest.json
$(DBT) parse --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-run: ## Run all dbt models
$(DBT) run --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-test: ## Run dbt tests
$(DBT) test --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-build: ## Run dbt build (run + test + snapshot + seed)
$(DBT) build --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-seed: ## Load dbt seed files
$(DBT) seed --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-clean: ## Clean dbt target and packages directories
$(DBT) clean --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-deps: ## Install dbt packages
$(DBT) deps --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
dbt-docs: ## Generate and serve dbt docs
$(DBT) docs generate --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
$(DBT) docs serve --project-dir $(DBT_DIR) --profiles-dir $(DBT_DIR)
## —— Dagster (local dev) —————————————————————————————————————
dagster-dev: ## Start Dagster webserver locally for development
uv run dagster dev
## —— Quality ──────────────────────────────────────────────────
lint: lint-python lint-sql lint-format ## Run all linters (ruff + sqlfluff + prettier)
lint-python: ## Ruff lint + format check
uv run ruff check .
uv run ruff format --check .
lint-sql: ## SQLFluff lint on dbt/models
uv run sqlfluff lint dbt/models --dialect postgres
lint-format: ## Prettier check (YAML / Markdown)
npx --yes prettier --check "**/*.yml" "**/*.yaml" "**/*.md" \
--ignore-path .prettierignore
lint-fix: ## Auto-fix all linters (ruff + sqlfluff + prettier)
uv run ruff check --fix .
uv run ruff format .
uv run sqlfluff fix dbt/models --dialect postgres
npx --yes prettier --write "**/*.yml" "**/*.yaml" "**/*.md" \
--ignore-path .prettierignore
## —— Pre-commit ────────────────────────────────────────────────
pre-commit-install: ## Install pre-commit hooks into .git/hooks
uv run pre-commit install
pre-commit: ## Run all pre-commit hooks against all files
uv run pre-commit run --all-files
validate: ## Validate Dagster definitions load without errors
uv run python -c "from data_platform.definitions import defs; specs = list(defs.resolve_all_asset_specs()) if hasattr(defs, 'resolve_all_asset_specs') else list(defs.get_all_asset_specs()); print(f'OK {len(specs)} assets, {len(defs.jobs or [])} jobs, {len(defs.schedules or [])} schedules')"
test: ## Run pytest
uv run pytest
## —— Misc —————————————————————————————————————————————————————
clean: ## Remove Python caches and build artefacts
find . -type d -name __pycache__ -exec rm -rf {} + 2>/dev/null || true
rm -rf .pytest_cache dist *.egg-info