From 5133d574a43d71e39317743531705386f1579fbe Mon Sep 17 00:00:00 2001 From: MerCry Date: Tue, 24 Feb 2026 10:43:10 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=88=9D=E5=A7=8B=E9=85=8D?= =?UTF-8?q?=E7=BD=AE=E6=96=87=E4=BB=B6=20=E9=80=82=E9=85=8Dgitea[AC-INIT]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitea/workflows/pr-check.yaml | 71 +++++++++++++++++++--------------- 1 file changed, 40 insertions(+), 31 deletions(-) diff --git a/.gitea/workflows/pr-check.yaml b/.gitea/workflows/pr-check.yaml index 0d7bcbf..f5fe2b3 100644 --- a/.gitea/workflows/pr-check.yaml +++ b/.gitea/workflows/pr-check.yaml @@ -1,4 +1,4 @@ -name: PR Check (SDD Contract Gate) +name: PR Check (SDD Full Gate) on: pull_request: @@ -8,71 +8,80 @@ on: - 'scripts/**' - 'spec/**' - 'src/**' + - 'test/**' jobs: - contract-level-check: + sdd-full-gate: runs-on: ubuntu-latest steps: - name: Checkout code (no GitHub dependency) shell: sh run: | set -eu - - # Try GITHUB_ vars first (Gitea usually provides these for compatibility) - # Fallback to GITEA_ vars if GITHUB_ ones are empty SERVER_URL="${GITHUB_SERVER_URL:-${GITEA_SERVER_URL:-}}" REPO_NAME="${GITHUB_REPOSITORY:-${GITEA_REPOSITORY:-}}" COMMIT_SHA="${GITHUB_SHA:-${GITEA_SHA:-}}" - - # If still empty, try to detect from environment - if [ -z "$SERVER_URL" ] || [ -z "$REPO_NAME" ] || [ -z "$COMMIT_SHA" ]; then - echo "Warning: Some standard env vars are missing. Printing environment for debugging (excluding secrets)..." - env | grep -E "GITEA|GITHUB|CI" | sort + + # Try to get URL from git remote if env vars are missing + if [ -z "$SERVER_URL" ] || [ -z "$REPO_NAME" ]; then + echo "Warning: Env vars missing, attempting to detect from remote..." fi - # Final validation - : "${SERVER_URL:?Could not determine SERVER_URL}" - : "${REPO_NAME:?Could not determine REPO_NAME}" - : "${COMMIT_SHA:?Could not determine COMMIT_SHA}" - echo "Using SERVER_URL=$SERVER_URL" echo "Using REPO_NAME=$REPO_NAME" echo "Using COMMIT_SHA=$COMMIT_SHA" - # Clone using the determined URL (assuming no auth required for internal runner or handled by runner) git clone "$SERVER_URL/$REPO_NAME.git" . + git fetch origin main:main git checkout "$COMMIT_SHA" - - name: Run OpenAPI Contract Level Check + - name: 1. OpenAPI Contract Level Check env: - # For PRs targeting main, enforce provider >= L2 REQUIRE_PROVIDER_L2: "1" shell: sh run: | - set -eu - chmod +x scripts/check-openapi-level.sh + chmod +x scripts/*.sh ./scripts/check-openapi-level.sh + - name: 2. AC Traceability Check + shell: sh + run: ./scripts/check-traceability.sh + + - name: 3. OpenAPI Breaking Change Check + shell: sh + run: ./scripts/check-openapi-diff.sh + + - name: 4. Minimum Self-Test (mvn test) + shell: sh + run: | + # 针对 Java Spring 项目运行最小单测 (方案 B: 不存在则提示跳过) + if command -v mvn >/dev/null 2>&1; then + # 处理本地 jar 依赖:如果 lib 目录下存在 jar 包,先安装到本地仓库 + if [ -f "lib/commons-codec-1.9.jar" ]; then + echo "Installing local jar: lib/commons-codec-1.9.jar" + mvn -q install:install-file \ + -Dfile=lib/commons-codec-1.9.jar \ + -DgroupId=commons-codec \ + -DartifactId=commons-codec \ + -Dversion=1.9 \ + -Dpackaging=jar \ + -DgeneratePom=true + fi + + mvn -q -DskipTests=false test + else + echo "Warning: mvn not found, skipping unit tests. Please ensure Runner has JDK/Maven for full enforcement." + fi + - name: YAML Parse Check (Optional) shell: sh run: | - set -eu if command -v python3 >/dev/null 2>&1; then - python3 -c "import sys; print('python3:', sys.version.split()[0])" - - # Try to install pyyaml if missing if ! python3 -c "import yaml" 2>/dev/null; then - echo "PyYAML missing, attempting to install..." python3 -m pip install pyyaml --user >/dev/null 2>&1 || true fi - - # Check again and run if available if python3 -c "import yaml" 2>/dev/null; then find spec -name "*.yaml" -o -name "*.yml" | xargs -I {} python3 -c "import yaml; yaml.safe_load(open('{}'))" echo "YAML check passed." - else - echo "PyYAML still missing; skipping YAML parse check." fi - else - echo "python3 not available; skip YAML parse check" fi