Repository navigation
Expand file tree
/
Copy pathMakefile
More file actions
120 lines (96 loc) · 5.69 KB
/
Copy pathMakefile
File metadata and controls
120 lines (96 loc) · 5.69 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# Makefile платформы LectureLog (web).
# Цели обёрнуты вокруг стандартного go-тулчейна и генерации coreclient из спеки ядра.
.PHONY: generate build vet test gate sync-spec migrate-test templ tailwind-bin tailwind web-gen gen-check up up-stub down dev watch prod prod-down
# ─── Toolchain web-слоя ────────────────────────────────────────────────────────
# Версия Tailwind CLI (standalone, без node). Менять здесь при обновлении.
TAILWIND_VERSION := 4.1.10
TAILWIND_BIN := ./bin/tailwindcss
# Генерация templ-компонентов (через tool-директиву go.mod).
# Запускаем из каталога пакета, чтобы FileName в *_templ.go был коротким ("layout.templ"),
# совпадая с выводом go generate ./... → однозначный детерминированный артефакт.
templ:
cd internal/web && go tool templ generate
# Скачивание Tailwind standalone CLI в ./bin/ (gitignored).
# Бинарь нужен только при пересборке CSS; сам app.css коммитится.
tailwind-bin:
@mkdir -p ./bin
@if [ ! -f $(TAILWIND_BIN) ]; then \
echo "Скачиваю Tailwind CLI v$(TAILWIND_VERSION)..."; \
curl -fsSL \
"https://github.com/tailwindlabs/tailwindcss/releases/download/v$(TAILWIND_VERSION)/tailwindcss-linux-x64" \
-o $(TAILWIND_BIN); \
chmod +x $(TAILWIND_BIN); \
echo "Tailwind CLI скачан: $(TAILWIND_BIN)"; \
else \
echo "Tailwind CLI уже есть: $(TAILWIND_BIN)"; \
fi
# Сборка CSS: токены + Tailwind utility-классы → static/css/app.css.
# Tailwind v4 использует CSS-first конфиг (@theme в tailwind.css), не tailwind.config.js.
# Запускается только при пересборке; собранный app.css коммитится.
tailwind: tailwind-bin
$(TAILWIND_BIN) \
-i internal/web/assets/tailwind.css \
-o internal/web/static/css/app.css \
--minify
# web-gen: полная генерация web-слоя (templ + Tailwind).
web-gen: templ tailwind
# gen-check: проверяет, что генерация детерминирована (артефакты не изменились).
# Используется в CI / gate для проверки синхронности исходников и артефактов.
gen-check: web-gen
git diff --exit-code -- internal/web/
# ─── Стандартные цели ──────────────────────────────────────────────────────────
# Поднять только локальный Postgres платформы. Ядро и его MinIO запускаются отдельно.
up:
docker compose up -d postgres
# Поднять Postgres и MinIO-заглушку ядра для разработки без реального ядра.
up-stub:
docker compose --profile stub-minio up -d
# Остановить локальные сервисы платформы.
down:
docker compose down
# Запустить сервер; .env подгружается точкой входа автоматически.
dev: up
go run ./cmd/server
# Дизайн-превью: все страницы web-слоя с фиктивными данными, без БД/ядра/OAuth.
# http://localhost:8901 (см. cmd/preview/main.go).
preview:
go run ./cmd/preview
# Горячая перезагрузка Go-кода. Если air не установлен, запускается через go run
# без добавления инструмента разработки в go.mod. templ и CSS генерируются вручную.
watch:
@if command -v air >/dev/null 2>&1; then \
air; \
else \
go run github.com/air-verse/air@latest; \
fi
# Собрать и поднять production-окружение одной командой: web + Postgres.
prod:
docker compose -f docker-compose.prod.yml up -d --build
# Остановить production-окружение.
prod-down:
docker compose -f docker-compose.prod.yml down
# Генерация coreclient: нормализация спеки (3.1.0 -> 3.0-nullable) + oapi-codegen.
# Сам процесс описан в //go:generate директивах internal/coreclient/generate.go.
generate:
go generate ./...
# Сборка всего модуля. Перед сборкой обязательна генерация gen.go из спеки.
build: generate
go build ./...
# Статический анализ.
vet:
go vet ./...
# Прогон тестов (юнит + контрактный smoke к замоканному ядру).
test:
go test ./...
# GATE C0: web-генерация (templ+tailwind) + сборка + vet + тесты.
gate: web-gen generate
go build ./... && go vet ./... && go test ./...
# GATE C0: интеграционная проверка применения DDL-миграций против реального Postgres
# (поднимается через testcontainers; требует запущенного Docker).
migrate-test:
go test -tags=integration ./internal/db/...
# Обновить вендоренную копию спеки ядра из соседнего репозитория core.
# ВАЖНО: после sync-spec обязательно `make generate` и ревью diff в internal/coreclient/gen.go,
# чтобы поймать рассинхрон контракта.
sync-spec:
cp ../lecturelog-core/docs/openapi.json internal/coreclient/openapi.json