name: 缓存序列化结构检查 run-name: ${{ gitea.actor }}的缓存结构检查 on: push: workflow_dispatch: env: # cache-schema-checker 私库坐标:com.codechecker:cache-schema-checker:1.0.0 CACHE_SCHEMA_CHECKER_VERSION: "1.0.0" CACHE_SCHEMA_CHECKER_REPO_URL: "http://192.168.3.25:18081/nexus/repository/maven-releases" jobs: cache-schema-check: if: ${{ gitea.ref != 'refs/heads/pre' && gitea.ref != 'refs/heads/dev' && gitea.ref != 'refs/heads/master-2.0' }} runs-on: jdk11 steps: # 浅克隆:仅需 HEAD 与 HEAD~1,避免全量拉取 # 指定 --branch 确保非默认分支推送时也能正确检出 gitea.sha - name: 检出代码 run: | git config --global http.sslVerify false git clone --depth 2 --single-branch --branch "${{ gitea.ref_name }}" \ "https://${{ gitea.token }}@git.niujiekeji.com/${{ gitea.repository }}.git" . git checkout -B "${{ gitea.ref_name }}" "${{ gitea.sha }}" - name: 检查配置文件 run: | if [ ! -f .gitea/config/cache-schema-check-config.yaml ]; then echo "错误: 缺少 .gitea/config/cache-schema-check-config.yaml" exit 1 fi # 顶层总开关 enabled: false 时跳过后续步骤(与 notify.enabled 区分,仅匹配行首) if grep -Eq '^enabled:[[:space:]]*false([[:space:]]|#|$)' .gitea/config/cache-schema-check-config.yaml; then echo "总开关 enabled=false,跳过缓存结构检查" touch /tmp/cache-schema-check.skip fi - name: 从 Nexus 私库下载 cache-schema-checker run: | if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过下载" exit 0 fi GROUP_PATH="com/codechecker/cache-schema-checker" JAR_NAME="cache-schema-checker-${CACHE_SCHEMA_CHECKER_VERSION}.jar" JAR_URL="${CACHE_SCHEMA_CHECKER_REPO_URL}/${GROUP_PATH}/${CACHE_SCHEMA_CHECKER_VERSION}/${JAR_NAME}" JAR_PATH="/tmp/${JAR_NAME}" echo "下载: ${JAR_URL}" if command -v curl >/dev/null 2>&1; then curl -fsSL -o "${JAR_PATH}" "${JAR_URL}" elif command -v wget >/dev/null 2>&1; then wget -q -O "${JAR_PATH}" "${JAR_URL}" else echo "错误: Runner 缺少 curl 或 wget,无法从 Nexus 下载 jar" exit 1 fi if [ ! -s "${JAR_PATH}" ]; then echo "错误: 下载失败或文件为空: ${JAR_PATH}" exit 1 fi ls -lh "${JAR_PATH}" - name: 验证 JDK run: | if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过" exit 0 fi echo "Java: $(java -version 2>&1 | head -1)" - name: 执行缓存序列化结构检测 run: | if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过检测" exit 0 fi OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "") if [ -z "$OLD_SHA" ]; then echo "首次提交,跳过检测" exit 0 fi COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S') java -jar "/tmp/cache-schema-checker-${CACHE_SCHEMA_CHECKER_VERSION}.jar" \ --config .gitea/config/cache-schema-check-config.yaml \ --repo-root . \ --old-sha "$OLD_SHA" \ --new-sha "$(git rev-parse HEAD)" \ --branch "${{ gitea.ref_name }}" \ --modifier "${{ gitea.actor }}" \ --modify-time "$COMMIT_TIME"