11.PHONY : help install tidy build run test lint fmt check sec scan sbom \
22 image start stop restart logs stats delete rm kill-port redo \
3- openapi-gen openapi-check
3+ openapi-gen openapi-merge openapi- check openapi-sync
44
55# ============================================================
66# Default values
3636 @echo " make fmt Format code (gofmt, prettier)"
3737 @echo " make check Format + lint in one step (local dev)"
3838 @echo " make openapi-gen Auto-generate OpenAPI spec skeleton from route source"
39+ @echo " make openapi-merge Merge ext-api.yaml + native-api.yaml -> api.yaml"
3940 @echo " make openapi-check Assert all /api/ext routes are in the spec (CI gate)"
41+ @echo " make openapi-sync Generate + validate OpenAPI in one command"
4042 @echo " make sec Security scan (govulncheck, npm audit, gitleaks)"
4143 @echo " make scan Container image scan (trivy, HIGH/CRITICAL)"
4244 @echo " make sbom Generate SBOM → sbom.spdx.json (syft)"
@@ -140,7 +142,7 @@ tidy:
140142build :
141143ifeq ($(ARG2 ) ,backend)
142144 @echo "Building backend (static binary, no dependencies)..."
143- @$(MAKE) openapi-gen
145+ @$(MAKE) openapi-sync
144146 @cd backend && CGO_ENABLED=0 go build -ldflags="-w -s" -o appos ./cmd/appos
145147 @echo "✓ Backend built → backend/appos (statically linked)"
146148else ifeq ($(ARG2),dashboard)
@@ -151,7 +153,7 @@ else ifeq ($(ARG2),library)
151153 @echo "'make build library' is no longer needed - library is downloaded during Docker build (cached)"
152154else
153155 @echo "Building all..."
154- @$(MAKE) openapi-gen
156+ @$(MAKE) openapi-sync
155157 @cd backend && CGO_ENABLED=0 go build -ldflags="-w -s" -o appos ./cmd/appos
156158 @echo "✓ Backend built → backend/appos"
157159 @cd dashboard && npm run build
@@ -183,11 +185,11 @@ test:
183185 @echo " Running tests..."
184186 @if [ -f " backend/go.mod" ]; then \
185187 echo " → Go tests..." ; \
186- cd backend && go test ./... -v || true ; \
188+ cd backend && go test ./... -v; \
187189 fi
188190 @if [ -f " dashboard/package.json" ]; then \
189191 echo " → JS tests..." ; \
190- cd dashboard && npm test 2> /dev/null || true ; \
192+ cd dashboard && npm test 2> /dev/null; \
191193 fi
192194 @echo " ✓ Tests completed"
193195
@@ -207,14 +209,26 @@ lint:
207209 @echo " ✓ Linting completed"
208210
209211openapi-gen :
210- @echo " Generating OpenAPI spec skeleton from route source..."
211- @go run backend /cmd/gen- openapi/main.go
212+ @echo " Generating OpenAPI ext spec from route source..."
213+ @cd backend && go run . /cmd/openapi gen
212214 @echo " → spec: backend/docs/openapi/ext-api.yaml"
213215
216+ openapi-merge :
217+ @echo " Merging OpenAPI specs (ext + native)..."
218+ @cd backend && go run ./cmd/openapi merge
219+ @echo " → spec: backend/docs/openapi/api.yaml"
220+
214221openapi-check :
215222 @echo " Checking all /api/ext routes are covered by OpenAPI spec..."
216223 @cd backend && go test ./internal/routes/ -run TestAllExtRoutesCoveredByOpenAPISpec -v
217224
225+ openapi-sync :
226+ @echo " Syncing OpenAPI spec (generate + merge + validate)..."
227+ @$(MAKE ) openapi-gen
228+ @$(MAKE ) openapi-merge
229+ @$(MAKE ) openapi-check
230+ @echo " ✓ OpenAPI sync completed"
231+
218232fmt :
219233 @echo " Formatting code..."
220234 @if [ -f " backend/go.mod" ]; then \
0 commit comments