diff --git a/docs/50_Step记录/STEP-060B_GateC封存环境与CustomAAR接入修正_v1.md b/docs/50_Step记录/STEP-060B_GateC封存环境与CustomAAR接入修正_v1.md index 63b37abcc..a4269edee 100644 --- a/docs/50_Step记录/STEP-060B_GateC封存环境与CustomAAR接入修正_v1.md +++ b/docs/50_Step记录/STEP-060B_GateC封存环境与CustomAAR接入修正_v1.md @@ -17,3 +17,6 @@ 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 人工验收记录确认。 diff --git a/docs/50_Step记录/STEP-060C_MavenLocal签名隔离修正_v1.md b/docs/50_Step记录/STEP-060C_MavenLocal签名隔离修正_v1.md new file mode 100644 index 000000000..d9f17855e --- /dev/null +++ b/docs/50_Step记录/STEP-060C_MavenLocal签名隔离修正_v1.md @@ -0,0 +1,30 @@ +# STEP-060C Maven Local 签名隔离修正 + +## 目标 + +修正 custom OpenGL AAR 的 Maven Local handoff:保持正式坐标 `org.maplibre.gl:android-sdk-opengl:13.4.1` 与精确 task `:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal`,但不要求本地拥有 PGP signatory;Maven Central 正式发布仍必须签名。 + +## 实现 + +- 保留 Vanniktech `signAllPublications()`,使 Central publication 继续具备签名任务和语义。 +- `SigningExtension.required` 使用延迟 `Provider` 检查 task graph 是否含 `*PublicationToMavenCentralRepository`:Local graph 为 false,Central graph 为 true。 +- 因而 Maven Local 的 Sign task 可正常跳过,不读取 signatory;Central task graph 仍会执行且要求签名。 +- 未改变 AAR、artifactId、version、publication 名称、custom repository 来源或 RN bridge。 + +## 当前 AAR 证据 + +Gate C 已提供当前 OpenGL Release AAR: + +- 路径:`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`。 + +本 Step 只改 Maven publication signing 条件;上述已核对 AAR 不需重建。 + +## 验证与状态 + +- 已作静态 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。 diff --git a/docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md b/docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md index 13716c63b..7656a281d 100644 --- a/docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md +++ b/docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md @@ -4,9 +4,9 @@ 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 封存 Linux 环境重新生成当前 HEAD OpenGL Release AAR:`cd platform/android && RENDERER=opengl BUILDTYPE=Release make apackage`。路径必须为 `MapLibreAndroid/build/outputs/aar/MapLibreAndroid-opengl-release.aar`。 -4. 核对新 AAR 的 mtime、SHA-256(必须不同于旧证据),并从 classes.jar 确认含当前 `org/maplibre/android/maps/WeatherRuntime.class` 与 `MapLibreMap.class`。 -5. 使用源码定义的精确 publication task 发布:`./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal`。核对 Maven Local 出现 `org/maplibre/gl/android-sdk-opengl/13.4.1/`,且 AAR、POM、module metadata 都来自当前构建。 +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 环境。 diff --git a/docs/报告/STEP-060C_MavenLocal签名隔离修正_Codex完成报告_v1.md b/docs/报告/STEP-060C_MavenLocal签名隔离修正_Codex完成报告_v1.md new file mode 100644 index 000000000..f0caffa20 --- /dev/null +++ b/docs/报告/STEP-060C_MavenLocal签名隔离修正_Codex完成报告_v1.md @@ -0,0 +1,57 @@ +# STEP-060C Maven Local 签名隔离修正 — Codex 完成报告 + +## 结论 + +已完成源码层的 Maven Local 签名隔离,状态为 `IMPLEMENTED / WAITING_USER_MAVEN_LOCAL_PUBLICATION_VALIDATION`。本报告不宣称 Maven Local publication 已由 Codex 实际运行或 Android 验收通过。 + +## 实际修改 + +- 保留 Vanniktech `signAllPublications()`,不移除 Maven Central 正式签名能力。 +- 将 Gradle `SigningExtension.required` 改为延迟 task-graph 条件:任一 `*PublicationToMavenCentralRepository` task 存在时为 true;否则为 false。 +- 因此 `:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` 的 Sign task 在无 signatory 时跳过,Central publication 仍要求签名。 +- 更新 Gate C/RN Test Host 人工步骤:当前已核对 AAR 可直接 publication,不因本次 publication 配置改动重建。 + +## 修改文件 + +- `platform/android/buildSrc/src/main/kotlin/maplibre.gradle-publish.gradle.kts` +- `docs/60_测试/STEP-060_RNTestHost_Android人工编译与验收_v1.md` +- `integration/react-native/MapLibreParticleRNTestHost/README.md` +- `docs/50_Step记录/STEP-060B_GateC封存环境与CustomAAR接入修正_v1.md` +- `docs/50_Step记录/STEP-060C_MavenLocal签名隔离修正_v1.md` +- `粒子开发记录.md` + +## API / publication 契约 + +| 项目 | 保持的契约 | +| --- | --- | +| Maven Local 坐标 | `org.maplibre.gl:android-sdk-opengl:13.4.1` | +| Local task | `:MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal` | +| Local 签名 | 无 signatory 时 Sign task 跳过;不使用 `-x sign` | +| Central 签名 | `*PublicationToMavenCentralRepository` task graph 中仍 required | +| AAR 来源 | Gate C 已验证的 custom OpenGL AAR;无 flatDir、files repo、第二仓库或 SNAPSHOT | + +## 已执行验证 + +- 静态读取 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 综合验收。 + +## 提交与推送 + +- 功能提交:`5f0804e8ba3a8a6fed1fff09ddd92a76a77bd458` — `fix: isolate Maven Local from release signing` +- 文档提交、最终 HEAD 与远端结果将在本报告提交后补充。 diff --git a/integration/react-native/MapLibreParticleRNTestHost/README.md b/integration/react-native/MapLibreParticleRNTestHost/README.md index 4d9c2f86d..cd10862d0 100644 --- a/integration/react-native/MapLibreParticleRNTestHost/README.md +++ b/integration/react-native/MapLibreParticleRNTestHost/README.md @@ -15,15 +15,17 @@ Gate C 封存环境负责生成 custom AAR;Test Host 只负责 Maven Local han ```bash cd /mnt/sda1/MapLibreParticleLab/platform/android +# 仅当 checkout 已变化,或下方已核对 AAR 的 SHA-256 不一致时才需要: RENDERER=opengl BUILDTYPE=Release make apackage -./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal +# 当前 Gate C 已生成并核对的 AAR 可直接发布,不需要为 STEP-060C 重建: +./gradlew :MapLibreAndroid:publishOpenglreleasePublicationToMavenLocal --console=plain cd /mnt/sda1/MapLibreParticleLab/integration/react-native/MapLibreParticleRNTestHost npm ci npx expo prebuild --platform android --clean npx expo run:android ``` -上述 Android 命令必须在 Gate C 封存 Linux 环境由用户手工执行;本 Step 的 Codex 没有执行。先移走 Maven Local 的旧同版本 artifact,再检查当前 HEAD 新 AAR 的 mtime/SHA-256、`WeatherRuntime`/`MapLibreMap` classes 和发布后的 AAR/POM/module metadata。2026-08-29 的旧 AAR(SHA-256 `5c67…f85e5c`)只可作 Gate C 历史证据,不能用于 STEP-060。 +上述 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。 ## Bridge 与生命周期 diff --git a/粒子开发记录.md b/粒子开发记录.md index cb2f81c82..e6fd6f148 100644 --- a/粒子开发记录.md +++ b/粒子开发记录.md @@ -514,3 +514,9 @@ WeatherColorLayer 的 `ParticleGpuValidationUBO` designated initializer 补齐 ` - Gate C 继续只表示 MapLibre Native custom AAR 的封存 Linux 编译环境;STEP-060 Maven Local 继续是 RN Test Host handoff,不因 Expo 生成工程的 Gradle/AGP/NDK 数字反向修改 Gate C。 - publication 源码确认 custom OpenGL 坐标 `org.maplibre.gl:android-sdk-opengl:13.4.1` 与精确 Maven Local task `publishOpenglreleasePublicationToMavenLocal`。plugin 将 Central 排除收敛到该唯一 custom module,确保 AAR 缺失 fail-closed,且不阻断 MLRN turf/plugins 辅助依赖。 + +# 2026-09-07 — STEP-060C Maven Local 签名隔离修正 + +- 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`。