mirror of
https://github.com/MHSanaei/3x-ui.git
synced 2026-10-06 06:02:09 +03:00
f843fe5570
Node sync had no test with two real panels: the single-panel tests either call the node's controller in-process or hand-set the node-sync scope, so823db059shipped a regression no test could see (an admin-token node dropped every client and enable flag its master pushed). internal/nodee2e starts a master and a node as separate panel processes (the DB is a process-wide global, so one process cannot be both) and walks 17 operations per enrollment scope (admin token, node-sync token): adopt, create/edit on the master, small and bulk attach, client disable, detach, client delete, inbound disable, traffic pull and reset, node-side delete mirrored centrally (#6219), master-side delete, node down, node-lost inbound re-created, create/edit while down, node disabled on the master, and selected sync mode leaving unselected inbounds alone. Against the build before2ffc694ait fails 6 cells for an admin-token node and 1 for a node-sync one; on main all 34 pass, on Windows and on Linux. `make node-e2e` builds a stub-dist binary and runs it; ci.yml runs it as its own job where a SKIP fails the build. Xray is not started, so cells assert the node's stored state, not traffic through the core.
96 lines
3.1 KiB
Makefile
96 lines
3.1 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: 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: msw-worker-check
|
|
msw-worker-check: ## Verify the tracked worker matches the installed MSW runtime
|
|
cmp $(FRONTEND)/public/mockServiceWorker.js $(FRONTEND)/node_modules/msw/lib/mockServiceWorker.js
|
|
|
|
.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: 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, and the Storybook compile-check.
|
|
.PHONY: verify
|
|
verify: gen-check lint format-check typecheck msw-worker-check test build build-storybook ## Full local gate (mirrors CI)
|
|
@echo "verify: OK"
|