From 110beb79c03b3deaaff9e1e0104c688ea7a0cd32 Mon Sep 17 00:00:00 2001 From: dongzi Date: Tue, 14 Jul 2026 11:03:34 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E9=A1=B9=E7=9B=AE=E6=95=B4=E4=BD=93?= =?UTF-8?q?=E5=91=BD=E5=90=8D=E4=BF=AE=E6=94=B9cache-schema-checker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...ig.yaml => cache-schema-check-config.yaml} | 7 +-- ...ema-check.yaml => cache-schema-check.yaml} | 42 ++++++++-------- .idea/compiler.xml | 6 +-- .idea/encodings.xml | 4 +- docs/CI集成说明.md | 48 +++++++++---------- docs/实施方案.md | 46 +++++++++--------- docs/配置说明.md | 14 +++--- pom.xml | 10 ++-- .../{redis => cache}/analyze/FileScanner.java | 2 +- .../{redis => cache}/analyze/GlobMatcher.java | 2 +- .../analyze/SchemaCheckAnalyzer.java | 36 +++++++------- .../cli/CacheSchemaCheckerMain.java} | 35 +++++++------- .../config/CheckerConfig.java | 4 +- .../{redis => cache}/config/ConfigLoader.java | 4 +- .../detector/RedisWritePointDetector.java | 6 +-- .../{redis => cache}/detector/WritePoint.java | 2 +- .../{redis => cache}/diff/ChangeType.java | 2 +- .../{redis => cache}/diff/SchemaChange.java | 2 +- .../{redis => cache}/diff/SchemaDiffer.java | 8 ++-- .../{redis => cache}/diff/Severity.java | 2 +- .../{redis => cache}/git/GitDiffScanner.java | 2 +- .../{redis => cache}/git/GitException.java | 2 +- .../key/RedisKeyResolver.java | 4 +- .../notify/WeComNotifier.java | 2 +- .../{redis => cache}/report/CheckReport.java | 6 +-- .../report/KeyStructureChange.java | 6 +-- .../report/ReportBuilder.java | 16 +++---- .../schema/AnnotationSupport.java | 2 +- .../{redis => cache}/schema/FieldSchema.java | 2 +- .../schema/JavaSchemaExtractor.java | 2 +- .../{redis => cache}/schema/JsonType.java | 2 +- .../schema/SkeletonJsonRenderer.java | 2 +- .../{redis => cache}/schema/SourceIndex.java | 2 +- .../{redis => cache}/schema/TypeSchema.java | 2 +- src/main/resources/default-config.yaml | 4 +- .../{redis => cache}/TenantScenarioTest.java | 18 +++---- .../{redis => cache}/TestSupport.java | 2 +- .../analyze/GlobMatcherTest.java | 2 +- .../config/ConfigLoaderTest.java | 2 +- .../diff/SchemaDifferTest.java | 8 ++-- .../report/ReportBuilderTest.java | 14 +++--- .../schema/SkeletonJsonRendererTest.java | 12 ++--- 42 files changed, 197 insertions(+), 199 deletions(-) rename .gitea/config/{redis-schema-check-config.yaml => cache-schema-check-config.yaml} (80%) rename .gitea/workflows/{redis-schema-check.yaml => cache-schema-check.yaml} (67%) rename src/main/java/com/codechecker/{redis => cache}/analyze/FileScanner.java (98%) rename src/main/java/com/codechecker/{redis => cache}/analyze/GlobMatcher.java (96%) rename src/main/java/com/codechecker/{redis => cache}/analyze/SchemaCheckAnalyzer.java (94%) rename src/main/java/com/codechecker/{redis/cli/RedisSchemaCheckerMain.java => cache/cli/CacheSchemaCheckerMain.java} (76%) rename src/main/java/com/codechecker/{redis => cache}/config/CheckerConfig.java (98%) rename src/main/java/com/codechecker/{redis => cache}/config/ConfigLoader.java (98%) rename src/main/java/com/codechecker/{redis => cache}/detector/RedisWritePointDetector.java (98%) rename src/main/java/com/codechecker/{redis => cache}/detector/WritePoint.java (98%) rename src/main/java/com/codechecker/{redis => cache}/diff/ChangeType.java (96%) rename src/main/java/com/codechecker/{redis => cache}/diff/SchemaChange.java (98%) rename src/main/java/com/codechecker/{redis => cache}/diff/SchemaDiffer.java (96%) rename src/main/java/com/codechecker/{redis => cache}/diff/Severity.java (69%) rename src/main/java/com/codechecker/{redis => cache}/git/GitDiffScanner.java (99%) rename src/main/java/com/codechecker/{redis => cache}/git/GitException.java (87%) rename src/main/java/com/codechecker/{redis => cache}/key/RedisKeyResolver.java (98%) rename src/main/java/com/codechecker/{redis => cache}/notify/WeComNotifier.java (98%) rename src/main/java/com/codechecker/{redis => cache}/report/CheckReport.java (94%) rename src/main/java/com/codechecker/{redis => cache}/report/KeyStructureChange.java (92%) rename src/main/java/com/codechecker/{redis => cache}/report/ReportBuilder.java (92%) rename src/main/java/com/codechecker/{redis => cache}/schema/AnnotationSupport.java (98%) rename src/main/java/com/codechecker/{redis => cache}/schema/FieldSchema.java (97%) rename src/main/java/com/codechecker/{redis => cache}/schema/JavaSchemaExtractor.java (99%) rename src/main/java/com/codechecker/{redis => cache}/schema/JsonType.java (80%) rename src/main/java/com/codechecker/{redis => cache}/schema/SkeletonJsonRenderer.java (99%) rename src/main/java/com/codechecker/{redis => cache}/schema/SourceIndex.java (99%) rename src/main/java/com/codechecker/{redis => cache}/schema/TypeSchema.java (95%) rename src/test/java/com/codechecker/{redis => cache}/TenantScenarioTest.java (88%) rename src/test/java/com/codechecker/{redis => cache}/TestSupport.java (97%) rename src/test/java/com/codechecker/{redis => cache}/analyze/GlobMatcherTest.java (95%) rename src/test/java/com/codechecker/{redis => cache}/config/ConfigLoaderTest.java (98%) rename src/test/java/com/codechecker/{redis => cache}/diff/SchemaDifferTest.java (93%) rename src/test/java/com/codechecker/{redis => cache}/report/ReportBuilderTest.java (86%) rename src/test/java/com/codechecker/{redis => cache}/schema/SkeletonJsonRendererTest.java (91%) diff --git a/.gitea/config/redis-schema-check-config.yaml b/.gitea/config/cache-schema-check-config.yaml similarity index 80% rename from .gitea/config/redis-schema-check-config.yaml rename to .gitea/config/cache-schema-check-config.yaml index 6d69433..86efd4c 100644 --- a/.gitea/config/redis-schema-check-config.yaml +++ b/.gitea/config/cache-schema-check-config.yaml @@ -1,11 +1,12 @@ # ============================================================ -# Redis 序列化结构变更检测 — 业务仓库配置 +# 缓存序列化结构变更检测 — 业务仓库配置 # ============================================================ # 说明: # - 本配置文件为业务覆盖配置,会与 jar 内 default-config.yaml 深度合并 # - 未声明的项沿用工具内置默认值(忽略规则、检测模式等) +# - 当前实现以 Redis 写入检测为主,后续可扩展其他缓存 -# 总开关 true-执行检测 false-跳过检测 +# 总开关 true-执行检测 false-跳过检测(流水线直接通过,不发通知) enabled: true # 运行模式 notify-仅通知,不阻断流水线 block-检测到结构变更即阻断流水线(exit 1) @@ -16,7 +17,7 @@ notify: enabled: true webhook_url: https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=fa14f0b3-e01a-40f6-96bd-e18beb94e85e notify_on_clean: false - title_prefix: "【序列化结构变更】" + title_prefix: "【缓存结构变更】" # 观察期:先只扫描 jnpf-tenant 模块,稳定后改为 include_modules: [] include_modules: diff --git a/.gitea/workflows/redis-schema-check.yaml b/.gitea/workflows/cache-schema-check.yaml similarity index 67% rename from .gitea/workflows/redis-schema-check.yaml rename to .gitea/workflows/cache-schema-check.yaml index 18cb175..8e5227b 100644 --- a/.gitea/workflows/redis-schema-check.yaml +++ b/.gitea/workflows/cache-schema-check.yaml @@ -1,17 +1,17 @@ -name: Redis序列化结构检查 -run-name: ${{ gitea.actor }}的Redis结构检查 +name: 缓存序列化结构检查 +run-name: ${{ gitea.actor }}的缓存结构检查 on: push: workflow_dispatch: env: - # redis-schema-checker 私库坐标:com.codechecker:redis-schema-checker:1.0.0 - REDIS_SCHEMA_CHECKER_VERSION: "1.0.0" - REDIS_SCHEMA_CHECKER_REPO_URL: "http://192.168.3.25:18081/nexus/repository/maven-releases" + # 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: - redis-schema-check: + 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: @@ -26,26 +26,26 @@ jobs: - name: 检查配置文件 run: | - if [ ! -f .gitea/config/redis-schema-check-config.yaml ]; then - echo "错误: 缺少 .gitea/config/redis-schema-check-config.yaml" + 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/redis-schema-check-config.yaml; then - echo "总开关 enabled=false,跳过 Redis 结构检查" - touch /tmp/redis-schema-check.skip + 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 私库下载 redis-schema-checker + - name: 从 Nexus 私库下载 cache-schema-checker run: | - if [ -f /tmp/redis-schema-check.skip ]; then + if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过下载" exit 0 fi - GROUP_PATH="com/codechecker/redis-schema-checker" - JAR_NAME="redis-schema-checker-${REDIS_SCHEMA_CHECKER_VERSION}.jar" - JAR_URL="${REDIS_SCHEMA_CHECKER_REPO_URL}/${GROUP_PATH}/${REDIS_SCHEMA_CHECKER_VERSION}/${JAR_NAME}" + 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}" @@ -67,15 +67,15 @@ jobs: - name: 验证 JDK run: | - if [ -f /tmp/redis-schema-check.skip ]; then + if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过" exit 0 fi echo "Java: $(java -version 2>&1 | head -1)" - - name: 执行 Redis 序列化结构检测 + - name: 执行缓存序列化结构检测 run: | - if [ -f /tmp/redis-schema-check.skip ]; then + if [ -f /tmp/cache-schema-check.skip ]; then echo "总开关已关闭,跳过检测" exit 0 fi @@ -88,8 +88,8 @@ jobs: COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S') - java -jar "/tmp/redis-schema-checker-${REDIS_SCHEMA_CHECKER_VERSION}.jar" \ - --config .gitea/config/redis-schema-check-config.yaml \ + 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)" \ diff --git a/.idea/compiler.xml b/.idea/compiler.xml index 8c50bf8..880e7f1 100644 --- a/.idea/compiler.xml +++ b/.idea/compiler.xml @@ -6,11 +6,11 @@ - + - + - \ No newline at end of file + diff --git a/.idea/encodings.xml b/.idea/encodings.xml index bb6937f..d8a7215 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,9 +1,7 @@ - - - \ No newline at end of file + diff --git a/docs/CI集成说明.md b/docs/CI集成说明.md index 7f6421c..d8f7d24 100644 --- a/docs/CI集成说明.md +++ b/docs/CI集成说明.md @@ -1,4 +1,4 @@ -# Redis 序列化结构检测 — CI 集成说明 +# 缓存序列化结构检测 — CI 集成说明 --- @@ -11,7 +11,7 @@ Gitea Actions 触发 ↓ 浅克隆业务仓库(depth=2) ↓ -从 Nexus 下载 redis-schema-checker.jar +从 Nexus 下载 cache-schema-checker.jar ↓ java -jar 执行(对比 HEAD~1 与 HEAD) ↓ @@ -28,7 +28,7 @@ mode=block 且含 P0/P1/P2 任一变更 → exit 1(流水线失败) |----|------| | Gitea Runner | 标签 `jdk11`,已安装 Java 11 | | Nexus 私库 | 可访问 `http://192.168.3.25:18081/nexus/repository/maven-releases` | -| 工具 JAR | `com.codechecker:redis-schema-checker:1.0.0` 已发布 | +| 工具 JAR | `com.codechecker:cache-schema-checker:1.0.0` 已发布 | | 仓库 Secret | `WECOM_ROBOT_WEBHOOK` 已配置 | --- @@ -41,9 +41,9 @@ mode=block 且含 P0/P1/P2 任一变更 → exit 1(流水线失败) jnpf-java-cloud/ ├── .gitea/ │ ├── workflows/ -│ │ └── redis-schema-check.yaml # 流水线 +│ │ └── cache-schema-check.yaml # 流水线 │ └── config/ -│ └── redis-schema-check-config.yaml # 检测配置 +│ └── cache-schema-check-config.yaml # 检测配置 ``` --- @@ -51,19 +51,19 @@ jnpf-java-cloud/ ## 4. 流水线模板 ```yaml -name: Redis序列化结构检查 -run-name: ${{ gitea.actor }}的Redis结构检查 +name: 缓存序列化结构检查 +run-name: ${{ gitea.actor }}的缓存结构检查 on: push: workflow_dispatch: env: - REDIS_SCHEMA_CHECKER_VERSION: "1.0.0" - REDIS_SCHEMA_CHECKER_REPO_URL: "http://192.168.3.25:18081/nexus/repository/maven-releases" + CACHE_SCHEMA_CHECKER_VERSION: "1.0.0" + CACHE_SCHEMA_CHECKER_REPO_URL: "http://192.168.3.25:18081/nexus/repository/maven-releases" jobs: - redis-schema-check: + 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: @@ -76,16 +76,16 @@ jobs: - name: 检查配置文件 run: | - if [ ! -f .gitea/config/redis-schema-check-config.yaml ]; then - echo "错误: 缺少 .gitea/config/redis-schema-check-config.yaml" + if [ ! -f .gitea/config/cache-schema-check-config.yaml ]; then + echo "错误: 缺少 .gitea/config/cache-schema-check-config.yaml" exit 1 fi - name: 从 Nexus 下载检测工具 run: | - GROUP_PATH="com/codechecker/redis-schema-checker" - JAR_NAME="redis-schema-checker-${REDIS_SCHEMA_CHECKER_VERSION}.jar" - JAR_URL="${REDIS_SCHEMA_CHECKER_REPO_URL}/${GROUP_PATH}/${REDIS_SCHEMA_CHECKER_VERSION}/${JAR_NAME}" + 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}" @@ -108,7 +108,7 @@ jobs: - name: 验证 JDK run: java -version - - name: 执行 Redis 结构检测 + - name: 执行 缓存结构检测 env: WECOM_ROBOT_WEBHOOK: ${{ secrets.WECOM_ROBOT_WEBHOOK }} run: | @@ -120,8 +120,8 @@ jobs: COMMIT_TIME=$(git log -1 --format=%cd --date=format:'%Y-%m-%d %H:%M:%S') - java -jar "/tmp/redis-schema-checker-${REDIS_SCHEMA_CHECKER_VERSION}.jar" \ - --config .gitea/config/redis-schema-check-config.yaml \ + 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)" \ @@ -138,7 +138,7 @@ jobs: |--------|------|------| | `demo.yaml` (AI代码质量分析) | AI Code Review | 并行,互不影响 | | `code-check` (CodeChecker) | 通用变更检测 | **同模式**,可并列执行 | -| `redis-schema-check` | Redis 结构检测 | 新增 | +| `cache-schema-check` | 缓存结构检测 | 新增 | 建议:三个 job 独立并行,各自 exit code 独立。 @@ -157,9 +157,9 @@ mvn clean deploy -Dnexus.deploy.enabled=true -DskipTests 发布产物: ```text -com/codechecker/redis-schema-checker/1.0.0/ - ├── redis-schema-checker-1.0.0.jar # 可执行 fat-jar - └── redis-schema-checker-1.0.0.pom +com/codechecker/cache-schema-checker/1.0.0/ + ├── cache-schema-checker-1.0.0.jar # 可执行 fat-jar + └── cache-schema-checker-1.0.0.pom ``` --- @@ -191,8 +191,8 @@ com/codechecker/redis-schema-checker/1.0.0/ ```bash # 在 jnpf-java-cloud 根目录 -java -jar /path/to/redis-schema-checker-1.0.0.jar \ - --config .gitea/config/redis-schema-check-config.yaml \ +java -jar /path/to/cache-schema-checker-1.0.0.jar \ + --config .gitea/config/cache-schema-check-config.yaml \ --repo-root . \ --old-sha HEAD~1 \ --new-sha HEAD \ diff --git a/docs/实施方案.md b/docs/实施方案.md index c51a6ba..f0bc344 100644 --- a/docs/实施方案.md +++ b/docs/实施方案.md @@ -1,4 +1,4 @@ -# Redis 序列化结构变更检测 — 实施方案 +# 缓存序列化结构变更检测 — 实施方案 > 版本:v0.1 > 日期:2026-07-13 @@ -104,12 +104,12 @@ redisCheck 仓库 ├── 开发 Java 分析工具 ├── mvn package 打 fat-jar - ├── 发布到 Nexus:com.codechecker:redis-schema-checker:{version} + ├── 发布到 Nexus:com.codechecker:cache-schema-checker:{version} └── 提供默认配置模板 jnpf-java-cloud 仓库 - ├── .gitea/workflows/redis-schema-check.yaml - ├── .gitea/config/redis-schema-check-config.yaml + ├── .gitea/workflows/cache-schema-check.yaml + ├── .gitea/config/cache-schema-check-config.yaml └── push 时下载 jar 并执行检测 ``` @@ -119,11 +119,11 @@ jnpf-java-cloud 仓库 flowchart TB subgraph Gitea["Gitea Push Pipeline"] A[push 事件] --> B[浅克隆 old/new 提交] - B --> C[下载 redis-schema-checker.jar] + B --> C[下载 cache-schema-checker.jar] C --> D[java -jar 执行检测] end - subgraph Checker["redis-schema-checker (JDK 11)"] + subgraph Checker["cache-schema-checker (JDK 11)"] D --> E[GitDiffScanner] E --> F[RedisWritePointDetector] F --> G[JavaSchemaExtractor] @@ -195,8 +195,8 @@ redisCheck/ │ ├── resources/fixtures/tenant/ │ └── java/... ├── .gitea/ -│ ├── workflows/redis-schema-check.yaml -│ └── config/redis-schema-check-config.yaml +│ ├── workflows/cache-schema-check.yaml +│ └── config/cache-schema-check-config.yaml └── target/ # 构建产物 ``` @@ -204,11 +204,11 @@ redisCheck/ ```xml com.codechecker -redis-schema-checker +cache-schema-checker 1.0.0-SNAPSHOT ``` -打包为 **shaded/fat jar**,主类:`com.codechecker.redis.cli.RedisSchemaCheckerMain` +打包为 **shaded/fat jar**,主类:`com.codechecker.cache.cli.CacheSchemaCheckerMain` --- @@ -217,8 +217,8 @@ redisCheck/ ### 6.1 CLI 参数 ```bash -java -jar redis-schema-checker-1.0.0.jar \ - --config .gitea/config/redis-schema-check-config.yaml \ +java -jar cache-schema-checker-1.0.0.jar \ + --config .gitea/config/cache-schema-check-config.yaml \ --repo-root /path/to/jnpf-java-cloud \ --old-sha abc123 \ --new-sha def456 \ @@ -251,7 +251,7 @@ java -jar redis-schema-checker-1.0.0.jar \ #### Step 1:加载配置 -读取 `redis-schema-check-config.yaml`,合并默认值(见 `docs/配置说明.md`)。 +读取 `cache-schema-check-config.yaml`,合并默认值(见 `docs/配置说明.md`)。 #### Step 2:Git Diff 扫描 @@ -416,15 +416,15 @@ manual_mappings: | 层级 | 位置 | 职责 | |------|------|------| | 默认配置 | 工具 jar 内 `default-config.yaml` | 检测模式、忽略规则、严重级别默认值 | -| 业务覆盖 | `jnpf-java-cloud/.gitea/config/redis-schema-check-config.yaml` | mode、notify、include_modules、manual_mappings | +| 业务覆盖 | `jnpf-java-cloud/.gitea/config/cache-schema-check-config.yaml` | mode、notify、include_modules、manual_mappings | 合并规则:**业务配置覆盖默认配置**,未声明的项沿用默认值。 CLI 调用: ```bash -java -jar redis-schema-checker.jar \ - --config .gitea/config/redis-schema-check-config.yaml \ +java -jar cache-schema-checker.jar \ + --config .gitea/config/cache-schema-check-config.yaml \ ... ``` @@ -452,12 +452,12 @@ notify: 详见 `docs/CI集成说明.md`。核心流程: ```yaml -# jnpf-java-cloud/.gitea/workflows/redis-schema-check.yaml -name: Redis序列化结构检查 +# jnpf-java-cloud/.gitea/workflows/cache-schema-check.yaml +name: 缓存序列化结构检查 on: [push] jobs: - redis-schema-check: + 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: @@ -469,7 +469,7 @@ jobs: - name: 下载检测工具 run: | - # 从 Nexus 下载 redis-schema-checker jar + # 从 Nexus 下载 cache-schema-checker jar ... - name: 执行检测 @@ -478,8 +478,8 @@ jobs: run: | OLD_SHA=$(git rev-parse HEAD~1 2>/dev/null || echo "") [ -z "$OLD_SHA" ] && exit 0 - java -jar /tmp/redis-schema-checker-1.0.0.jar \ - --config .gitea/config/redis-schema-check-config.yaml \ + java -jar /tmp/cache-schema-checker-1.0.0.jar \ + --config .gitea/config/cache-schema-check-config.yaml \ --repo-root . \ --old-sha "$OLD_SHA" \ --new-sha "$(git rev-parse HEAD)" \ @@ -578,7 +578,7 @@ jobs: | # | 决策项 | 结论 | |---|--------|------| | 1 | 阻断范围 | `block` 模式下 **P0/P1/P2 全部阻断**(exit 1) | -| 2 | 发布坐标 | 独立产物 `com.codechecker:redis-schema-checker:1.0.0` | +| 2 | 发布坐标 | 独立产物 `com.codechecker:cache-schema-checker:1.0.0` | | 3 | 配置归属 | **双层配置**:jar 内 `default-config.yaml` + 业务仓覆盖合并 | | 4 | 上线策略 | 先 `notify` 观察 **1 周**,稳定后手动切 `block` | | 5 | 检测范围 | **仅 `src/main/java`**,不扫描测试代码 | diff --git a/docs/配置说明.md b/docs/配置说明.md index 40d1575..aaae850 100644 --- a/docs/配置说明.md +++ b/docs/配置说明.md @@ -1,6 +1,6 @@ -# Redis 序列化结构检测 — 配置说明 +# 缓存序列化结构检测 — 配置说明 -> **双层配置**:工具 jar 内置 `default-config.yaml`(默认) + 业务仓库 `.gitea/config/redis-schema-check-config.yaml`(覆盖) +> **双层配置**:工具 jar 内置 `default-config.yaml`(默认) + 业务仓库 `.gitea/config/cache-schema-check-config.yaml`(覆盖) --- @@ -9,7 +9,7 @@ ```text jar 内 default-config.yaml(工具仓维护) ↓ 深度合并 -业务仓 redis-schema-check-config.yaml(业务仓维护) +业务仓 cache-schema-check-config.yaml(业务仓维护) ↓ 最终生效配置 ``` @@ -21,7 +21,7 @@ jar 内 default-config.yaml(工具仓维护) ### 1.1 业务仓最小配置示例 ```yaml -# jnpf-java-cloud/.gitea/config/redis-schema-check-config.yaml +# jnpf-java-cloud/.gitea/config/cache-schema-check-config.yaml mode: notify notify: @@ -68,7 +68,7 @@ notify: # 无变更时是否也发通知(一般 false) notify_on_clean: false # 消息标题前缀 - title_prefix: "[Redis结构变更]" + title_prefix: "[缓存结构变更]" # 忽略规则 ignore: @@ -173,7 +173,7 @@ mode: block | `enabled` | boolean | true | 是否发企微 | | `webhook_env` | string | WECOM_ROBOT_WEBHOOK | 环境变量名 | | `notify_on_clean` | boolean | false | 无变更时是否通知 | -| `title_prefix` | string | [Redis结构变更] | 消息标题前缀 | +| `title_prefix` | string | [缓存结构变更] | 消息标题前缀 | ### 3.4 ignore.key_patterns @@ -238,7 +238,7 @@ suppressions: ## 5. 企微消息格式示例 ```markdown -## [Redis结构变更] jnpf-java-cloud +## [缓存结构变更] jnpf-java-cloud > 分支: feature/tenant-cache > 提交: a1b2c3d → e4f5g6h diff --git a/pom.xml b/pom.xml index 0e76fa3..49c417e 100644 --- a/pom.xml +++ b/pom.xml @@ -5,12 +5,12 @@ 4.0.0 com.codechecker - redis-schema-checker + cache-schema-checker 1.0.0 jar - redis-schema-checker - 基于 JavaParser 的 Redis value 序列化结构变更检测器 + cache-schema-checker + 基于 JavaParser 的缓存 value 序列化结构变更检测器 11 @@ -74,7 +74,7 @@ - redis-schema-checker-${project.version} + cache-schema-checker-${project.version} org.apache.maven.plugins @@ -101,7 +101,7 @@ - com.codechecker.redis.cli.RedisSchemaCheckerMain + com.codechecker.cache.cli.CacheSchemaCheckerMain diff --git a/src/main/java/com/codechecker/redis/analyze/FileScanner.java b/src/main/java/com/codechecker/cache/analyze/FileScanner.java similarity index 98% rename from src/main/java/com/codechecker/redis/analyze/FileScanner.java rename to src/main/java/com/codechecker/cache/analyze/FileScanner.java index d599a55..ccc4a47 100644 --- a/src/main/java/com/codechecker/redis/analyze/FileScanner.java +++ b/src/main/java/com/codechecker/cache/analyze/FileScanner.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.analyze; +package com.codechecker.cache.analyze; import java.io.IOException; import java.io.UncheckedIOException; diff --git a/src/main/java/com/codechecker/redis/analyze/GlobMatcher.java b/src/main/java/com/codechecker/cache/analyze/GlobMatcher.java similarity index 96% rename from src/main/java/com/codechecker/redis/analyze/GlobMatcher.java rename to src/main/java/com/codechecker/cache/analyze/GlobMatcher.java index c81f6a5..4001e47 100644 --- a/src/main/java/com/codechecker/redis/analyze/GlobMatcher.java +++ b/src/main/java/com/codechecker/cache/analyze/GlobMatcher.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.analyze; +package com.codechecker.cache.analyze; import java.util.regex.Pattern; diff --git a/src/main/java/com/codechecker/redis/analyze/SchemaCheckAnalyzer.java b/src/main/java/com/codechecker/cache/analyze/SchemaCheckAnalyzer.java similarity index 94% rename from src/main/java/com/codechecker/redis/analyze/SchemaCheckAnalyzer.java rename to src/main/java/com/codechecker/cache/analyze/SchemaCheckAnalyzer.java index 63a06e8..287b86f 100644 --- a/src/main/java/com/codechecker/redis/analyze/SchemaCheckAnalyzer.java +++ b/src/main/java/com/codechecker/cache/analyze/SchemaCheckAnalyzer.java @@ -1,20 +1,20 @@ -package com.codechecker.redis.analyze; +package com.codechecker.cache.analyze; -import com.codechecker.redis.config.CheckerConfig; -import com.codechecker.redis.detector.RedisWritePointDetector; -import com.codechecker.redis.detector.WritePoint; -import com.codechecker.redis.diff.ChangeType; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.SchemaDiffer; -import com.codechecker.redis.diff.Severity; -import com.codechecker.redis.git.GitDiffScanner; -import com.codechecker.redis.git.GitException; -import com.codechecker.redis.report.CheckReport; -import com.codechecker.redis.report.KeyStructureChange; -import com.codechecker.redis.schema.JavaSchemaExtractor; -import com.codechecker.redis.schema.SkeletonJsonRenderer; -import com.codechecker.redis.schema.SourceIndex; -import com.codechecker.redis.schema.TypeSchema; +import com.codechecker.cache.config.CheckerConfig; +import com.codechecker.cache.detector.RedisWritePointDetector; +import com.codechecker.cache.detector.WritePoint; +import com.codechecker.cache.diff.ChangeType; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.SchemaDiffer; +import com.codechecker.cache.diff.Severity; +import com.codechecker.cache.git.GitDiffScanner; +import com.codechecker.cache.git.GitException; +import com.codechecker.cache.report.CheckReport; +import com.codechecker.cache.report.KeyStructureChange; +import com.codechecker.cache.schema.JavaSchemaExtractor; +import com.codechecker.cache.schema.SkeletonJsonRenderer; +import com.codechecker.cache.schema.SourceIndex; +import com.codechecker.cache.schema.TypeSchema; import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.body.TypeDeclaration; @@ -144,7 +144,7 @@ public class SchemaCheckAnalyzer { SchemaChange c = new SchemaChange(ChangeType.WRITE_POINT_ADDED); c.setKeyPattern(nw.getResolvedKeyPattern()); c.setWriteLocation(nw.location()); - c.setMessage("新增 Redis 写入点,value 类型: " + shortType(nw.getResolvedValueType())); + c.setMessage("新增缓存写入点,value 类型: " + shortType(nw.getResolvedValueType())); allChanges.add(c); TypeSchema newSchema = extractorNew.extract(nw.getResolvedValueType(), nw.isRootArray()); mergeKeyChange(keyChanges, nw.getResolvedKeyPattern(), @@ -163,7 +163,7 @@ public class SchemaCheckAnalyzer { SchemaChange c = new SchemaChange(ChangeType.WRITE_POINT_REMOVED); c.setKeyPattern(ow.getResolvedKeyPattern()); c.setWriteLocation(ow.location()); - c.setMessage("删除 Redis 写入点,原 value 类型: " + shortType(ow.getResolvedValueType())); + c.setMessage("删除缓存写入点,原 value 类型: " + shortType(ow.getResolvedValueType())); allChanges.add(c); TypeSchema oldSchema = extractorOld.extract(ow.getResolvedValueType(), ow.isRootArray()); mergeKeyChange(keyChanges, ow.getResolvedKeyPattern(), diff --git a/src/main/java/com/codechecker/redis/cli/RedisSchemaCheckerMain.java b/src/main/java/com/codechecker/cache/cli/CacheSchemaCheckerMain.java similarity index 76% rename from src/main/java/com/codechecker/redis/cli/RedisSchemaCheckerMain.java rename to src/main/java/com/codechecker/cache/cli/CacheSchemaCheckerMain.java index 8f1badd..ca36351 100644 --- a/src/main/java/com/codechecker/redis/cli/RedisSchemaCheckerMain.java +++ b/src/main/java/com/codechecker/cache/cli/CacheSchemaCheckerMain.java @@ -1,27 +1,26 @@ -package com.codechecker.redis.cli; +package com.codechecker.cache.cli; -import com.codechecker.redis.analyze.SchemaCheckAnalyzer; -import com.codechecker.redis.config.CheckerConfig; -import com.codechecker.redis.config.ConfigLoader; -import com.codechecker.redis.notify.WeComNotifier; -import com.codechecker.redis.report.CheckReport; -import com.codechecker.redis.report.ReportBuilder; +import com.codechecker.cache.analyze.SchemaCheckAnalyzer; +import com.codechecker.cache.config.CheckerConfig; +import com.codechecker.cache.config.ConfigLoader; +import com.codechecker.cache.notify.WeComNotifier; +import com.codechecker.cache.report.CheckReport; +import com.codechecker.cache.report.ReportBuilder; import picocli.CommandLine; import picocli.CommandLine.Command; import picocli.CommandLine.Option; import java.nio.file.Path; -import java.nio.file.Paths; import java.util.concurrent.Callable; /** * 命令行入口。退出码:0 通过 / 1 阻断 / 2 执行错误。 */ -@Command(name = "redis-schema-checker", +@Command(name = "cache-schema-checker", mixinStandardHelpOptions = true, - version = "redis-schema-checker 1.0.0", - description = "检测两次提交间 Redis value 序列化结构变更并通过企微机器人通知。") -public class RedisSchemaCheckerMain implements Callable { + version = "cache-schema-checker 1.0.0", + description = "检测两次提交间缓存 value 序列化结构变更并通过企微机器人通知。") +public class CacheSchemaCheckerMain implements Callable { @Option(names = "--config", required = true, description = "业务仓库检测配置文件路径") private Path configPath; @@ -56,12 +55,12 @@ public class RedisSchemaCheckerMain implements Callable { CheckerConfig config = ConfigLoader.load(configPath); if (!config.isEnabled()) { - System.out.println("[redis-schema-checker] 总开关 enabled=false,跳过检测。"); + System.out.println("[cache-schema-checker] 总开关 enabled=false,跳过检测。"); return 0; } if (oldSha == null || oldSha.trim().isEmpty()) { - System.out.println("[redis-schema-checker] 无对比基准提交,跳过检测。"); + System.out.println("[cache-schema-checker] 无对比基准提交,跳过检测。"); return 0; } @@ -84,22 +83,22 @@ public class RedisSchemaCheckerMain implements Callable { String webhook = config.getNotify().getWebhookUrl(); String markdown = builder.toMarkdown(report); boolean ok = new WeComNotifier().sendMarkdown(webhook, markdown); - System.out.println("[redis-schema-checker] 企微通知发送: " + (ok ? "成功" : "失败/跳过")); + System.out.println("[cache-schema-checker] 企微通知发送: " + (ok ? "成功" : "失败/跳过")); } if (report.isBlocked()) { - System.out.println("[redis-schema-checker] block 模式命中,流水线将被阻断(exit 1)。"); + System.out.println("[cache-schema-checker] block 模式命中,流水线将被阻断(exit 1)。"); } return report.getExitCode(); } catch (Exception e) { - System.err.println("[redis-schema-checker] 执行错误: " + e.getMessage()); + System.err.println("[cache-schema-checker] 执行错误: " + e.getMessage()); e.printStackTrace(); return 2; } } public static void main(String[] args) { - int exitCode = new CommandLine(new RedisSchemaCheckerMain()).execute(args); + int exitCode = new CommandLine(new CacheSchemaCheckerMain()).execute(args); System.exit(exitCode); } } diff --git a/src/main/java/com/codechecker/redis/config/CheckerConfig.java b/src/main/java/com/codechecker/cache/config/CheckerConfig.java similarity index 98% rename from src/main/java/com/codechecker/redis/config/CheckerConfig.java rename to src/main/java/com/codechecker/cache/config/CheckerConfig.java index 7d4a130..f0c32ac 100644 --- a/src/main/java/com/codechecker/redis/config/CheckerConfig.java +++ b/src/main/java/com/codechecker/cache/config/CheckerConfig.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.config; +package com.codechecker.cache.config; import java.util.ArrayList; import java.util.LinkedHashMap; @@ -41,7 +41,7 @@ public class CheckerConfig { /** 企微机器人 Webhook 完整 URL */ private String webhookUrl = ""; private boolean notifyOnClean = false; - private String titlePrefix = "[Redis结构变更]"; + private String titlePrefix = "[缓存结构变更]"; public boolean isEnabled() { return enabled; diff --git a/src/main/java/com/codechecker/redis/config/ConfigLoader.java b/src/main/java/com/codechecker/cache/config/ConfigLoader.java similarity index 98% rename from src/main/java/com/codechecker/redis/config/ConfigLoader.java rename to src/main/java/com/codechecker/cache/config/ConfigLoader.java index 733d91b..b275b20 100644 --- a/src/main/java/com/codechecker/redis/config/ConfigLoader.java +++ b/src/main/java/com/codechecker/cache/config/ConfigLoader.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.config; +package com.codechecker.cache.config; import org.yaml.snakeyaml.Yaml; @@ -87,7 +87,7 @@ public final class ConfigLoader { n.setEnabled(bool(notify, "enabled", true)); n.setWebhookUrl(resolveWebhookUrl(notify)); n.setNotifyOnClean(bool(notify, "notify_on_clean", false)); - n.setTitlePrefix(str(notify, "title_prefix", "[Redis结构变更]")); + n.setTitlePrefix(str(notify, "title_prefix", "[缓存结构变更]")); Map ignore = asMap(map.get("ignore")); CheckerConfig.Ignore ig = config.getIgnore(); diff --git a/src/main/java/com/codechecker/redis/detector/RedisWritePointDetector.java b/src/main/java/com/codechecker/cache/detector/RedisWritePointDetector.java similarity index 98% rename from src/main/java/com/codechecker/redis/detector/RedisWritePointDetector.java rename to src/main/java/com/codechecker/cache/detector/RedisWritePointDetector.java index 2063f3a..8c7e7b4 100644 --- a/src/main/java/com/codechecker/redis/detector/RedisWritePointDetector.java +++ b/src/main/java/com/codechecker/cache/detector/RedisWritePointDetector.java @@ -1,7 +1,7 @@ -package com.codechecker.redis.detector; +package com.codechecker.cache.detector; -import com.codechecker.redis.key.RedisKeyResolver; -import com.codechecker.redis.schema.SourceIndex; +import com.codechecker.cache.key.RedisKeyResolver; +import com.codechecker.cache.schema.SourceIndex; import com.github.javaparser.StaticJavaParser; import com.github.javaparser.ast.CompilationUnit; import com.github.javaparser.ast.body.CallableDeclaration; diff --git a/src/main/java/com/codechecker/redis/detector/WritePoint.java b/src/main/java/com/codechecker/cache/detector/WritePoint.java similarity index 98% rename from src/main/java/com/codechecker/redis/detector/WritePoint.java rename to src/main/java/com/codechecker/cache/detector/WritePoint.java index bbe8524..292aef2 100644 --- a/src/main/java/com/codechecker/redis/detector/WritePoint.java +++ b/src/main/java/com/codechecker/cache/detector/WritePoint.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.detector; +package com.codechecker.cache.detector; /** * 一个 Redis value 写入点的静态描述。 diff --git a/src/main/java/com/codechecker/redis/diff/ChangeType.java b/src/main/java/com/codechecker/cache/diff/ChangeType.java similarity index 96% rename from src/main/java/com/codechecker/redis/diff/ChangeType.java rename to src/main/java/com/codechecker/cache/diff/ChangeType.java index 878acef..e8c6392 100644 --- a/src/main/java/com/codechecker/redis/diff/ChangeType.java +++ b/src/main/java/com/codechecker/cache/diff/ChangeType.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.diff; +package com.codechecker.cache.diff; /** * 结构变更类型及其默认严重级别。 diff --git a/src/main/java/com/codechecker/redis/diff/SchemaChange.java b/src/main/java/com/codechecker/cache/diff/SchemaChange.java similarity index 98% rename from src/main/java/com/codechecker/redis/diff/SchemaChange.java rename to src/main/java/com/codechecker/cache/diff/SchemaChange.java index ba2c6a8..f1540fe 100644 --- a/src/main/java/com/codechecker/redis/diff/SchemaChange.java +++ b/src/main/java/com/codechecker/cache/diff/SchemaChange.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.diff; +package com.codechecker.cache.diff; /** * 一条结构变更记录。 diff --git a/src/main/java/com/codechecker/redis/diff/SchemaDiffer.java b/src/main/java/com/codechecker/cache/diff/SchemaDiffer.java similarity index 96% rename from src/main/java/com/codechecker/redis/diff/SchemaDiffer.java rename to src/main/java/com/codechecker/cache/diff/SchemaDiffer.java index d2b7363..7ef88a1 100644 --- a/src/main/java/com/codechecker/redis/diff/SchemaDiffer.java +++ b/src/main/java/com/codechecker/cache/diff/SchemaDiffer.java @@ -1,8 +1,8 @@ -package com.codechecker.redis.diff; +package com.codechecker.cache.diff; -import com.codechecker.redis.schema.FieldSchema; -import com.codechecker.redis.schema.JsonType; -import com.codechecker.redis.schema.TypeSchema; +import com.codechecker.cache.schema.FieldSchema; +import com.codechecker.cache.schema.JsonType; +import com.codechecker.cache.schema.TypeSchema; import java.util.ArrayList; import java.util.LinkedHashMap; diff --git a/src/main/java/com/codechecker/redis/diff/Severity.java b/src/main/java/com/codechecker/cache/diff/Severity.java similarity index 69% rename from src/main/java/com/codechecker/redis/diff/Severity.java rename to src/main/java/com/codechecker/cache/diff/Severity.java index d1751d2..84e32b3 100644 --- a/src/main/java/com/codechecker/redis/diff/Severity.java +++ b/src/main/java/com/codechecker/cache/diff/Severity.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.diff; +package com.codechecker.cache.diff; /** * 变更严重级别。 diff --git a/src/main/java/com/codechecker/redis/git/GitDiffScanner.java b/src/main/java/com/codechecker/cache/git/GitDiffScanner.java similarity index 99% rename from src/main/java/com/codechecker/redis/git/GitDiffScanner.java rename to src/main/java/com/codechecker/cache/git/GitDiffScanner.java index 336524e..19672db 100644 --- a/src/main/java/com/codechecker/redis/git/GitDiffScanner.java +++ b/src/main/java/com/codechecker/cache/git/GitDiffScanner.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.git; +package com.codechecker.cache.git; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; diff --git a/src/main/java/com/codechecker/redis/git/GitException.java b/src/main/java/com/codechecker/cache/git/GitException.java similarity index 87% rename from src/main/java/com/codechecker/redis/git/GitException.java rename to src/main/java/com/codechecker/cache/git/GitException.java index 6a485c9..a0540e4 100644 --- a/src/main/java/com/codechecker/redis/git/GitException.java +++ b/src/main/java/com/codechecker/cache/git/GitException.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.git; +package com.codechecker.cache.git; /** * Git 操作异常。 diff --git a/src/main/java/com/codechecker/redis/key/RedisKeyResolver.java b/src/main/java/com/codechecker/cache/key/RedisKeyResolver.java similarity index 98% rename from src/main/java/com/codechecker/redis/key/RedisKeyResolver.java rename to src/main/java/com/codechecker/cache/key/RedisKeyResolver.java index 64b2c9d..e69dd31 100644 --- a/src/main/java/com/codechecker/redis/key/RedisKeyResolver.java +++ b/src/main/java/com/codechecker/cache/key/RedisKeyResolver.java @@ -1,6 +1,6 @@ -package com.codechecker.redis.key; +package com.codechecker.cache.key; -import com.codechecker.redis.schema.SourceIndex; +import com.codechecker.cache.schema.SourceIndex; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.body.FieldDeclaration; import com.github.javaparser.ast.body.MethodDeclaration; diff --git a/src/main/java/com/codechecker/redis/notify/WeComNotifier.java b/src/main/java/com/codechecker/cache/notify/WeComNotifier.java similarity index 98% rename from src/main/java/com/codechecker/redis/notify/WeComNotifier.java rename to src/main/java/com/codechecker/cache/notify/WeComNotifier.java index 507cd47..2c6a359 100644 --- a/src/main/java/com/codechecker/redis/notify/WeComNotifier.java +++ b/src/main/java/com/codechecker/cache/notify/WeComNotifier.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.notify; +package com.codechecker.cache.notify; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/src/main/java/com/codechecker/redis/report/CheckReport.java b/src/main/java/com/codechecker/cache/report/CheckReport.java similarity index 94% rename from src/main/java/com/codechecker/redis/report/CheckReport.java rename to src/main/java/com/codechecker/cache/report/CheckReport.java index 7593a65..f3b9ea1 100644 --- a/src/main/java/com/codechecker/redis/report/CheckReport.java +++ b/src/main/java/com/codechecker/cache/report/CheckReport.java @@ -1,7 +1,7 @@ -package com.codechecker.redis.report; +package com.codechecker.cache.report; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.Severity; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.Severity; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/codechecker/redis/report/KeyStructureChange.java b/src/main/java/com/codechecker/cache/report/KeyStructureChange.java similarity index 92% rename from src/main/java/com/codechecker/redis/report/KeyStructureChange.java rename to src/main/java/com/codechecker/cache/report/KeyStructureChange.java index ff285c9..3301a05 100644 --- a/src/main/java/com/codechecker/redis/report/KeyStructureChange.java +++ b/src/main/java/com/codechecker/cache/report/KeyStructureChange.java @@ -1,7 +1,7 @@ -package com.codechecker.redis.report; +package com.codechecker.cache.report; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.Severity; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.Severity; import java.util.ArrayList; import java.util.List; diff --git a/src/main/java/com/codechecker/redis/report/ReportBuilder.java b/src/main/java/com/codechecker/cache/report/ReportBuilder.java similarity index 92% rename from src/main/java/com/codechecker/redis/report/ReportBuilder.java rename to src/main/java/com/codechecker/cache/report/ReportBuilder.java index 4b026bb..d0e12d4 100644 --- a/src/main/java/com/codechecker/redis/report/ReportBuilder.java +++ b/src/main/java/com/codechecker/cache/report/ReportBuilder.java @@ -1,7 +1,7 @@ -package com.codechecker.redis.report; +package com.codechecker.cache.report; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.Severity; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.Severity; import java.util.ArrayList; import java.util.EnumMap; @@ -20,7 +20,7 @@ public class ReportBuilder { private final String titlePrefix; public ReportBuilder(String titlePrefix) { - this.titlePrefix = titlePrefix == null ? "[Redis结构变更]" : titlePrefix; + this.titlePrefix = titlePrefix == null ? "[缓存结构变更]" : titlePrefix; } public String toMarkdown(CheckReport report) { @@ -37,7 +37,7 @@ public class ReportBuilder { if (keys == null || keys.isEmpty()) { // 兼容仅有字段明细时退化展示 if (report.getChanges().isEmpty()) { - sb.append("未检测到 Redis 序列化结构变更。\n"); + sb.append("未检测到缓存序列化结构变更。\n"); } else { for (SchemaChange c : report.getChanges()) { sb.append("- `").append(nvl(c.getKeyPattern())).append("`\n"); @@ -71,7 +71,7 @@ public class ReportBuilder { public String toConsole(CheckReport report) { StringBuilder sb = new StringBuilder(); if (!report.hasChanges()) { - sb.append("未检测到 Redis 序列化结构变更。\n"); + sb.append("未检测到缓存序列化结构变更。\n"); return sb.toString(); } @@ -125,8 +125,8 @@ public class ReportBuilder { + trimmed.substring(colonEn + 1).trim(); } String[] knownPrefixes = { - "删除字段 ", "新增字段 ", "字段路径迁移 ", "新增包装层 ", "新增 Redis 写入点,", - "删除 Redis 写入点,原 value 类型: " + "删除字段 ", "新增字段 ", "字段路径迁移 ", "新增包装层 ", "新增缓存写入点,", + "删除缓存写入点,原 value 类型: " }; for (String prefix : knownPrefixes) { if (trimmed.startsWith(prefix)) { diff --git a/src/main/java/com/codechecker/redis/schema/AnnotationSupport.java b/src/main/java/com/codechecker/cache/schema/AnnotationSupport.java similarity index 98% rename from src/main/java/com/codechecker/redis/schema/AnnotationSupport.java rename to src/main/java/com/codechecker/cache/schema/AnnotationSupport.java index 8d0cff8..d76cb8a 100644 --- a/src/main/java/com/codechecker/redis/schema/AnnotationSupport.java +++ b/src/main/java/com/codechecker/cache/schema/AnnotationSupport.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import com.github.javaparser.ast.body.FieldDeclaration; import com.github.javaparser.ast.expr.AnnotationExpr; diff --git a/src/main/java/com/codechecker/redis/schema/FieldSchema.java b/src/main/java/com/codechecker/cache/schema/FieldSchema.java similarity index 97% rename from src/main/java/com/codechecker/redis/schema/FieldSchema.java rename to src/main/java/com/codechecker/cache/schema/FieldSchema.java index 4e32c2b..3893ab1 100644 --- a/src/main/java/com/codechecker/redis/schema/FieldSchema.java +++ b/src/main/java/com/codechecker/cache/schema/FieldSchema.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import java.util.Objects; diff --git a/src/main/java/com/codechecker/redis/schema/JavaSchemaExtractor.java b/src/main/java/com/codechecker/cache/schema/JavaSchemaExtractor.java similarity index 99% rename from src/main/java/com/codechecker/redis/schema/JavaSchemaExtractor.java rename to src/main/java/com/codechecker/cache/schema/JavaSchemaExtractor.java index 249e26e..1486f70 100644 --- a/src/main/java/com/codechecker/redis/schema/JavaSchemaExtractor.java +++ b/src/main/java/com/codechecker/cache/schema/JavaSchemaExtractor.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import com.github.javaparser.ast.body.ClassOrInterfaceDeclaration; import com.github.javaparser.ast.body.FieldDeclaration; diff --git a/src/main/java/com/codechecker/redis/schema/JsonType.java b/src/main/java/com/codechecker/cache/schema/JsonType.java similarity index 80% rename from src/main/java/com/codechecker/redis/schema/JsonType.java rename to src/main/java/com/codechecker/cache/schema/JsonType.java index a96c3ef..ac821b5 100644 --- a/src/main/java/com/codechecker/redis/schema/JsonType.java +++ b/src/main/java/com/codechecker/cache/schema/JsonType.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; /** * 序列化后 JSON 值的粗粒度类型。 diff --git a/src/main/java/com/codechecker/redis/schema/SkeletonJsonRenderer.java b/src/main/java/com/codechecker/cache/schema/SkeletonJsonRenderer.java similarity index 99% rename from src/main/java/com/codechecker/redis/schema/SkeletonJsonRenderer.java rename to src/main/java/com/codechecker/cache/schema/SkeletonJsonRenderer.java index 9f78dd4..4d57c04 100644 --- a/src/main/java/com/codechecker/redis/schema/SkeletonJsonRenderer.java +++ b/src/main/java/com/codechecker/cache/schema/SkeletonJsonRenderer.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import java.util.ArrayList; import java.util.LinkedHashMap; diff --git a/src/main/java/com/codechecker/redis/schema/SourceIndex.java b/src/main/java/com/codechecker/cache/schema/SourceIndex.java similarity index 99% rename from src/main/java/com/codechecker/redis/schema/SourceIndex.java rename to src/main/java/com/codechecker/cache/schema/SourceIndex.java index 01035ee..5271b88 100644 --- a/src/main/java/com/codechecker/redis/schema/SourceIndex.java +++ b/src/main/java/com/codechecker/cache/schema/SourceIndex.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import com.github.javaparser.ParserConfiguration; import com.github.javaparser.StaticJavaParser; diff --git a/src/main/java/com/codechecker/redis/schema/TypeSchema.java b/src/main/java/com/codechecker/cache/schema/TypeSchema.java similarity index 95% rename from src/main/java/com/codechecker/redis/schema/TypeSchema.java rename to src/main/java/com/codechecker/cache/schema/TypeSchema.java index 12ff62a..dddd508 100644 --- a/src/main/java/com/codechecker/redis/schema/TypeSchema.java +++ b/src/main/java/com/codechecker/cache/schema/TypeSchema.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; import java.util.LinkedHashMap; import java.util.Map; diff --git a/src/main/resources/default-config.yaml b/src/main/resources/default-config.yaml index bd511bb..57113e3 100644 --- a/src/main/resources/default-config.yaml +++ b/src/main/resources/default-config.yaml @@ -1,4 +1,4 @@ -# redis-schema-checker 内置默认配置 +# cache-schema-checker 内置默认配置 # 业务仓库通过 --config 指定的配置会与本文件深度合并(业务配置优先)。 # 总开关:false 时不执行检测、不发通知、流水线直接通过 @@ -19,7 +19,7 @@ notify: enabled: true webhook_url: "" notify_on_clean: false - title_prefix: "[Redis结构变更]" + title_prefix: "[缓存结构变更]" # 忽略规则 ignore: diff --git a/src/test/java/com/codechecker/redis/TenantScenarioTest.java b/src/test/java/com/codechecker/cache/TenantScenarioTest.java similarity index 88% rename from src/test/java/com/codechecker/redis/TenantScenarioTest.java rename to src/test/java/com/codechecker/cache/TenantScenarioTest.java index 87ee888..51b263a 100644 --- a/src/test/java/com/codechecker/redis/TenantScenarioTest.java +++ b/src/test/java/com/codechecker/cache/TenantScenarioTest.java @@ -1,13 +1,13 @@ -package com.codechecker.redis; +package com.codechecker.cache; -import com.codechecker.redis.detector.RedisWritePointDetector; -import com.codechecker.redis.detector.WritePoint; -import com.codechecker.redis.diff.ChangeType; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.SchemaDiffer; -import com.codechecker.redis.schema.JavaSchemaExtractor; -import com.codechecker.redis.schema.SourceIndex; -import com.codechecker.redis.schema.TypeSchema; +import com.codechecker.cache.detector.RedisWritePointDetector; +import com.codechecker.cache.detector.WritePoint; +import com.codechecker.cache.diff.ChangeType; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.SchemaDiffer; +import com.codechecker.cache.schema.JavaSchemaExtractor; +import com.codechecker.cache.schema.SourceIndex; +import com.codechecker.cache.schema.TypeSchema; import org.junit.jupiter.api.Test; import java.util.HashSet; diff --git a/src/test/java/com/codechecker/redis/TestSupport.java b/src/test/java/com/codechecker/cache/TestSupport.java similarity index 97% rename from src/test/java/com/codechecker/redis/TestSupport.java rename to src/test/java/com/codechecker/cache/TestSupport.java index ff56ec9..cb00508 100644 --- a/src/test/java/com/codechecker/redis/TestSupport.java +++ b/src/test/java/com/codechecker/cache/TestSupport.java @@ -1,4 +1,4 @@ -package com.codechecker.redis; +package com.codechecker.cache; import java.io.IOException; import java.io.InputStream; diff --git a/src/test/java/com/codechecker/redis/analyze/GlobMatcherTest.java b/src/test/java/com/codechecker/cache/analyze/GlobMatcherTest.java similarity index 95% rename from src/test/java/com/codechecker/redis/analyze/GlobMatcherTest.java rename to src/test/java/com/codechecker/cache/analyze/GlobMatcherTest.java index edb91af..556cecb 100644 --- a/src/test/java/com/codechecker/redis/analyze/GlobMatcherTest.java +++ b/src/test/java/com/codechecker/cache/analyze/GlobMatcherTest.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.analyze; +package com.codechecker.cache.analyze; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/codechecker/redis/config/ConfigLoaderTest.java b/src/test/java/com/codechecker/cache/config/ConfigLoaderTest.java similarity index 98% rename from src/test/java/com/codechecker/redis/config/ConfigLoaderTest.java rename to src/test/java/com/codechecker/cache/config/ConfigLoaderTest.java index 3076b2c..60c85ee 100644 --- a/src/test/java/com/codechecker/redis/config/ConfigLoaderTest.java +++ b/src/test/java/com/codechecker/cache/config/ConfigLoaderTest.java @@ -1,4 +1,4 @@ -package com.codechecker.redis.config; +package com.codechecker.cache.config; import org.junit.jupiter.api.Test; diff --git a/src/test/java/com/codechecker/redis/diff/SchemaDifferTest.java b/src/test/java/com/codechecker/cache/diff/SchemaDifferTest.java similarity index 93% rename from src/test/java/com/codechecker/redis/diff/SchemaDifferTest.java rename to src/test/java/com/codechecker/cache/diff/SchemaDifferTest.java index a9fa2ff..e6112aa 100644 --- a/src/test/java/com/codechecker/redis/diff/SchemaDifferTest.java +++ b/src/test/java/com/codechecker/cache/diff/SchemaDifferTest.java @@ -1,8 +1,8 @@ -package com.codechecker.redis.diff; +package com.codechecker.cache.diff; -import com.codechecker.redis.schema.FieldSchema; -import com.codechecker.redis.schema.JsonType; -import com.codechecker.redis.schema.TypeSchema; +import com.codechecker.cache.schema.FieldSchema; +import com.codechecker.cache.schema.JsonType; +import com.codechecker.cache.schema.TypeSchema; import org.junit.jupiter.api.Test; import java.util.List; diff --git a/src/test/java/com/codechecker/redis/report/ReportBuilderTest.java b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java similarity index 86% rename from src/test/java/com/codechecker/redis/report/ReportBuilderTest.java rename to src/test/java/com/codechecker/cache/report/ReportBuilderTest.java index 9203946..0b9d492 100644 --- a/src/test/java/com/codechecker/redis/report/ReportBuilderTest.java +++ b/src/test/java/com/codechecker/cache/report/ReportBuilderTest.java @@ -1,8 +1,8 @@ -package com.codechecker.redis.report; +package com.codechecker.cache.report; -import com.codechecker.redis.diff.ChangeType; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.Severity; +import com.codechecker.cache.diff.ChangeType; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.Severity; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertFalse; @@ -35,9 +35,9 @@ class ReportBuilderTest { key.setSeverity(Severity.P0); report.getKeyChanges().add(key); - String md = new ReportBuilder("[Redis数据结构变更]").toMarkdown(report); + String md = new ReportBuilder("[缓存结构变更]").toMarkdown(report); - assertTrue(md.startsWith("## [Redis数据结构变更] jnpf-java-cloud")); + assertTrue(md.startsWith("## [缓存结构变更] jnpf-java-cloud")); assertTrue(md.contains("> **分支**: code/redis_change_detection_v1.0")); assertTrue(md.contains("> **时间**: 2026-07-13 16:54:17")); assertTrue(md.contains("`tenant:db:content:*`")); @@ -69,7 +69,7 @@ class ReportBuilderTest { key.setNewSkeletonJson("{}"); report.getKeyChanges().add(key); - String console = new ReportBuilder("[Redis数据结构变更]").toConsole(report); + String console = new ReportBuilder("[缓存结构变更]").toConsole(report); assertTrue(console.contains("======== 字段明细 ========")); assertTrue(console.contains("**位置**: Foo#bar:1")); assertTrue(console.contains("**删除字段**: x")); diff --git a/src/test/java/com/codechecker/redis/schema/SkeletonJsonRendererTest.java b/src/test/java/com/codechecker/cache/schema/SkeletonJsonRendererTest.java similarity index 91% rename from src/test/java/com/codechecker/redis/schema/SkeletonJsonRendererTest.java rename to src/test/java/com/codechecker/cache/schema/SkeletonJsonRendererTest.java index 321b864..caf8d8b 100644 --- a/src/test/java/com/codechecker/redis/schema/SkeletonJsonRendererTest.java +++ b/src/test/java/com/codechecker/cache/schema/SkeletonJsonRendererTest.java @@ -1,10 +1,10 @@ -package com.codechecker.redis.schema; +package com.codechecker.cache.schema; -import com.codechecker.redis.TestSupport; -import com.codechecker.redis.detector.RedisWritePointDetector; -import com.codechecker.redis.detector.WritePoint; -import com.codechecker.redis.diff.SchemaChange; -import com.codechecker.redis.diff.SchemaDiffer; +import com.codechecker.cache.TestSupport; +import com.codechecker.cache.detector.RedisWritePointDetector; +import com.codechecker.cache.detector.WritePoint; +import com.codechecker.cache.diff.SchemaChange; +import com.codechecker.cache.diff.SchemaDiffer; import org.junit.jupiter.api.Test; import java.util.HashSet;