ZH Testing and Publishing - AlanDevise/TsGate GitHub Wiki
2.1.3 已通过 GitHub 源码/标签和 Maven Central 发布,同 SHA CI 与公开制品核验通过。 当前坐标为 2.1.3;详见 2.1.3 发布说明.
TsGate 2.1.3 发布与验证
冻结实现已通过本地预发布验证:JDK 17/21/25 各 1,476 项单元检查、323 项 Docker 集成检查及 83 项 Python 检查,失败/错误/跳过均为零,自有资源清理通过。发布准备前已核对 166 项源码输入清单及实现差异。这是此前本地预发布结果,不是新执行的 2.1.3 JDK 21/25 或 Docker 回归。
最终源码 18fccb6 与标签 v2.1.3 已推送;该源码 fresh 签名 Temurin 17 构建通过 1,476 项单元检查。九个 JAR 模块的 27 JAR/11 POM 审计、38 份有效签名及 228 个签名上传包条目均通过,凭据扫描通过。上传包 SHA-256:e192aec3177c6cb5ab2dd9cd4d6a61b31a6c8c2f01e7a0f921d599d90612bb3f。同 SHA 标签 CI 9 个作业全部通过,覆盖 JDK 17/21/25 各 1,476 项单元检查及 323 项 Docker 集成检查。Central 已进入 PUBLISHED;从公共 Maven 仓库下载的 38 份主体制品及 38 份公开签名,SHA-256 均与签名上传包一致。
测试专用 tsgate-core/src/test/resources/ci/backend-registration.json 与可移植检查器 tsgate-core/src/test/scripts/verify-backend-registration.py 交叉核对实际模块启用、starter imports、BOM、共享契约、Docker/CI 覆盖和制品清单。在仓库根目录执行 python3 tsgate-core/src/test/scripts/verify-backend-registration.py;公共运行器在 Maven/Docker 准备前执行门禁,既有 CI 的 Python 回归覆盖合法及缺项登记。不增加生产注册表或 SPI。
TsGate 2.1.2 仅 GitHub 发行
2.1.2 最终源码本地验证通过:三个 JDK 各 1,233 项、Docker 304 次测试执行、Python 71 项、actionlint、27 JAR/11 POM 无签名审计及完整 JAR 映射微基准均完成。源码与带注解 v2.1.2 标签已推送,main CI及标签 CI各 9 个作业完整通过,下载的原始报告、源码身份和清理均已核对;main 覆盖 OpenGemini 两单节点 92 项,tag 覆盖四部署 184 项,每组另通过三个 JDK 各 1,233 项及代表性 Docker 120 项。交付使用 GitHub 源码/标签、发行包与报告及同步双语 Wiki。本版本不签名、不上传或部署 Central,该历史版本发布时 Maven Central 为 2.1.0。先从源码安装一致版本,再使用 2.1.2 Maven 依赖。完整证据见 2.1.2 发布说明,下方旧版发布记录保留为历史。
TsGate 2.1.1 仅 GitHub 发行
2.1.1 通过 GitHub 标签/发行分发。本版本不执行 Central 上传或发布;该历史版本发布时 Maven Central 公开依赖为 2.1.0。按开始使用执行 mvn clean install,可安装一致的 2.1.1 父 POM/BOM/模块到本地仓库。
模块布局仍为十一个 Maven 模块;无签名 release-artifacts profile 生成二进制、源码和 Javadoc JAR 各九份。构建/验证附件及发布 GitHub 发行,与后文供将来另行授权发布时使用的 Central 流程分别处理。2.1.1 发布说明记录本轮真实测试、源码身份和制品证据;下方 2.1.0 记录继续作为历史证据。
2.1.0 制品集合
TsGate 2.1.0 新增 tsgate-opengemini 与 tsgate-opengemini-spring-boot-starter,构建包含四个后端、九个 JAR 模块,2.1.0 BOM 管理这两个新模块。Central 2.0.0 不包含它们。准确的默认引擎版本与拓扑验证范围见 OpenGemini 接入指南。 2.1.0 生成 27 个 JAR 附件(二进制、源码、Javadoc 各九个);已发布 2.0.0 与下方历史验证快照仍为七个 JAR 模块 / 21 个 JAR 附件。编译和打包不代表已经上传或发布发行版本。
TsGate 2.1.0 发布状态
TsGate 2.1.0 已正式发布到 Maven Central。部署 10fe41e4-7cf7-45a6-bab1-f2b1e6098430 于 2026-10-03(Asia/Shanghai)进入 PUBLISHED 状态。发行对应 源码提交 8cf119e 与标签 v2.1.0。
本次发行包含十一个 Maven 模块:父 POM、独立 BOM 和九个 JAR 模块。全部 38 份主体制品(十一个 POM、27 份 binary/source/Javadoc 归档)均已从 Maven 公共仓库下载,SHA-256 全部与签名上传包一致。上传前已验证全部 38 份 PGP 签名及四种校验和。最终源码的 JDK 17/21/25 GitHub CI 也全部通过;准确的本地单测与 Docker 结果见兼容性与验证。
已发布坐标的 groupId 为 io.github.alandevise,版本为 2.1.0:BOM · OpenGemini starter。签名公钥指纹:D7FB5E1158537706FB2023D62DCFFB6B26BE7EB5。签名上传包 SHA-256:b6cbc4927587223bfbad9b613c63cf0894e1f014571368db8de4d4ce580c1193。下方历史 2.0.0 发布记录保持原样。
运行测试
可移植测试源码和可复用配置已纳入各模块 src/test/。本地报告、机器专属夹具及凭据保留在 Git 忽略的 .local-test/ 中。准备 Java 17+、Maven 3.9+ 和 Python 3,在仓库根目录执行;集成测试另需 Docker:
python3 tsgate-core/src/test/scripts/run-tests.py unit --spring-boot 2.7.18
python3 tsgate-core/src/test/scripts/run-tests.py unit --spring-boot 2.7.18 --release-artifacts
python3 tsgate-core/src/test/scripts/run-tests.py docker --spring-boot 2.7.18
通过 JAVA_HOME 选择 JDK。依赖缓存齐全时可使用 --offline --maven-repo /path/to/cache,复用已有数据库镜像时可使用 --pull never。报告写入新建的 .local-test/ci/ 子目录,也可用 --output 选择其他新的输出目录。准确数据库版本、运行时组合及验证边界见兼容性与验证。
共享适配器契约检查
普通 unit 命令同时执行各后端的 *SharedAdapterContractTest,复用 core 测试接口与 adapter-capabilities.csv。注册检查保证后端条目和契约类完整。公共断言验证 query/count 预检、配置快照、终态生命周期、确认/不确定批次边界、精确时间戳及分页探测行;后端专属测试保留方言及 HTTP 错误差异。能力拒绝属于实际断言,不能跳过。版本/配置前提另有显式检查,不是生产功能探测。
2.1.1 的后端选择
省略选择器时仍运行代表性的 IoTDB/InfluxDB 1.x/InfluxDB 3 范围。排查后端局部变更时可以仅选择相应后端:
python3 tsgate-core/src/test/scripts/run-tests.py docker --backend iotdb --spring-boot 2.7.18
python3 tsgate-core/src/test/scripts/run-tests.py docker --backend influxdb1 --spring-boot 2.7.18
python3 tsgate-core/src/test/scripts/run-tests.py docker --backend influxdb --spring-boot 2.7.18
influxdb 代表 InfluxDB 3。子集运行明确报告未选后端;通过子集不能表述为完整矩阵通过。每个运行器只清理自己创建的容器,并记录清理和失败结果;比较结果时须保留新建报告目录和源码清单。
OpenGemini 准确版本运行器默认仍执行四种部署完整矩阵。新增模式选择器可用于常规单节点检查或有针对性的集群重跑:
python3 tsgate-opengemini/src/test/scripts/run-matrix.py --mode single --output .local-test/opengemini-single
python3 tsgate-opengemini/src/test/scripts/run-matrix.py --mode cluster --output .local-test/opengemini-cluster
python3 tsgate-opengemini/src/test/scripts/run-matrix.py --output .local-test/opengemini-full
single/cluster 均覆盖所选拓扑的准确 1.4.1、1.5.2 两个版本。默认覆盖两种拓扑,真实三节点集群均使用三副本。镜像复用仍保留准确版本和来源校验;缩小运行范围不能扩大兼容性结论。
2.1.2 自有三副本检查由运行器自动传入夹具绝对 script/state 路径。adapter 与 starter 测试在 CREATE DATABASE 后、首次写入前调用只读的初始数据 Raft 门禁,期限为 45 秒。1.5.2 使用精确 database/partition finish;官方二进制 1.4.1 使用版本绑定的完整启动日志 transfer 账本、显式目标 partition 及两次稳定观察,证据缺失或不兼容即失败。此受控串行夹具观察不是原子或持续健康保证,详见版本专用机制及限制。单节点无需此门禁;集群成员/meta 健康和新 series 查询可见性属于另外的就绪条件。此准备不改服务端参数、不写预热数据,也不增加生产写入重试。
OpenGemini 外部 Docker 入口
未提供 --opengemini-url 时,代表版本 Docker runner 保留原有三个数据库的覆盖,并明确排除 OpenGemini*DockerIT,JSON 报告会记录排除状态;这不构成 openGemini 回归结果。提供已有部署后执行其可移植测试:
python3 tsgate-core/src/test/scripts/run-tests.py docker --spring-boot 2.7.18 \
--opengemini-url http://127.0.0.1:8086 --opengemini-version 1.5.2 \
--opengemini-replicas 1
这一可移植外部入口命令覆盖单节点/一副本,创建隔离测试数据库并核验模板/原生客户端读回;共享运行器不启动或移除外部服务器。2.1.2 三副本集成测试要求专用 run-matrix.py 自有夹具,绝对 script/state 属性由该运行器自动传入。仅提供外部集群 URL 无法运行这套测试准备,因为只读门禁需要三个自有 store 日志中的精确数据库证据。这是测试前提,生产适配器仍支持外部三副本集群,无需 Docker/日志权限。完整矩阵及来源见专用指南。
GitHub Actions
CI 工作流保留 JDK 17/Boot 2.7.18、JDK 21/Boot 3.5.14、JDK 25/Boot 4.1.0 单测及 Java 17 无签名归档检查。相关 Pull Request/push 会按源码路径自动选择代表性 Docker 检查:adapter 模块局部变更覆盖对应后端,core/共享构建输入及 starter 变更覆盖全部后端,InfluxDB 1.x adapter 变更同时覆盖复用它的 OpenGemini。缺少有效比较提交或无法读取 diff 时,保守选择完整覆盖。OpenGemini 常规 CI 覆盖两个准确版本的单节点;发行标签和完整手动运行覆盖两个版本各自单节点、三节点三副本集群。
报告明确运行范围。CI 保留准确版本镜像/依赖缓存、有界执行、取消被新运行替代的任务,以及始终执行的自建资源清理/失败日志收集。发行证据须对应相同源码 SHA,且无失败、意外跳过或清理失败。配置工作流本身不会自动成为分支保护的必需检查。当前发行结果与实际远程运行见 2.1.3 验证证据,下方历史结果保留原源码范围。
历史 2.1.0 发行源码提交 8cf119e 已在 GitHub Actions 中通过三个 JDK / Spring Boot 组合及 Java 17 无签名发行制品检查。本次远端运行未请求 Docker;本次发行的 290 次本地 Docker 测试结果见兼容性指南。
构建发行制品
发行构建使用 Eclipse Temurin 17.0.14+7、Maven 3.9+ 和 Python 3。显式选择 Temurin 安装目录,使 Maven 和 Javadoc 使用同一套工具链:
export JAVA_HOME=/path/to/temurin-17.0.14+7
export PATH="$JAVA_HOME/bin:$PATH"
java -version
mvn -version
mvn -Prelease-artifacts clean verify
python3 scripts/verify-release-artifacts.py --project-root . \
--output .local-test/release-artifacts.json
这是生成发行附件时选择的 JDK 发行版,组件的 Java 17 基线保持不变。2.1.0 无签名构建生成二进制、源码和 Javadoc JAR 各九个,包含 LICENSE/NOTICE 材料,另有父 POM 与独立 BOM POM。Javadoc 从 delombok 后的源码生成,使自动生成的公共成员具有有效文档链接。普通 JAR 和源码附件只包含生产材料,不包含测试类、夹具凭据或本地报告。
保留 Javadoc 生成器提供的 legal/ 目录,以及生成的 JavaScript 和样式资源中的版权、许可声明。这些第三方材料保留各自的许可证;TsGate 的 Apache-2.0 LICENSE 和 NOTICE 适用于项目自有代码。制品检查脚本检查全部 27 个发行 JAR 归档,包括必需的第三方 Javadoc 许可证文件,并拒绝包含 Oracle 专有、保密或 OTN 许可标记的制品。检查失败时应使用指定的 Temurin 工具链重新构建,不应通过删除声明或改写许可头来使检查通过。
发布到 Maven Central
central-release profile 增加 PGP 签名和 Central Portal 发布插件,默认通过 central.skipPublishing=true 禁止上传,并使用 autoPublish=false。上传、通过 Portal 验证和正式发布是不同步骤。
上传前配置以下材料:
- Central Portal 账号及已验证的
io.github.alandevise命名空间,该命名空间对应维护者的 GitHub 身份。命名空间验证 - 在本地 Maven settings 文件中配置 id 为
central的 server 及 Portal 发布 token。settings 文件与真实 token 均保留在 Git 之外,通过 Maven 的-s参数指定该文件。Portal 发布 token 与 GitHub token 不同。Portal token - 维护者控制的 PGP 签名密钥及可获取的公钥,私钥及口令存放在本地安全存储或 CI Secrets。签名要求
- 最终坐标/版本、开发者与 SCM 元数据、完整父 POM/BOM/模块制品、源码/Javadoc、签名及校验和。Central 要求
上述材料配置完成并选用同一套 Temurin 17 工具链后,先构建和检查签名制品,再上传。第一条命令保留默认的 central.skipPublishing=true:
mvn -s /path/to/settings.xml -Pcentral-release clean verify
python3 scripts/verify-release-artifacts.py --project-root . \
--output .local-test/signed-release-artifacts.json
mvn -s /path/to/settings.xml -Pcentral-release deploy \
-Dcentral.skipPublishing=false
autoPublish=false 使用由用户管理的部署,使验证通过的部署留在 Portal 等待手动发布。为发行记录对应源码提交及部署结果。替换尚未发布的部署时,先在本地记录中保留其标识,上传并验证重新构建、重新签名的包,再从 Portal 移除被替换的待发布部署。不覆盖已经发布的版本。离线执行或 skipPublishing=true 均不上传,无签名诊断构建也不满足 Central 签名要求。参见 Central Maven 插件。
TsGate 2.0.0 上传验证
2.0.0 替换包于 2026 年 9 月 29 日使用 Eclipse Temurin 17.0.14+7 重新构建并签名。清理后重新执行的发行构建通过 638 项单测,失败、错误和跳过均为零。全部 21 个 JAR 通过项目许可证和生成资源检查。每个 Javadoc JAR 均保留生成器提供的五份 legal/ 文件:LICENSE、ADDITIONAL_LICENSE_INFO、ASSEMBLY_EXCEPTION、jquery.md 和 jqueryUI.md,保留 OpenJDK GPLv2 与 Classpath Exception,以及适用的第三方 MIT 声明。原始制品中的 28 处 Oracle 专有或 OTN 标记在替换包中均已消除。
上传包包含九个模块(父 POM、BOM 和七个 JAR 模块),全部 30 份 PGP 签名及四种校验和已独立验证。其中 78 个编译类、45 个 Java 源文件和九份 POM 与前次上传逐字节一致;本次重新构建未改变适配层行为或依赖。
TsGate 2.0.0 已正式发布到 Maven Central。部署 8e8970f0-14c9-4e5c-97af-3ed9270bce57 于 2026 年 9 月 29 日经手动发布后进入 PUBLISHED 状态。九个 POM 和核心 JAR 均已从公共仓库下载,其 SHA-256 与签名上传包一致。已发布的 BOM。
公钥指纹:D7FB5E1158537706FB2023D62DCFFB6B26BE7EB5。RSA4096 签名密钥有效至 2028 年 9 月 28 日 UTC,可从 Ubuntu keyserver 获取公钥验证发行签名。
2.1.0 中的 OpenGemini
TsGate 2.1.0 包含独立的 OpenGemini adapter 与 starter。配置、默认引擎边界及准确版本测试见 OpenGemini 接入指南,发行说明见 2.1.0 发布说明。