Files
3x-ui/Makefile
T
25f2002654 e8feb9d641 ci: run the Postgres suites that never ran and lint the shell (#6917)
Eight Postgres-only tests skipped everywhere because no workflow named
them. The durable-first job now runs the service and outbound ones, and a
scratch-database job runs the migration tests that drop their own tables.
Every Postgres step counts top-level passes, so a renamed test cannot
leave a step green.

A shell-lint job runs actionlint on the workflows and shellcheck on the
shipped scripts (the legacy installers at error severity), golangci-lint
is pinned, and both the codegen job and make verify fail when
docs/public/openapi.json drifts from the panel's spec; docs-ci also fails
on a stale API reference. npm audit moves to its own script outside make
verify, since it depends on the network.
2026-10-24 19:55:23 +02:00

103 lines
3.3 KiB
Makefile

# Canonical task runner. Mirrors .github/workflows/ci.yml so `make verify`
# reproduces the PR gate locally. Run `make help` for the list.
SHELL := bash
GO_PKGS = $(shell go list ./... | grep -v '/frontend/node_modules/')
FRONTEND = frontend
.DEFAULT_GOAL := help
.PHONY: help
help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
awk 'BEGIN {FS = ":.*?## "}; {printf " %-14s %s\n", $$1, $$2}'
# go:embed of internal/web/dist needs the dir to exist even when the
# frontend bundle has not been built. CI stubs it the same way.
.PHONY: dist-stub
dist-stub:
@mkdir -p internal/web/dist && touch internal/web/dist/.gitkeep
.PHONY: gen
gen: ## Regenerate Zod schemas + OpenAPI from Go sources
cd $(FRONTEND) && npm run gen
.PHONY: gen-check
gen-check: gen ## Fail if generated files are stale
git diff --exit-code -- frontend/src/generated frontend/public/openapi.json
.PHONY: lint-go
lint-go: dist-stub ## golangci-lint on Go sources
golangci-lint run
.PHONY: lint-fe
lint-fe: ## oxlint on frontend sources
cd $(FRONTEND) && npm run lint
.PHONY: audit-fe
audit-fe: ## Audit the frontend's production dependencies (needs the network)
cd $(FRONTEND) && npm run audit
.PHONY: lint
lint: lint-go lint-fe ## All linters
.PHONY: format-check
format-check: ## oxfmt in check mode on frontend sources
cd $(FRONTEND) && npm run format:check
.PHONY: typecheck
typecheck: ## tsc --noEmit
cd $(FRONTEND) && npm run typecheck
.PHONY: test-go
test-go: dist-stub ## Go tests (shuffle, no cache)
go test -shuffle=on -count=1 $(GO_PKGS)
.PHONY: race
# internal/web/service runs ~10x slower under -race and overruns go test's 10m default.
race: dist-stub ## Go tests with the race detector (needs a C compiler)
go test -race -shuffle=on -count=1 -timeout 25m $(GO_PKGS)
.PHONY: node-e2e
# Two real panel processes (master + node); test-go only runs nodee2e as a skip.
NODE_E2E_BIN = $(CURDIR)/.cache/node-e2e/x-ui$(shell go env GOEXE)
node-e2e: dist-stub ## Master+node sync end to end with two real panel processes
go build -o $(NODE_E2E_BIN) .
XUI_NODE_E2E_BINARY=$(NODE_E2E_BIN) go test -count=1 -timeout 20m -v ./internal/nodee2e/
.PHONY: test-fe
test-fe: ## Frontend tests (vitest)
cd $(FRONTEND) && npm test
.PHONY: test
test: test-go test-fe ## All tests
.PHONY: vulncheck
vulncheck: dist-stub ## govulncheck
go run golang.org/x/vuln/cmd/govulncheck@latest ./...
.PHONY: docs-openapi-check
docs-openapi-check: ## Fail if the docs OpenAPI spec is not the panel's
cmp frontend/public/openapi.json docs/public/openapi.json
.PHONY: build-fe
build-fe: ## Build the Vite bundles into internal/web/dist
cd $(FRONTEND) && npm run build
.PHONY: build
build: build-fe ## Build the frontend then the Go binary
go build ./...
.PHONY: build-storybook
build-storybook: ## Build the static Storybook (compile-checks all stories)
cd $(FRONTEND) && npm run build-storybook
# The PR gate. Matches ci.yml: codegen freshness, both linters, the formatter,
# typecheck, both test suites, a full build, the Storybook compile-check and the
# docs spec check. The dependency audit is a separate target: it needs the
# network and a live advisory database, so an unchanged commit could pass today
# and fail tomorrow.
.PHONY: verify
verify: gen-check lint format-check typecheck test build build-storybook docs-openapi-check ## Full local gate (mirrors CI)
@echo "verify: OK"