thread-master/apps/backend/Makefile

84 lines
3.0 KiB
Makefile
Raw Normal View History

2026-07-10 12:54:45 +00:00
# 只保留會重複打的指令;其餘直接 go / migrate。
2026-07-13 08:59:13 +00:00
.PHONY: build test test-integration gen-api tidy migrate-up migrate-down init seeder \
start stop restart crawler-install crawler crawler-start crawler-stop crawler-restart
RUNTIME_DIR ?= /tmp/haixun
2026-07-10 12:54:45 +00:00
build:
go build -o bin/gateway .
go build -o bin/worker ./cmd/worker
2026-07-13 08:59:13 +00:00
go build -o bin/init ./cmd/init
go build -o bin/seeder ./cmd/seeder
2026-07-10 12:54:45 +00:00
test:
go test ./...
2026-07-13 01:15:30 +00:00
# M1M5 integration gates
test-integration:
go test ./internal/module/member/usecase/ ./internal/middleware/ \
./internal/module/threads/... ./internal/module/job/... ./internal/module/appnotif/... \
./internal/module/usage/... ./internal/module/ai/... ./internal/module/search/... \
./internal/module/permission/... ./internal/module/studio/... \
./internal/module/inspire/... ./internal/module/scout/... \
./internal/logic/extension/ ./internal/logic/media/ \
-count=1 -timeout 180s
2026-07-10 12:54:45 +00:00
# 改 generate/api/*.api 後執行handler 勿手寫
gen-api:
goctl api go -api generate/api/gateway.api -dir . -style go_zero --home generate/goctl
tidy:
go mod tidy
# DB檔案在 generate/database/mongo需本機已裝 migratemongodb tag
# 例MONGO_URL=mongodb://127.0.0.1:27017/haixun
MONGO_URL ?= mongodb://127.0.0.1:27017/haixun
migrate-up:
migrate -path generate/database/mongo -database "$(MONGO_URL)" up
migrate-down:
migrate -path generate/database/mongo -database "$(MONGO_URL)" down 1
2026-07-13 08:59:13 +00:00
init:
go run ./cmd/init -f etc/gateway.yaml
seeder:
go run ./cmd/seeder -f etc/gateway.yaml
crawler-install:
cd crawler && npm install && npx playwright install --with-deps chromium
# Requires SCOUT_CRAWLER_TOKEN equal to Scout.CrawlerToken in gateway.yaml.
crawler:
cd crawler && npm run start
# Local service lifecycle. Logs and PID files stay outside the worktree.
start: build
@mkdir -p "$(RUNTIME_DIR)"
@nohup "$(CURDIR)/bin/gateway" -f "$(CURDIR)/etc/gateway.yaml" >"$(RUNTIME_DIR)/gateway.log" 2>&1 & printf '%s\n' $$! >"$(RUNTIME_DIR)/gateway.pid"
@nohup "$(CURDIR)/bin/worker" -f "$(CURDIR)/etc/gateway.yaml" >"$(RUNTIME_DIR)/worker.log" 2>&1 & printf '%s\n' $$! >"$(RUNTIME_DIR)/worker.pid"
stop:
@for service in gateway worker; do \
pidfile="$(RUNTIME_DIR)/$$service.pid"; \
if [ -f "$$pidfile" ] && kill -0 "$$(cat "$$pidfile")" 2>/dev/null; then kill "$$(cat "$$pidfile")"; fi; \
rm -f "$$pidfile"; \
done
restart: stop start
# The crawler token must come from the private runtime environment, never this file.
crawler-start:
@test -n "$(SCOUT_CRAWLER_TOKEN)" || (printf '%s\n' 'SCOUT_CRAWLER_TOKEN is required' >&2; exit 1)
@mkdir -p "$(RUNTIME_DIR)"
@cd crawler && SCOUT_CRAWLER_TOKEN="$(SCOUT_CRAWLER_TOKEN)" nohup npm run start >"$(RUNTIME_DIR)/crawler.log" 2>&1 & printf '%s\n' $$! >"$(RUNTIME_DIR)/crawler.pid"
crawler-stop:
@pidfile="$(RUNTIME_DIR)/crawler.pid"; \
if [ -f "$$pidfile" ] && kill -0 "$$(cat "$$pidfile")" 2>/dev/null; then kill "$$(cat "$$pidfile")"; fi; \
rm -f "$$pidfile"
crawler-restart: crawler-stop crawler-start