将 macOS .app 打包直接并入 desktop-build-mac,减少重复的桌面构建入口。\n\n同时移除未实现或已废弃的 desktop-package-* 命令和独立打包脚本,降低维护成本。
244 lines
7.8 KiB
Makefile
244 lines
7.8 KiB
Makefile
.PHONY: all dev build test lint clean \
|
|
backend-build backend-run backend-dev backend-test backend-test-all backend-test-unit backend-test-integration backend-test-coverage \
|
|
backend-lint backend-clean backend-deps backend-generate \
|
|
backend-db-up backend-db-down backend-db-status backend-db-create \
|
|
test-mysql-up test-mysql-down test-mysql test-mysql-quick \
|
|
frontend-build frontend-dev frontend-test frontend-test-watch frontend-test-coverage frontend-test-e2e frontend-lint frontend-clean \
|
|
desktop-build desktop-build-mac desktop-build-win desktop-build-linux \
|
|
desktop-dev desktop-test desktop-clean \
|
|
desktop-prepare-frontend desktop-prepare-embedfs
|
|
|
|
# ============================================
|
|
# 顶层便捷命令
|
|
# ============================================
|
|
|
|
dev:
|
|
@echo "🚀 Starting development environment..."
|
|
@$(MAKE) -j2 backend-dev frontend-dev
|
|
|
|
build: backend-build frontend-build
|
|
@echo "✅ Build complete"
|
|
|
|
test: backend-test desktop-test frontend-test
|
|
@echo "✅ All tests passed"
|
|
|
|
lint: backend-lint frontend-lint
|
|
@echo "✅ Lint complete"
|
|
|
|
all: build test lint
|
|
|
|
# ============================================
|
|
# 后端
|
|
# ============================================
|
|
|
|
backend-build:
|
|
cd backend && go build -o bin/server ./cmd/server
|
|
|
|
backend-run:
|
|
cd backend && go run ./cmd/server
|
|
|
|
backend-dev:
|
|
cd backend && go run ./cmd/server
|
|
|
|
backend-test:
|
|
cd backend && go test ./internal/... ./pkg/... ./tests/... ./cmd/server/... -v
|
|
|
|
backend-test-all:
|
|
cd backend && go test ./... -v
|
|
|
|
backend-test-unit:
|
|
cd backend && go test ./internal/... ./pkg/... -v
|
|
|
|
backend-test-integration:
|
|
cd backend && go test ./tests/... -v
|
|
|
|
backend-test-coverage:
|
|
cd backend && go test ./... -coverprofile=coverage.out
|
|
cd backend && go tool cover -html=coverage.out -o coverage.html
|
|
@echo "Coverage report generated: backend/coverage.html"
|
|
|
|
backend-lint:
|
|
cd backend && go tool golangci-lint run ./...
|
|
|
|
backend-clean:
|
|
rm -rf backend/bin/ backend/coverage.out backend/coverage.html
|
|
|
|
backend-deps:
|
|
cd backend && go mod tidy
|
|
|
|
backend-generate:
|
|
cd backend && go generate ./...
|
|
|
|
backend-db-up:
|
|
@echo "Running database migration up..."
|
|
cd backend && goose -dir migrations/sqlite sqlite3 "$(DB_PATH)" up
|
|
|
|
backend-db-down:
|
|
@echo "Running database migration down..."
|
|
cd backend && goose -dir migrations/sqlite sqlite3 "$(DB_PATH)" down
|
|
|
|
backend-db-status:
|
|
@echo "Checking database migration status..."
|
|
cd backend && goose -dir migrations/sqlite sqlite3 "$(DB_PATH)" status
|
|
|
|
backend-db-create:
|
|
@read -p "Migration name: " name; \
|
|
cd backend && goose -dir migrations/sqlite create $$name sql; \
|
|
cd backend && goose -dir migrations/mysql create $$name sql
|
|
|
|
# ============================================
|
|
# MySQL 专项测试
|
|
# ============================================
|
|
|
|
test-mysql-up:
|
|
@echo "Starting MySQL test container..."
|
|
cd backend/tests/mysql && docker-compose up -d
|
|
@echo "Waiting for MySQL to be ready..."
|
|
@for i in $$(seq 1 30); do \
|
|
if docker exec nex-mysql-test mysqladmin ping -h localhost -u root -ptestpass --silent 2>/dev/null; then \
|
|
echo "MySQL is ready!"; \
|
|
exit 0; \
|
|
fi; \
|
|
echo "Waiting... ($$i/30)"; \
|
|
sleep 1; \
|
|
done; \
|
|
echo "MySQL failed to start"; \
|
|
exit 1
|
|
|
|
test-mysql-down:
|
|
@echo "Stopping MySQL test container..."
|
|
cd backend/tests/mysql && docker-compose down -v
|
|
|
|
test-mysql: test-mysql-up
|
|
@echo "Running MySQL tests..."
|
|
cd backend && go test -tags=mysql ./tests/mysql/... -v -count=1
|
|
$(MAKE) test-mysql-down
|
|
|
|
test-mysql-quick:
|
|
@echo "Running MySQL tests (without container management)..."
|
|
cd backend && go test -tags=mysql ./tests/mysql/... -v -count=1
|
|
|
|
# ============================================
|
|
# 前端
|
|
# ============================================
|
|
|
|
frontend-install:
|
|
cd frontend && bun install
|
|
|
|
frontend-build: frontend-install
|
|
cd frontend && bun run build
|
|
|
|
frontend-dev: frontend-install
|
|
cd frontend && bun dev
|
|
|
|
frontend-test: frontend-install
|
|
cd frontend && bun run test
|
|
|
|
frontend-test-watch: frontend-install
|
|
cd frontend && bun run test:watch
|
|
|
|
frontend-test-coverage: frontend-install
|
|
cd frontend && bun run test:coverage
|
|
|
|
frontend-test-e2e: frontend-install
|
|
cd frontend && bun run test:e2e
|
|
|
|
frontend-lint: frontend-install
|
|
cd frontend && bun run lint
|
|
|
|
frontend-clean:
|
|
rm -rf frontend/dist frontend/.next frontend/node_modules frontend/coverage frontend/playwright-report frontend/test-results frontend/tsconfig.tsbuildinfo
|
|
|
|
# ============================================
|
|
# 桌面应用
|
|
# ============================================
|
|
|
|
desktop-build: desktop-build-mac desktop-build-win desktop-build-linux
|
|
@echo "✅ Desktop builds complete for all platforms"
|
|
|
|
desktop-prepare-frontend:
|
|
@echo "📦 Preparing frontend for desktop..."
|
|
cd frontend && cp .env.desktop .env.production.local
|
|
cd frontend && bun install && bun run build
|
|
rm -f frontend/.env.production.local
|
|
|
|
desktop-prepare-embedfs:
|
|
@echo "📦 Preparing embedded filesystem..."
|
|
rm -rf embedfs/assets embedfs/frontend-dist
|
|
cp -r assets embedfs/assets
|
|
cp -r frontend/dist embedfs/frontend-dist
|
|
|
|
desktop-build-mac: desktop-prepare-frontend desktop-prepare-embedfs
|
|
@echo "🍎 Building macOS..."
|
|
cd backend && CGO_ENABLED=1 GOOS=darwin GOARCH=arm64 go build -o ../build/nex-mac-arm64 ./cmd/desktop
|
|
cd backend && CGO_ENABLED=1 GOOS=darwin GOARCH=amd64 go build -o ../build/nex-mac-amd64 ./cmd/desktop
|
|
@echo "📦 Packaging macOS .app..."
|
|
mkdir -p build/Nex.app/Contents/MacOS build/Nex.app/Contents/Resources
|
|
cp build/nex-mac-arm64 build/Nex.app/Contents/MacOS/nex
|
|
@if [ -f assets/AppIcon.icns ]; then \
|
|
cp assets/AppIcon.icns build/Nex.app/Contents/Resources/; \
|
|
else \
|
|
echo "⚠️ 未找到 assets/AppIcon.icns"; \
|
|
fi
|
|
@{ \
|
|
printf '%s\n' '<?xml version="1.0" encoding="UTF-8"?>' \
|
|
'<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">' \
|
|
'<plist version="1.0">' \
|
|
'<dict>' \
|
|
' <key>CFBundleDevelopmentRegion</key>' \
|
|
' <string>zh_CN</string>' \
|
|
' <key>CFBundleExecutable</key>' \
|
|
' <string>nex</string>' \
|
|
' <key>CFBundleIconFile</key>' \
|
|
' <string>AppIcon</string>' \
|
|
' <key>CFBundleIdentifier</key>' \
|
|
' <string>io.nex.gateway</string>' \
|
|
' <key>CFBundleInfoDictionaryVersion</key>' \
|
|
' <string>6.0</string>' \
|
|
' <key>CFBundleName</key>' \
|
|
' <string>Nex Gateway</string>' \
|
|
' <key>CFBundleDisplayName</key>' \
|
|
' <string>Nex Gateway</string>' \
|
|
' <key>CFBundlePackageType</key>' \
|
|
' <string>APPL</string>' \
|
|
' <key>CFBundleShortVersionString</key>' \
|
|
' <string>1.0.0</string>' \
|
|
' <key>CFBundleVersion</key>' \
|
|
' <string>1.0.0</string>' \
|
|
' <key>LSMinimumSystemVersion</key>' \
|
|
' <string>10.13</string>' \
|
|
' <key>LSUIElement</key>' \
|
|
' <true/>' \
|
|
' <key>NSHighResolutionCapable</key>' \
|
|
' <true/>' \
|
|
'</dict>' \
|
|
'</plist>'; \
|
|
} > build/Nex.app/Contents/Info.plist
|
|
chmod +x build/Nex.app/Contents/MacOS/nex
|
|
@echo "✅ macOS app packaged: build/Nex.app"
|
|
|
|
desktop-build-win: desktop-prepare-frontend desktop-prepare-embedfs
|
|
@echo "🪟 Building Windows..."
|
|
cd backend && CGO_ENABLED=1 GOOS=windows GOARCH=amd64 go build -ldflags "-H=windowsgui" -o ../build/nex-win-amd64.exe ./cmd/desktop
|
|
|
|
desktop-build-linux: desktop-prepare-frontend desktop-prepare-embedfs
|
|
@echo "🐧 Building Linux..."
|
|
cd backend && CGO_ENABLED=1 GOOS=linux GOARCH=amd64 go build -o ../build/nex-linux-amd64 ./cmd/desktop
|
|
|
|
desktop-dev: desktop-prepare-frontend desktop-prepare-embedfs
|
|
@echo "🖥️ Starting desktop app in dev mode..."
|
|
cd backend && go run ./cmd/desktop
|
|
|
|
desktop-test:
|
|
cd backend && go test ./cmd/desktop/... -v
|
|
|
|
desktop-clean:
|
|
rm -rf build/ embedfs/assets embedfs/frontend-dist
|
|
|
|
# ============================================
|
|
# 清理
|
|
# ============================================
|
|
|
|
clean: backend-clean frontend-clean desktop-clean
|
|
@echo "✅ Clean complete"
|