-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathMakefile
More file actions
179 lines (144 loc) · 7.08 KB
/
Copy pathMakefile
File metadata and controls
179 lines (144 loc) · 7.08 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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
# Makefile for Beacon Bundle
# All dev targets use the root docker-compose.yml.
COMPOSE_FILE := docker-compose.yml
# Prefer Compose V2 plugin (GitHub Actions / modern Docker Desktop); fall back to docker-compose V1 (REQ-MAKE-010).
COMPOSE_BIN := $(shell docker compose version >/dev/null 2>&1 && echo "docker compose" || echo "docker-compose")
COMPOSE := $(COMPOSE_BIN) -f $(COMPOSE_FILE)
SERVICE_PHP := php
.PHONY: help up down down-dev build shell install ensure-up test test-coverage test-coverage-100 coverage-check coverage-php-percent cs-check cs-fix qa clean release-check release-check-demos composer-sync rector rector-dry phpstan update validate assets setup-hooks check-no-cursor-coauthor check-open-prs strip-cursor-coauthor-from-history check-envelope-goldens demo-smoke
help:
@echo "Beacon Bundle - Development Commands"
@echo ""
@echo "Usage: make <target>"
@echo ""
@echo "Targets:"
@echo " up Start Docker container"
@echo " down Stop Docker container"
@echo " down-dev Stop root container (alias of down; non-destructive)"
@echo " build Rebuild Docker image (no cache)"
@echo " shell Open shell in container"
@echo " install Install Composer dependencies"
@echo " assets No-op (no frontend in this bundle)"
@echo " test Run PHPUnit tests (starts container if needed)"
@echo " test-coverage Run tests with code coverage (starts container if needed)"
@echo " test-coverage-100 Run coverage and fail unless Lines are 100%"
@echo " coverage-check Alias of test-coverage-100"
@echo " cs-check Check code style"
@echo " cs-fix Fix code style"
@echo " rector Apply Rector refactoring"
@echo " rector-dry Run Rector in dry-run mode"
@echo " phpstan Run PHPStan static analysis"
@echo " qa Run all QA checks (cs-check + phpstan + test)"
@echo " release-check Pre-release: git-hygiene, open-PRs, cs, phpstan, coverage, demos"
@echo " demo-smoke Boot demo/symfony8 and assert HTTP 200 (REQ-TEST-011)"
@echo " composer-sync Validate composer.json and align composer.lock (no install)"
@echo " setup-hooks Install git hooks (.githooks, REQ-GIT-001)"
@echo " check-no-cursor-coauthor Fail if Cursor co-author trailers in history"
@echo " check-open-prs Fail if unresolved open GitHub PRs remain (REQ-REL-003)"
@echo " check-envelope-goldens Diff Envelope fixtures vs sibling symfony-beacon"
@echo " clean Remove vendor and cache"
@echo " update Update composer.lock (composer update)"
@echo " validate Run composer validate --strict"
@echo ""
@echo "Demos: make -C demo (when demos exist)"
@echo ""
build:
$(COMPOSE) build --no-cache
up:
$(COMPOSE) build
$(COMPOSE) up -d
@echo "Installing dependencies..."
$(COMPOSE) exec $(SERVICE_PHP) composer install --no-interaction
@echo "✅ Container ready!"
down:
$(COMPOSE) down
down-dev: down
shell:
$(COMPOSE) exec $(SERVICE_PHP) sh
install: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer install
@echo "✅ Dependencies installed."
ensure-up:
@if ! $(COMPOSE) exec -T $(SERVICE_PHP) true 2>/dev/null; then \
echo "Starting container (root $(COMPOSE))..."; \
$(COMPOSE) up -d; \
sleep 3; \
$(COMPOSE) exec -T $(SERVICE_PHP) composer install --no-interaction; \
fi
test: ensure-up
$(COMPOSE) exec $(SERVICE_PHP) composer test
test-coverage: ensure-up
$(COMPOSE) exec $(SERVICE_PHP) composer test-coverage | tee coverage-php.txt
sh .scripts/php-coverage-percent.sh coverage-php.txt
test-coverage-100: ensure-up
$(COMPOSE) exec $(SERVICE_PHP) composer test-coverage
$(COMPOSE) exec $(SERVICE_PHP) php .scripts/coverage-check-100.php
coverage-check: test-coverage-100
cs-check: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer cs-check
cs-fix: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer cs-fix
rector: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer rector
rector-dry: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer rector-dry
phpstan: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer phpstan
qa: ensure-up
$(COMPOSE) exec $(SERVICE_PHP) composer qa
update: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer update --no-interaction
validate: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) composer validate --strict
check-no-cursor-coauthor:
@chmod +x .scripts/check-no-cursor-coauthor.sh
@./.scripts/check-no-cursor-coauthor.sh HEAD
check-open-prs:
@chmod +x .scripts/check-open-prs.sh
@bash .scripts/check-open-prs.sh
check-envelope-goldens:
@chmod +x .scripts/check-envelope-goldens.sh
@./.scripts/check-envelope-goldens.sh
strip-cursor-coauthor-from-history:
@chmod +x .scripts/strip-cursor-coauthor-from-history.sh
@./.scripts/strip-cursor-coauthor-from-history.sh
setup-hooks:
@chmod +x .githooks/commit-msg .githooks/prepare-commit-msg 2>/dev/null || true
@chmod +x .scripts/check-no-cursor-coauthor.sh .scripts/strip-cursor-coauthor-from-history.sh 2>/dev/null || true
@git config core.hooksPath .githooks
@echo "✅ Git hooks installed (.githooks — strips Cursor Co-authored-by / Made-with trailers)."
release-check: check-no-cursor-coauthor check-open-prs ensure-up composer-sync cs-fix cs-check rector-dry phpstan test-coverage release-check-demos
# REQ-TEST-011 — boot demo stack and assert one HTTP 200
demo-smoke:
@$(MAKE) -C demo/symfony8 up
@PORT=$$(grep "^PORT=" demo/symfony8/.env 2>/dev/null | cut -d= -f2 | tr -d '\r'); \
[ -z "$$PORT" ] && PORT=$$(grep "^PORT=" demo/symfony8/.env.example 2>/dev/null | cut -d= -f2 | tr -d '\r'); \
[ -z "$$PORT" ] && PORT=8011; \
echo "Smoke GET http://localhost:$$PORT/"; \
code=000; \
for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15; do \
code=$$(curl -fsS -o /dev/null -w "%{http_code}" "http://localhost:$$PORT/" 2>/dev/null || true); \
if [ "$$code" = "200" ]; then echo "demo-smoke OK (HTTP 200)"; exit 0; fi; \
sleep 2; \
done; \
echo "demo-smoke failed: HTTP $$code"; \
$(MAKE) -C demo/symfony8 logs-tail || true; \
exit 1
release-check-demos:
@if [ -f demo/Makefile ]; then $(MAKE) -C demo release-check; else echo "No demo/Makefile — skip release-check-demos"; fi
composer-sync: ensure-up
@echo "Aligning composer.lock for PHP 8.2 / Symfony 7.x (CI code-style + local install)…"
$(COMPOSE) exec -T $(SERVICE_PHP) composer config platform.php 8.2.32
$(COMPOSE) exec -T $(SERVICE_PHP) composer update --no-install --no-interaction
$(COMPOSE) exec -T $(SERVICE_PHP) composer config --unset platform.php
# Refresh content-hash without platform.php (Composer includes platform in the hash while set).
$(COMPOSE) exec -T $(SERVICE_PHP) composer update --lock --no-install --no-interaction
$(COMPOSE) exec -T $(SERVICE_PHP) composer validate --strict
clean: ensure-up
$(COMPOSE) exec -T $(SERVICE_PHP) sh -c "rm -rf vendor .phpunit.cache coverage coverage.xml .php-cs-fixer.cache"
assets:
@echo "No frontend assets in this bundle."
# REQ-MAKE-008: update-deps (REQ-MAKE-008)
BUNDLE_ROOT := $(abspath $(dir $(lastword $(MAKEFILE_LIST))))
# Optional: monorepo helper absent on standalone GitHub Actions checkout (REQ-MAKE-009).
-include $(BUNDLE_ROOT)/../.scripts/Makefile.update-deps.mk