diff --git a/.github/workflows/pr-tests.yml b/.github/workflows/pr-tests.yml index 85116cbd..fd59d840 100644 --- a/.github/workflows/pr-tests.yml +++ b/.github/workflows/pr-tests.yml @@ -21,9 +21,6 @@ jobs: name: Web Build And Test if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }} runs-on: ubuntu-latest - defaults: - run: - working-directory: web steps: - name: Check out repository @@ -41,22 +38,16 @@ jobs: cache: pnpm cache-dependency-path: web/pnpm-lock.yaml - - name: Install dependencies - run: pnpm install --frozen-lockfile - - name: Build frontend - run: pnpm build + run: make build-frontend - name: Run frontend unit tests - run: pnpm test + run: make test-frontend server-tests: name: Server Unit Tests if: ${{ github.event_name != 'pull_request' || !github.event.pull_request.draft }} runs-on: ubuntu-latest - defaults: - run: - working-directory: server steps: - name: Check out repository @@ -70,7 +61,7 @@ jobs: cache: maven - name: Ensure Maven wrapper is executable - run: chmod +x mvnw + run: chmod +x server/mvnw - name: Run backend unit tests - run: ./mvnw test + run: make test-backend diff --git a/Makefile b/Makefile index 91faf34f..be760c80 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: help dev dev-all dev-down dev-all-down dev-all-reset dev-logs dev-status build test clean web-install dev-server dev-server-restart dev-web build-web test-web typecheck-web lint-web generate-api db-reset namespace-smoke validate-release-config staging staging-down staging-logs pr parallel-init parallel-sync parallel-up parallel-down +.PHONY: help dev dev-all dev-down dev-all-down dev-all-reset dev-logs dev-status build test check clean web-deps web-install web-install-ci dev-server dev-server-restart dev-web build-backend test-backend build-frontend test-frontend build-web test-web typecheck-web lint-web generate-api db-reset namespace-smoke validate-release-config staging staging-down staging-logs pr parallel-init parallel-sync parallel-up parallel-down DEV_DIR := .dev DEV_SERVER_PID := $(DEV_DIR)/server.pid @@ -13,6 +13,7 @@ STAGING_SERVER_IMAGE := skillhub-server:staging DEV_PROCESS := python3 scripts/dev_process.py DEV_SERVER_PREPARE := true DEV_SERVER_CMD := ./scripts/run-dev-app.sh +BACKEND_TEST_JAVA_OPTIONS ?= -XX:+EnableDynamicAgentLoading PARALLEL_BASE_REF ?= origin/main PARALLEL_WORKTREE_ROOT ?= DEV_COMPOSE_PROJECT_NAME ?= skillhub @@ -163,11 +164,17 @@ dev-logs: ## 实时查看开发服务日志(backend/frontend,默认 backend exit 1; \ fi -build: ## 构建后端 +build-backend: ## 构建后端 cd server && ./mvnw clean package -DskipTests -test: ## 运行后端测试 - cd server && ./mvnw test +test-backend: ## 运行后端单元测试 + cd server && JDK_JAVA_OPTIONS="$(BACKEND_TEST_JAVA_OPTIONS)" ./mvnw test + +build: build-backend build-frontend ## 完整构建前后端 + +test: test-backend test-frontend ## 运行前后端完整单元测试 + +check: build test ## 执行前后端完整构建和完整单元测试 clean: ## 清理构建产物 cd server && ./mvnw clean @@ -181,15 +188,29 @@ generate-api: ## 生成 OpenAPI 类型(前端用) web-install: ## 安装前端依赖 cd web && pnpm install +web-deps: ## 确保前端依赖可用(本地开发优先复用现有 node_modules) + @if [ -d web/node_modules ]; then \ + echo "Using existing frontend dependencies."; \ + else \ + $(MAKE) web-install-ci; \ + fi + +web-install-ci: ## 以 CI 方式安装前端依赖 + cd web && pnpm run install:ci + dev-web: ## 启动前端开发服务器 cd web && pnpm run dev -build-web: ## 构建前端 +build-frontend: web-deps ## 构建前端 cd web && pnpm run build -test-web: ## 运行前端测试 +test-frontend: web-deps ## 运行前端单元测试 cd web && pnpm run test +build-web: build-frontend ## 构建前端 + +test-web: test-frontend ## 运行前端测试 + typecheck-web: ## 前端类型检查 cd web && pnpm run typecheck diff --git a/server/skillhub-auth/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/server/skillhub-auth/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..fdbd0b15 --- /dev/null +++ b/server/skillhub-auth/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-subclass diff --git a/server/skillhub-domain/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/server/skillhub-domain/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..fdbd0b15 --- /dev/null +++ b/server/skillhub-domain/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-subclass diff --git a/server/skillhub-search/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/server/skillhub-search/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 00000000..fdbd0b15 --- /dev/null +++ b/server/skillhub-search/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-subclass