docs: close STEP-060C Maven Local validation
This commit is contained in:
@@ -19,4 +19,4 @@ Starting HEAD:`80f360be7849be3e63557c4e074ee3a0fc02e15f`,分支 `particle/ma
|
||||
未执行 Android Gradle、AAR build/publish、Expo prebuild、APK/ADB/设备或 Jest。用户必须先在 Gate C 环境完成 current HEAD AAR build → Maven Local publication → clean prebuild → Test Host Android compile/install → Phase A/B/lifecycle 验收,之后才可进入 STEP-061。
|
||||
## STEP-060C 后续记录(2026-09-07)
|
||||
|
||||
Gate C 已生成当前 custom OpenGL AAR,但精确 Maven Local publication 曾在 Vanniktech `signAllPublications()` 要求 signatory 时失败。该问题只属于 Maven Local handoff,并不要求重建已核对的 AAR。STEP-060C 将签名 required 条件隔离为 Maven Central task graph;Local 保持正式坐标并可在没有 PGP signatory 时发布,Central 正式路径仍要求签名。后续执行结果由 STEP-060C 人工验收记录确认。
|
||||
Gate C 已生成当前 custom OpenGL AAR,但精确 Maven Local publication 曾在 Vanniktech `signAllPublications()` 要求 signatory 时失败。该问题只属于 Maven Local handoff,并不要求重建已核对的 AAR。STEP-060C 将签名 required 条件隔离为 Maven Central task graph;Local 保持正式坐标并可在没有 PGP signatory 时发布,Central 正式路径仍要求签名。2026-09-07 人工执行已通过(sign task `SKIPPED`、publication `BUILD SUCCESSFUL`);最终 Local/build-output AAR SHA 为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。这只关闭 Maven Local handoff,不代表 RN Test Host Android 验收完成。
|
||||
|
||||
@@ -11,20 +11,25 @@
|
||||
- 因而 Maven Local 的 Sign task 可正常跳过,不读取 signatory;Central task graph 仍会执行且要求签名。
|
||||
- 未改变 AAR、artifactId、version、publication 名称、custom repository 来源或 RN bridge。
|
||||
|
||||
## 当前 AAR 证据
|
||||
## 人工 Maven Local 验收(2026-09-07)
|
||||
|
||||
Gate C 已提供当前 OpenGL Release AAR:
|
||||
用户在 Gate C 封存 Linux 环境实际执行:
|
||||
|
||||
- 路径:`platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar`
|
||||
- mtime:`2026-09-07 21:26:46.463556571 +0800`
|
||||
- size:`166262400`
|
||||
- SHA-256:`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`
|
||||
- `classes.jar` 已含 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`。
|
||||
```bash
|
||||
cd /mnt/sda1/MapLibreParticleLab/platform/android
|
||||
./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
|
||||
```
|
||||
|
||||
本 Step 只改 Maven publication signing 条件;上述已核对 AAR 不需重建。
|
||||
- `:MapLibreAndroid:signOpenglreleasePublication SKIPPED`;未出现 `no configured signatory`。
|
||||
- `:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` 完成,`BUILD SUCCESSFUL in 3m 33s`(57 actionable tasks:49 executed、8 up-to-date)。
|
||||
- Maven Local 已有 AAR、POM、module metadata,坐标为 `org.maplibre.gl:android-sdk-opengl:13.4.1`;没有 `.asc`,符合 Local publication 不签名的设计。
|
||||
- 发布 AAR 与 `platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar` SHA-256 一致,均为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。
|
||||
- AAR `classes.jar` 含 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`,并含 `arm64-v8a`、`armeabi-v7a`、`x86`、`x86_64` 四 ABI。
|
||||
|
||||
`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7` 是 publication 前曾核对的中间 AAR SHA;publication 重新执行 `bundleOpenglReleaseAar` 后已由上述最终 SHA 取代,不得再作为当前 Maven Local artifact 引用。
|
||||
|
||||
## 验证与状态
|
||||
|
||||
- 已作静态 API/源码审计以及 `git diff --check`;未运行 Gradle、AAR build、Maven publish、APK、ADB、prebuild 或 Jest。
|
||||
- 用户仍须在 Gate C 环境执行精确 Maven Local task,核对 Local 坐标目录中的 AAR SHA-256、POM 与 module metadata,并确认无 signatory 错误。
|
||||
- 状态:`IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`,尚未进入 Android 综合验收或 STEP-061。
|
||||
- 已完成:Maven Local signing isolation、Local publication、AAR/POM/module 存在与坐标核对、build output 与 Local AAR SHA 一致、两项 Host class 与四 ABI 核对。
|
||||
- 未完成:RN Test Host Android compile/install、STEP-060 Phase A/B、style reload/map remount/stale reactTag/detach lifecycle、Binary Field 与 STEP-061;这些均不属于本 Step 的 PASS 范围。
|
||||
- 状态:`CLOSED / PASS`(仅限上述 Maven Local signing isolation 与 publication 验收)。
|
||||
|
||||
@@ -4,14 +4,13 @@
|
||||
|
||||
1. 确认当前为 `particle/main`,并记录 `git rev-parse HEAD`。Gate C 封存 Linux 环境是 custom MapLibre Native AAR 的构建环境;不要为 Test Host 生成工程的版本修改它。
|
||||
2. 移走或清理 `~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 的旧 artifact,避免同坐标 provenance 混淆。2026-08-29 旧 AAR 的 SHA-256 是 `5c67d2751fafe211a0df4b82deded09ab1c07cf6ca0f4a12a880283287f85e5c`,只能作为 Gate C 历史证据。
|
||||
3. Gate C 已于 2026-09-07 为当前基线生成 OpenGL Release AAR;若下列 SHA-256 与 classes 核对通过,**不要为 STEP-060C 重新构建**:`platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar`,SHA-256 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,其中必须有 `org/maplibre/android/maps/WeatherRuntime.class` 与 `MapLibreMap.class`。仅当 checkout 已改变或该核对失败时,才在 Gate C 封存 Linux 环境执行 `cd platform/android && RENDERER=opengl BUILDTYPE=Release make apackage`。
|
||||
4. 使用源码定义的精确 publication task 发布:`cd platform/android && ./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain`。STEP-060C 使 Maven Local 的 sign task 在无 signatory 时跳过;不得使用 `-x sign`、不得改坐标或创建 SNAPSHOT。Maven Central 正式 publication 仍要求签名。
|
||||
5. 核对 Maven Local 出现 `org/maplibre/gl/android-sdk-opengl/13.4.1/`,其中 AAR SHA-256 仍为上述当前 Gate C 值,并同时有 POM 与 module metadata;它们必须来自当前构建,不能是 2026-08-29 的旧 AAR。
|
||||
6. `cd integration/react-native/MapLibreParticleRNTestHost && npm ci && npx expo prebuild --platform android --clean`。`package-lock.json` 已在无 `--legacy-peer-deps` 的 npm 安装下通过;不要改用 Yarn 或生成 `yarn.lock`。本次 plugin 变更后必须 clean prebuild。
|
||||
7. 检查生成 root Gradle 有 `MapLibreParticleRNTestHost custom OpenGL SDK`、`nativeVersion=13.4.1`、`nativeVariant=opengl`;Maven Central 必须排除精确 custom module `org.maplibre.gl:android-sdk-opengl`,使该 AAR 缺失时失败而非 fallback。MLRN 的 turf/annotation/scalebar 不是 custom SDK,不应被这个模块级排除误伤。
|
||||
8. 首次 prebuild 后实际记录 Test Host 的 Gradle wrapper、AGP、Kotlin plugin、min/compile/targetSdk、NDK、JDK、Hermes 与 New Architecture。当前观察到的 `9.3.1/8.12.0/2.1.20/24/36/36/27.1.12297006` 属于 Test Host 生成工程,不等于 Gate C 环境。
|
||||
9. 再按实际生成工程编译/安装 Test Host。启动后确认单一地图正常加载;style ready 后应显示 reactTag 和 `WAITING_FOR_FIELDS`,不提交 field 时粒子/色场为空是预期。
|
||||
10. 对同一 reactTag 依次验证 Phase A:getState、enable、WeatherColor visible、particle visible、FPS 30 均得到结构化 Native result。
|
||||
11. 验证 Phase B:PLAY/PAUSE、HALF/NORMAL/DOUBLE、epoch-ms seek、stops、独立 particle/trail RGBA、count/line/length/opacity/fade/WeatherColor opacity。不得出现 JS `PLAYING/PAUSED` 第二状态机。
|
||||
12. 重载 style:旧 Runtime 必须 disposed;style ready attach 的新 Runtime 正常工作。remount Map 后,用旧 reactTag 调用必须返回 `MAP_VIEW_NOT_FOUND`,不得命中新 Map。
|
||||
13. 卸载 Host:确认 view detach dispose;无持续 Handler wake、无全局 current map。通过上述 Android 验收后才进入 STEP-061;此前不要尝试 number[]、JSON/base64 大 field。
|
||||
3. STEP-060C Maven Local 已于 2026-09-07 人工验收通过:`signOpenglreleasePublication SKIPPED`,精确 publication task `BUILD SUCCESSFUL in 3m 33s`,没有 `no configured signatory`。Maven Local 的 `org/maplibre/gl/android-sdk-opengl/13.4.1/` 已含 AAR、POM、module metadata,且没有 `.asc`;Maven Central 正式 publication 仍要求签名。
|
||||
4. 当前已发布 AAR 与 build output AAR SHA-256 均为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`,并含 `WeatherRuntime.class`、`MapLibreMap.class` 与四 ABI。`47646fb…` 仅是 publication 前中间 AAR SHA,不是当前 artifact。后续只有 checkout 或 AAR 变化时,才在 Gate C 重新 build/publish 并重新核对 provenance。
|
||||
5. `cd integration/react-native/MapLibreParticleRNTestHost && npm ci && npx expo prebuild --platform android --clean`。`package-lock.json` 已在无 `--legacy-peer-deps` 的 npm 安装下通过;不要改用 Yarn 或生成 `yarn.lock`。本次 plugin 变更后必须 clean prebuild。
|
||||
6. 检查生成 root Gradle 有 `MapLibreParticleRNTestHost custom OpenGL SDK`、`nativeVersion=13.4.1`、`nativeVariant=opengl`;Maven Central 必须排除精确 custom module `org.maplibre.gl:android-sdk-opengl`,使该 AAR 缺失时失败而非 fallback。MLRN 的 turf/annotation/scalebar 不是 custom SDK,不应被这个模块级排除误伤。
|
||||
7. 首次 prebuild 后实际记录 Test Host 的 Gradle wrapper、AGP、Kotlin plugin、min/compile/targetSdk、NDK、JDK、Hermes 与 New Architecture。当前观察到的 `9.3.1/8.12.0/2.1.20/24/36/36/27.1.12297006` 属于 Test Host 生成工程,不等于 Gate C 环境。
|
||||
8. 再按实际生成工程编译/安装 Test Host。启动后确认单一地图正常加载;style ready 后应显示 reactTag 和 `WAITING_FOR_FIELDS`,不提交 field 时粒子/色场为空是预期。
|
||||
9. 对同一 reactTag 依次验证 Phase A:getState、enable、WeatherColor visible、particle visible、FPS 30 均得到结构化 Native result。
|
||||
10. 验证 Phase B:PLAY/PAUSE、HALF/NORMAL/DOUBLE、epoch-ms seek、stops、独立 particle/trail RGBA、count/line/length/opacity/fade/WeatherColor opacity。不得出现 JS `PLAYING/PAUSED` 第二状态机。
|
||||
11. 重载 style:旧 Runtime 必须 disposed;style ready attach 的新 Runtime 正常工作。remount Map 后,用旧 reactTag 调用必须返回 `MAP_VIEW_NOT_FOUND`,不得命中新 Map。
|
||||
12. 卸载 Host:确认 view detach dispose;无持续 Handler wake、无全局 current map。通过上述 Android 验收后才进入 STEP-061;此前不要尝试 number[]、JSON/base64 大 field。
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
## 结论
|
||||
|
||||
已完成源码层的 Maven Local 签名隔离,状态为 `IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`。本报告不宣称 Maven Local publication 已由 Codex 实际运行或 Android 验收通过。
|
||||
STEP-060C 已为 `CLOSED / PASS`:用户于 2026-09-07 在 Gate C 封存 Linux 环境完成 Maven Local publication,Local 签名隔离按设计生效。本 PASS 仅覆盖 Maven Local signing isolation、发布与 artifact provenance;不代表 RN Test Host Android compile、STEP-060 Phase A/B、lifecycle、Binary Field 或 STEP-061 通过。
|
||||
|
||||
## 实际修改
|
||||
|
||||
@@ -30,28 +30,40 @@
|
||||
| Central 签名 | `*PublicationToMavenCentralRepository` task graph 中仍 required |
|
||||
| AAR 来源 | Gate C 已验证的 custom OpenGL AAR;无 flatDir、files repo、第二仓库或 SNAPSHOT |
|
||||
|
||||
## 已执行验证
|
||||
## 人工 Maven Local 验收(2026-09-07)
|
||||
|
||||
- 静态读取 Vanniktech `gradle-maven-publish-plugin:0.34.0`:`signAllPublications()` 对 release 设置 `SigningExtension.required`;Gradle SigningExtension 的 `setRequired(Object)` 支持 deferred Provider,并在 Sign task 执行时解析。
|
||||
- 静态审计 publication 名称、artifactId、version 与 Central task 名称约束。
|
||||
- `git diff --check`(结果见提交前最终核验)。
|
||||
|
||||
## 未执行项目
|
||||
|
||||
按任务限制,未执行 Android Gradle、AAR build、Maven Local publish、Expo prebuild、APK、ADB、Android 设备/虚拟机测试或 Jest。
|
||||
|
||||
## 已知剩余风险与人工验收
|
||||
|
||||
唯一关键剩余验证是用户在 Gate C 封存 Linux 环境实际运行:
|
||||
用户执行:
|
||||
|
||||
```bash
|
||||
cd /mnt/sda1/MapLibreParticleLab/platform/android
|
||||
./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain
|
||||
```
|
||||
|
||||
随后确认 `~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 存在 AAR、POM、module metadata,AAR SHA-256 为 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,且输出没有 signatory failure。仅在此通过后,才继续 RN Test Host 的 clean prebuild 与 Android 综合验收。
|
||||
- 已完成:`:MapLibreAndroid:signOpenglreleasePublication SKIPPED`;`:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` 通过;`BUILD SUCCESSFUL in 3m 33s`(57 actionable tasks:49 executed、8 up-to-date);输出不含 `no configured signatory`。
|
||||
- 已完成:`~/.m2/repository/org/maplibre/gl/android-sdk-opengl/13.4.1/` 含 AAR、POM、module metadata;POM/module 坐标为 `org.maplibre.gl:android-sdk-opengl:13.4.1`。
|
||||
- 已完成:Maven Local AAR 与 `platform/android/MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar` SHA-256 同为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`。
|
||||
- 已完成:AAR `classes.jar` 有 `org/maplibre/android/maps/MapLibreMap.class`、`org/maplibre/android/maps/WeatherRuntime.class`;AAR 有 `arm64-v8a`、`armeabi-v7a`、`x86`、`x86_64` 四 ABI;Maven Local 不含 `.asc`,符合 Local publication 不签名的设计。
|
||||
- 历史说明:`47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7` 为 publication 前中间 AAR SHA;Gradle 重新执行 `bundleOpenglReleaseAar` 后,它不是当前 published artifact。
|
||||
|
||||
## Codex 静态核验
|
||||
|
||||
- 静态读取 Vanniktech `gradle-maven-publish-plugin:0.34.0`:`signAllPublications()` 对 release 设置 `SigningExtension.required`;Gradle SigningExtension 的 `setRequired(Object)` 支持 deferred Provider,并在 Sign task 执行时解析。
|
||||
- 静态审计 publication 名称、artifactId、version 与 Central task 名称约束。
|
||||
- 只读核对 Local/build output AAR SHA、POM/module 坐标、classes、ABI 与 `.asc` 缺失;`git diff --check` 将在本次 docs-only commit 前再次执行。
|
||||
|
||||
## 未执行 / 无法验证
|
||||
|
||||
- 未执行:本轮 Codex 未运行 Android Gradle、AAR build、Maven publish、Expo prebuild、APK、ADB、Android 设备/虚拟机测试或 Jest;publication 结果为用户提供的人工实测证据。
|
||||
- 未完成:RN Test Host `npm ci`、clean Expo prebuild、generated Gradle resolution、Android compile/install、STEP-060 Phase A/B、style reload/map remount/stale reactTag/detach lifecycle;任务明确留给下一轮 STEP-060 Android 人工验收。
|
||||
- 无法验证:本轮没有设备/模拟器与 RN 生成工程执行授权,故不对上述 Android/RN 结果作 PASS 推断。
|
||||
|
||||
## 已知剩余风险与下一步
|
||||
|
||||
下一阶段仍是 STEP-060 RN Test Host Android 验收:`npm ci`、clean Expo prebuild、检查 generated Gradle 的 Maven Local/custom SDK resolution、用户手工 Android compile/install、Phase A/B 与 lifecycle 验收。通过后才可进入 STEP-061。
|
||||
|
||||
## 提交与推送
|
||||
|
||||
- 功能提交:`5f0804e8ba3a8a6fed1fff09ddd92a76a77bd458` — `fix: isolate Maven Local from release signing`
|
||||
- 文档提交、最终 HEAD 与远端结果将在本报告提交后补充。
|
||||
- 初始文档提交:`9e0666c7c284d5080ebd2e711f46928f788ddcec` — `docs: record STEP-060C local publish signing fix`
|
||||
- 本次人工验收文档收尾 Starting HEAD:`9e0666c7c284d5080ebd2e711f46928f788ddcec`。
|
||||
- 本次 docs-only commit SHA/message、Final HEAD、Remote HEAD 与 push 结果将在收尾 commit 生成后,以最终回填为准。
|
||||
|
||||
@@ -25,7 +25,7 @@ npx expo prebuild --platform android --clean
|
||||
npx expo run:android
|
||||
```
|
||||
|
||||
上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。当前 Gate C AAR 的 SHA-256 是 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,含 `WeatherRuntime`/`MapLibreMap` classes;只修改 Maven publication 签名隔离的 STEP-060C 不要求重建它。先移走 Maven Local 的旧同版本 artifact,再发布并核对该 SHA-256、POM 与 module metadata。Maven Local 无 signatory 时 sign task 应跳过;不得以 `-x sign` 绕过签名,Maven Central 正式 publication 仍要求签名。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。
|
||||
上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。STEP-060C 的 Maven Local publication 已于 2026-09-07 人工通过:`signOpenglreleasePublication SKIPPED`,没有 `no configured signatory`,发布 AAR、POM、module metadata 均存在,且没有 `.asc`。当前 Gate C build output 与 Maven Local AAR 的共同 SHA-256 是 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`,含 `WeatherRuntime`/`MapLibreMap` classes 和四 ABI。`47646fb…` 只是 publication 前中间 AAR SHA,不再是当前 artifact。后续只有 checkout 或 AAR 变化时,才重新 build/publish 并核对 provenance;不得以 `-x sign` 绕过签名,Maven Central 正式 publication 仍要求签名。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。
|
||||
|
||||
## Bridge 与生命周期
|
||||
|
||||
|
||||
@@ -519,4 +519,10 @@ WeatherColorLayer 的 `ParticleGpuValidationUBO` designated initializer 补齐 `
|
||||
|
||||
- Vanniktech `signAllPublications()` 仍负责建立 Maven Central 的 publication 签名;其默认 release required 条件覆盖 Maven Local,导致无 signatory 时 Local handoff 失败。
|
||||
- publication build logic 现将 Gradle `SigningExtension.required` 延迟绑定到 task graph:存在 `*PublicationToMavenCentralRepository` 时必须签名;精确 Maven Local publication 则跳过 Sign task,不需要 PGP secrets、`-x sign`、SNAPSHOT 或第二仓库。
|
||||
- 当前 Gate C AAR 已核对 SHA-256 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`;本轮未重建、未执行 Gradle publish。状态为 `IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`。
|
||||
- 实现阶段曾核对中间 AAR SHA-256 `47646fb708d096cf5ee0c3b8eeaeb7e6083081279c79f4a642db554efe88fad7`,当时未重建、未执行 Gradle publish;该 SHA 与等待状态已在随后的人工 publication 验收中被最终 artifact 结果取代。
|
||||
|
||||
# 2026-09-07 — STEP-060C 人工 Maven Local 验收收尾
|
||||
|
||||
- 用户在 Gate C 实际运行精确 Maven Local publication task:`signOpenglreleasePublication SKIPPED`,`publishOpenglreleasePublicationToMavenLocal` 成功,`BUILD SUCCESSFUL in 3m 33s`,不再有 `no configured signatory`。
|
||||
- 最终 Maven Local AAR、当前 build output AAR SHA-256 一致,均为 `2e73e25cfd31bb181f75ba2d84974afb949640f72de46bc0234d4579abe3ba38`;POM/module 坐标正确,AAR 含 WeatherRuntime/MapLibreMap 和四 ABI,Local 无 `.asc` 符合设计。此前 `47646fb…` 是 publication 前中间 SHA,已失效。
|
||||
- STEP-060C 状态关闭为 `CLOSED / PASS`,范围仅 Maven Local signing isolation 与 publication handoff;RN Test Host Android compile、Phase A/B、lifecycle、Binary Field 与 STEP-061 仍未验证。
|
||||
|
||||
Reference in New Issue
Block a user