docs: add STEP-063 particle release engineering task
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
Some checks failed
validate-scripts / validate-scripts (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,889 @@
|
|||||||
|
# STEP-063 MapLibre 粒子 Android v1 发布工程化与 React Native 可导入包 Codex 任务 v1
|
||||||
|
|
||||||
|
## 0. 任务性质
|
||||||
|
|
||||||
|
本任务开始把已经通过 Android 实机综合验证的 MapLibre Particle 从“开发工程状态”整理为“可版本化、可发布、可由 React Native 通过包依赖导入的组件”。
|
||||||
|
|
||||||
|
本任务属于发布工程化与包结构整理,不是继续开发新的粒子渲染能力。
|
||||||
|
|
||||||
|
当前用户已确认:
|
||||||
|
|
||||||
|
- Android MapLibre Particle 当前能力达到满意水平。
|
||||||
|
- STEP-062 可按 `CLOSED / PASS` 收尾。
|
||||||
|
- 当前阶段不接入 NavSea。
|
||||||
|
- 发布服务器、npm Registry、Maven Repository 的最终部署位置暂不决定。
|
||||||
|
- npm 正式包名采用:
|
||||||
|
- `@navsea/maplibre-particle-rn`
|
||||||
|
- 正式版本规则采用:
|
||||||
|
- `<上游 MapLibre Native 版本>-particle.<NavSea 修订号>`
|
||||||
|
- 当前计划首个正式版本:
|
||||||
|
- `13.4.1-particle.1`
|
||||||
|
- Android Maven artifact 计划采用:
|
||||||
|
- group: `cc.navsea.maplibre`
|
||||||
|
- artifact: `android-sdk-particle-opengl`
|
||||||
|
- version: `13.4.1-particle.1`
|
||||||
|
|
||||||
|
如果仓库实际调查证明基础 MapLibre Native 并非 `13.4.1`,必须停止版本改写并先报告,不得自行猜测或强行套用版本号。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 1. 本任务目标
|
||||||
|
|
||||||
|
完成以下四个目标:
|
||||||
|
|
||||||
|
1. 冻结并记录当前 MapLibre Particle 的真实上游版本基线。
|
||||||
|
2. 建立正式版本号、release manifest、CHANGELOG 与发布契约。
|
||||||
|
3. 把当前 React Native 接入整理成一个正式 npm package:
|
||||||
|
- `@navsea/maplibre-particle-rn`
|
||||||
|
4. 建立一个“只通过发布包消费”的独立 Consumer Test Host,用于后续证明 NavSea 不需要源码路径或 MapLibre Native 源码编译即可使用。
|
||||||
|
|
||||||
|
本任务结束时,不要求真正上传到任何服务器。
|
||||||
|
|
||||||
|
最终服务器发布位置后续单独决定。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 2. 强制边界
|
||||||
|
|
||||||
|
## 2.1 禁止继续扩展粒子功能
|
||||||
|
|
||||||
|
本任务不得新增或重写:
|
||||||
|
|
||||||
|
- Particle GPU simulation
|
||||||
|
- WeatherColor 算法
|
||||||
|
- Timeline / Playback 算法
|
||||||
|
- HostField 二进制入口
|
||||||
|
- RasterArraySource 核心语义
|
||||||
|
- U/V canonical contract
|
||||||
|
- MapLibre renderer
|
||||||
|
- JNI 核心路径
|
||||||
|
- WeatherRuntime 业务语义
|
||||||
|
|
||||||
|
除非当前发布工程化过程中发现明确的“无法打包/无法消费”的结构性阻塞。
|
||||||
|
|
||||||
|
如果出现此类阻塞:
|
||||||
|
|
||||||
|
1. 停止扩大修改。
|
||||||
|
2. 明确记录阻塞位置。
|
||||||
|
3. 说明最小修复建议。
|
||||||
|
4. 不得借发布任务顺便重构 Native/Core。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2.2 不接入 NavSea
|
||||||
|
|
||||||
|
本任务不得修改 NavSea 仓库。
|
||||||
|
|
||||||
|
不得:
|
||||||
|
|
||||||
|
- 在 NavSea 中安装 npm package
|
||||||
|
- 修改 NavSea Metro
|
||||||
|
- 修改 NavSea Gradle
|
||||||
|
- 修改 NavSea Pod
|
||||||
|
- 修改 NavSea Store / Adapter / Action
|
||||||
|
- 将 Test Host 逻辑搬入 NavSea
|
||||||
|
|
||||||
|
本任务只负责把发布组件准备好。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2.3 不决定最终发布服务器
|
||||||
|
|
||||||
|
本任务不得擅自加入:
|
||||||
|
|
||||||
|
- 公司 npm Registry URL
|
||||||
|
- GitHub Packages
|
||||||
|
- GitLab Packages
|
||||||
|
- Gitea Packages
|
||||||
|
- Nexus
|
||||||
|
- Artifactory
|
||||||
|
- Verdaccio
|
||||||
|
- 私有 Maven Repository URL
|
||||||
|
- 生产用户名、密码、Token、证书
|
||||||
|
|
||||||
|
可以建立与 Registry 无关的标准发布配置和说明。
|
||||||
|
|
||||||
|
可以使用本地 `.tgz`、本地 staging 目录作为“未上传发布物”验证手段。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2.4 Android 编译边界
|
||||||
|
|
||||||
|
严格遵守项目长期规则:
|
||||||
|
|
||||||
|
**所有 Android 编译由用户手工执行。**
|
||||||
|
|
||||||
|
Codex 不得执行:
|
||||||
|
|
||||||
|
- Android Gradle assemble
|
||||||
|
- Android Gradle build
|
||||||
|
- AAR build
|
||||||
|
- AAR publish
|
||||||
|
- Maven Local publish
|
||||||
|
- APK build
|
||||||
|
- APK install
|
||||||
|
- ADB
|
||||||
|
- Android 实机测试
|
||||||
|
|
||||||
|
Codex 可以:
|
||||||
|
|
||||||
|
- 修改构建配置
|
||||||
|
- 修改版本号
|
||||||
|
- 准备 publication 配置
|
||||||
|
- 做非 Android 编译的静态检查
|
||||||
|
- 执行 TypeScript 编译/类型检查(若不触发 Android build)
|
||||||
|
- 执行 `npm pack`
|
||||||
|
- 检查 `.tgz` 内容
|
||||||
|
- 编写用户手工 Android 构建命令
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2.5 不执行 Jest
|
||||||
|
|
||||||
|
本任务不执行 Jest,也不新增 Jest 作为验收要求。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 3. 第一步:真实基线只读调查
|
||||||
|
|
||||||
|
开始修改前必须先从当前仓库真实代码调查。
|
||||||
|
|
||||||
|
至少确认:
|
||||||
|
|
||||||
|
## 3.1 MapLibre Native 基础版本
|
||||||
|
|
||||||
|
从实际构建文件、版本定义、Gradle publication、Git metadata 等确认:
|
||||||
|
|
||||||
|
- upstream MapLibre Native version
|
||||||
|
- 当前 Android renderer variant
|
||||||
|
- 当前 STEP-061 AAR 坐标
|
||||||
|
- 当前 STEP-061 AAR version
|
||||||
|
- 当前 Native/Core source 与该版本之间的关系
|
||||||
|
|
||||||
|
预期:
|
||||||
|
|
||||||
|
```text
|
||||||
|
upstreamMapLibreNative = 13.4.1
|
||||||
|
currentDevelopmentArtifact = org.maplibre.gl:android-sdk-opengl:13.4.1-step061
|
||||||
|
renderer = opengl
|
||||||
|
```
|
||||||
|
|
||||||
|
但必须以仓库实际内容为准。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.2 React Native 基线
|
||||||
|
|
||||||
|
调查当前 RN bridge / package 的真实位置与结构。
|
||||||
|
|
||||||
|
至少确认:
|
||||||
|
|
||||||
|
- 当前 RN package 名
|
||||||
|
- 当前 RN package version
|
||||||
|
- 当前 `package.json`
|
||||||
|
- 当前 Android module / Gradle 文件
|
||||||
|
- 当前 autolinking 方式
|
||||||
|
- 当前 MapLibre RN 公共 API 导出方式
|
||||||
|
- `WeatherRuntime`
|
||||||
|
- `RasterParticleLayer`
|
||||||
|
- `WeatherColorLayer`
|
||||||
|
- HostField submit API
|
||||||
|
- RN Test Host 当前如何引用该 RN 模块
|
||||||
|
- 是否存在 `file:`、workspace path、source path 等开发期依赖
|
||||||
|
|
||||||
|
必须明确:
|
||||||
|
|
||||||
|
**哪些路径只是开发期源码引用,正式 npm package 后必须消失。**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3.3 当前正式能力链路
|
||||||
|
|
||||||
|
只读确认当前已冻结链路:
|
||||||
|
|
||||||
|
```text
|
||||||
|
React Native Host
|
||||||
|
↓ metadataJson + local file:// binary payload
|
||||||
|
RN bridge
|
||||||
|
↓
|
||||||
|
WeatherRuntime
|
||||||
|
↓
|
||||||
|
RasterArraySource::submitHostField()
|
||||||
|
↓
|
||||||
|
LocalParticleFieldFeed
|
||||||
|
↓
|
||||||
|
ParticleFieldDataAdapter
|
||||||
|
↓
|
||||||
|
ParticleFieldSnapshot
|
||||||
|
↓
|
||||||
|
Core Timeline / Runtime Field Window
|
||||||
|
↓
|
||||||
|
WeatherColorLayer + RasterParticleLayer
|
||||||
|
```
|
||||||
|
|
||||||
|
不得因为发布工程化另建第二套入口。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 4. 第二步:正式版本契约
|
||||||
|
|
||||||
|
调查确认基础版本无误后,建立正式版本契约。
|
||||||
|
|
||||||
|
## 4.1 正式版本
|
||||||
|
|
||||||
|
首个正式版本:
|
||||||
|
|
||||||
|
```text
|
||||||
|
13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
语义:
|
||||||
|
|
||||||
|
```text
|
||||||
|
13.4.1
|
||||||
|
= 上游 MapLibre Native 基础版本
|
||||||
|
|
||||||
|
particle
|
||||||
|
= NavSea Particle 扩展发行线
|
||||||
|
|
||||||
|
1
|
||||||
|
= 基于该 upstream version 的第 1 个 NavSea Particle 正式修订
|
||||||
|
```
|
||||||
|
|
||||||
|
后续规则:
|
||||||
|
|
||||||
|
```text
|
||||||
|
13.4.1-particle.2
|
||||||
|
13.4.1-particle.3
|
||||||
|
|
||||||
|
13.5.0-particle.1
|
||||||
|
|
||||||
|
14.0.0-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
禁止以后恢复使用 `step061` 这种开发阶段编号作为正式发行版本。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.2 npm package
|
||||||
|
|
||||||
|
正式 npm package:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@navsea/maplibre-particle-rn
|
||||||
|
```
|
||||||
|
|
||||||
|
正式首发 version:
|
||||||
|
|
||||||
|
```text
|
||||||
|
13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
要求 package 名清楚表达:
|
||||||
|
|
||||||
|
- NavSea 维护
|
||||||
|
- MapLibre
|
||||||
|
- Particle
|
||||||
|
- React Native
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4.3 Android Maven artifact
|
||||||
|
|
||||||
|
正式 Android artifact:
|
||||||
|
|
||||||
|
```text
|
||||||
|
cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
不得继续使用官方坐标作为 NavSea 正式发行坐标:
|
||||||
|
|
||||||
|
```text
|
||||||
|
org.maplibre.gl:android-sdk-opengl
|
||||||
|
```
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
Java/Kotlin package namespace 不要求因此重命名。
|
||||||
|
|
||||||
|
本任务重点是 Maven publication coordinate 与依赖契约,不允许进行大规模 Java/C++ namespace rename。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 5. 第三步:建立 Release Manifest
|
||||||
|
|
||||||
|
在项目中建立稳定、机器可读的 release manifest。
|
||||||
|
|
||||||
|
路径由 Codex根据现有仓库结构选择,但建议类似:
|
||||||
|
|
||||||
|
```text
|
||||||
|
release/maplibre-particle/release-manifest.json
|
||||||
|
```
|
||||||
|
|
||||||
|
或:
|
||||||
|
|
||||||
|
```text
|
||||||
|
release/maplibre-particle/13.4.1-particle.1.json
|
||||||
|
```
|
||||||
|
|
||||||
|
至少包含:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"release": "13.4.1-particle.1",
|
||||||
|
"upstreamMapLibreNative": "13.4.1",
|
||||||
|
"extensionLine": "particle",
|
||||||
|
"extensionRevision": 1,
|
||||||
|
"platform": {
|
||||||
|
"android": {
|
||||||
|
"renderer": "opengl"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"reactNativePackage": {
|
||||||
|
"name": "@navsea/maplibre-particle-rn",
|
||||||
|
"version": "13.4.1-particle.1"
|
||||||
|
},
|
||||||
|
"nativeArtifact": {
|
||||||
|
"group": "cc.navsea.maplibre",
|
||||||
|
"artifact": "android-sdk-particle-opengl",
|
||||||
|
"version": "13.4.1-particle.1"
|
||||||
|
},
|
||||||
|
"publication": {
|
||||||
|
"npmRegistry": null,
|
||||||
|
"mavenRepository": null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
可以增加必要字段,例如:
|
||||||
|
|
||||||
|
- source commit
|
||||||
|
- compatibility
|
||||||
|
- canonical field schema
|
||||||
|
- RN compatibility
|
||||||
|
- minSdk / compileSdk(如果项目已有真实事实)
|
||||||
|
- release state
|
||||||
|
|
||||||
|
但不得猜测未确认版本。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 6. 第四步:正式 React Native package
|
||||||
|
|
||||||
|
目标:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@navsea/maplibre-particle-rn@13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
必须成为 NavSea 未来唯一面对的 React Native MapLibre Particle 包入口。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6.1 设计原则
|
||||||
|
|
||||||
|
NavSea 未来目标使用方式:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import {
|
||||||
|
MapView,
|
||||||
|
Camera,
|
||||||
|
RasterParticleLayer,
|
||||||
|
WeatherColorLayer,
|
||||||
|
WeatherRuntime,
|
||||||
|
} from '@navsea/maplibre-particle-rn';
|
||||||
|
```
|
||||||
|
|
||||||
|
实际导出名称必须依据当前仓库真实 API。
|
||||||
|
|
||||||
|
不得为了示例强行重命名现有稳定 API。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6.2 不允许正式消费源码路径
|
||||||
|
|
||||||
|
正式 package 不得要求 Consumer:
|
||||||
|
|
||||||
|
```text
|
||||||
|
file:../MapLibreParticleLab/...
|
||||||
|
../../platform/react-native
|
||||||
|
workspace 源码路径
|
||||||
|
CMake source path
|
||||||
|
MapLibre Native source tree
|
||||||
|
本地源码软链接
|
||||||
|
```
|
||||||
|
|
||||||
|
Consumer 只能依赖正式 npm package。
|
||||||
|
|
||||||
|
Android Native 应通过正式 artifact dependency 解决,而不是 Consumer 直接编译 MapLibre Native 源码。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6.3 包内部结构
|
||||||
|
|
||||||
|
根据当前 React Native package 实际结构做最小整理。
|
||||||
|
|
||||||
|
要求:
|
||||||
|
|
||||||
|
- `package.json` 名称正式改为 `@navsea/maplibre-particle-rn`
|
||||||
|
- version = `13.4.1-particle.1`
|
||||||
|
- 保留正确的 React Native autolinking
|
||||||
|
- 保留当前稳定 JS/TS 公共 API
|
||||||
|
- 保留 Native bridge
|
||||||
|
- 内部 Android Gradle dependency 改为正式 artifact:
|
||||||
|
- `cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1`
|
||||||
|
- 不得同时再自动引入官方 `org.maplibre.gl:android-sdk-opengl` 导致双 Native AAR
|
||||||
|
- 不得引入第二份 MapLibre RN native module
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6.4 唯一 MapLibre RN 入口原则
|
||||||
|
|
||||||
|
需要重点审计:
|
||||||
|
|
||||||
|
Consumer 是否仍然需要同时安装:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@maplibre/maplibre-react-native
|
||||||
|
```
|
||||||
|
|
||||||
|
如果当前 NavSea Particle RN package 本质上是对 MapLibre RN 的完整 fork/扩展,则正式目标应是:
|
||||||
|
|
||||||
|
```text
|
||||||
|
Consumer
|
||||||
|
↓
|
||||||
|
@navsea/maplibre-particle-rn
|
||||||
|
↓
|
||||||
|
唯一 RN native module
|
||||||
|
↓
|
||||||
|
cc.navsea.maplibre:android-sdk-particle-opengl
|
||||||
|
```
|
||||||
|
|
||||||
|
不应形成:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@maplibre/maplibre-react-native
|
||||||
|
+
|
||||||
|
@navsea/maplibre-particle-rn
|
||||||
|
```
|
||||||
|
|
||||||
|
两套 Native MapLibre 同时进入 App。
|
||||||
|
|
||||||
|
如果仓库实际结构暂时无法做到唯一入口,必须在报告中明确说明,不得假装已经完成。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 7. 第五步:发布包内容审计
|
||||||
|
|
||||||
|
必须能够执行:
|
||||||
|
|
||||||
|
```text
|
||||||
|
npm pack
|
||||||
|
```
|
||||||
|
|
||||||
|
生成类似:
|
||||||
|
|
||||||
|
```text
|
||||||
|
navsea-maplibre-particle-rn-13.4.1-particle.1.tgz
|
||||||
|
```
|
||||||
|
|
||||||
|
实际文件名以 npm 规则为准。
|
||||||
|
|
||||||
|
Codex 必须检查 tarball 内容。
|
||||||
|
|
||||||
|
至少确保:
|
||||||
|
|
||||||
|
必须包含:
|
||||||
|
|
||||||
|
- package.json
|
||||||
|
- JS/TS build output 或正式 package 所需源码
|
||||||
|
- type declarations
|
||||||
|
- React Native native module 必需文件
|
||||||
|
- android module 必需文件
|
||||||
|
- README
|
||||||
|
- LICENSE/NOTICE(依据仓库现有许可要求)
|
||||||
|
- 必需 plugin/config 文件
|
||||||
|
|
||||||
|
不得包含:
|
||||||
|
|
||||||
|
- node_modules
|
||||||
|
- `.git`
|
||||||
|
- 大量 build cache
|
||||||
|
- Android APK
|
||||||
|
- 临时 log
|
||||||
|
- Test Host
|
||||||
|
- WeatherV2 测试数据
|
||||||
|
- `.codex-build-logs`
|
||||||
|
- unrelated docs
|
||||||
|
- 任何 credential
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 8. 第六步:Android artifact publication 配置
|
||||||
|
|
||||||
|
把 Android Native publication 从开发阶段坐标整理成正式坐标。
|
||||||
|
|
||||||
|
目标:
|
||||||
|
|
||||||
|
```text
|
||||||
|
groupId:
|
||||||
|
cc.navsea.maplibre
|
||||||
|
|
||||||
|
artifactId:
|
||||||
|
android-sdk-particle-opengl
|
||||||
|
|
||||||
|
version:
|
||||||
|
13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
必须保留:
|
||||||
|
|
||||||
|
```text
|
||||||
|
renderer = opengl
|
||||||
|
```
|
||||||
|
|
||||||
|
本阶段只准备 publication 配置。
|
||||||
|
|
||||||
|
Codex 不执行 AAR build 或 publish。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 9. 第七步:建立独立 Consumer Test Host
|
||||||
|
|
||||||
|
新增一个真正用于验证“发布包消费”的最小 React Native Test Host。
|
||||||
|
|
||||||
|
名称建议:
|
||||||
|
|
||||||
|
```text
|
||||||
|
MapLibreParticlePackageConsumerTestHost
|
||||||
|
```
|
||||||
|
|
||||||
|
实际路径应遵守现有 integration 结构。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9.1 Consumer Test Host 的核心约束
|
||||||
|
|
||||||
|
它不得:
|
||||||
|
|
||||||
|
- 引用 MapLibreParticleLab RN 源码目录
|
||||||
|
- 使用 workspace source dependency
|
||||||
|
- 使用相对路径导入正式 RN package 源码
|
||||||
|
- 直接引用 MapLibre Native source tree
|
||||||
|
- 自己实现 WeatherRuntime bridge
|
||||||
|
- 复制 Native bridge 源码
|
||||||
|
|
||||||
|
它只能通过安装后的:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@navsea/maplibre-particle-rn
|
||||||
|
```
|
||||||
|
|
||||||
|
使用功能。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9.2 当前服务器未决定时的测试方式
|
||||||
|
|
||||||
|
由于最终 npm/Maven 服务器尚未决定,本阶段允许:
|
||||||
|
|
||||||
|
### npm
|
||||||
|
|
||||||
|
使用本地:
|
||||||
|
|
||||||
|
```text
|
||||||
|
npm pack
|
||||||
|
```
|
||||||
|
|
||||||
|
生成 `.tgz` 后安装:
|
||||||
|
|
||||||
|
```text
|
||||||
|
npm install <package.tgz>
|
||||||
|
```
|
||||||
|
|
||||||
|
这属于“发布包消费”,不是源码路径消费。
|
||||||
|
|
||||||
|
### Android Native artifact
|
||||||
|
|
||||||
|
本任务只准备正式 artifact publication。
|
||||||
|
|
||||||
|
后续由用户手工构建并放入 Maven Local 或临时 staging repository,再进行 Consumer APK 编译。
|
||||||
|
|
||||||
|
不得因为服务器未决定,就退回 source path。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 9.3 Consumer Test Host 最低功能
|
||||||
|
|
||||||
|
先做最小 smoke host,不要求复制 STEP-062 全部复杂测试 UI。
|
||||||
|
|
||||||
|
最低要求:
|
||||||
|
|
||||||
|
- MapLibre MapView
|
||||||
|
- GSI basemap
|
||||||
|
- `WeatherColorLayer`
|
||||||
|
- `RasterParticleLayer`
|
||||||
|
- `WeatherRuntime`
|
||||||
|
- 一个最小真实或 canonical fixture 提交入口
|
||||||
|
- Runtime state 可见
|
||||||
|
- Particle / WeatherColor 显示
|
||||||
|
|
||||||
|
如果已有可复用 STEP-062 Test Host 逻辑,可以复用业务层代码,但不得通过源码 dependency 复用 RN package。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 10. 第八步:文档
|
||||||
|
|
||||||
|
所有文档中文。
|
||||||
|
|
||||||
|
至少新增或更新:
|
||||||
|
|
||||||
|
## 10.1 架构/发布设计
|
||||||
|
|
||||||
|
建议:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/30_设计/MapLibre粒子Android发布与ReactNative包设计_v1.md
|
||||||
|
```
|
||||||
|
|
||||||
|
至少说明:
|
||||||
|
|
||||||
|
- upstream version
|
||||||
|
- NavSea Particle version rule
|
||||||
|
- npm package name
|
||||||
|
- Maven coordinate
|
||||||
|
- RN package 与 Native artifact 关系
|
||||||
|
- 为什么 Consumer 不编译 MapLibre Native 源码
|
||||||
|
- 为什么不能同时装官方 RN MapLibre 和 NavSea Particle RN
|
||||||
|
- server registry 尚未决定
|
||||||
|
- 本地 `.tgz` / staging 只是预发布验证手段
|
||||||
|
- 后续 upstream upgrade 规则
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10.2 STEP 记录
|
||||||
|
|
||||||
|
建议:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/50_Step记录/STEP-063_MapLibre粒子Android_v1发布工程化_v1.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10.3 Codex 完成报告
|
||||||
|
|
||||||
|
建议:
|
||||||
|
|
||||||
|
```text
|
||||||
|
docs/报告/STEP-063_MapLibre粒子Android_v1发布工程化_Codex完成报告_v1.md
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10.4 CHANGELOG
|
||||||
|
|
||||||
|
为正式 package 建立中文 CHANGELOG 或遵循仓库现有发布记录结构。
|
||||||
|
|
||||||
|
至少记录:
|
||||||
|
|
||||||
|
```text
|
||||||
|
13.4.1-particle.1
|
||||||
|
|
||||||
|
- 基于 MapLibre Native 13.4.1
|
||||||
|
- Android OpenGL
|
||||||
|
- WeatherColor
|
||||||
|
- RasterParticle
|
||||||
|
- HostField binary ingress
|
||||||
|
- Timeline / Playback
|
||||||
|
- React Native WeatherRuntime
|
||||||
|
- STEP-061 Native/RN ingress 验证
|
||||||
|
- STEP-062 GSI + WeatherV2 + Particle Android 综合验证
|
||||||
|
```
|
||||||
|
|
||||||
|
不得把没有验证的能力写成已通过。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 11. 静态验收
|
||||||
|
|
||||||
|
Codex 可执行且应执行:
|
||||||
|
|
||||||
|
- package JSON 校验
|
||||||
|
- TypeScript typecheck
|
||||||
|
- `npm pack`
|
||||||
|
- tarball 内容列表审计
|
||||||
|
- 检查正式 package 中不存在开发期 `file:` dependency
|
||||||
|
- 检查正式 package 中不存在 MapLibre Native source path
|
||||||
|
- 检查 Android Gradle dependency 指向正式 coordinate
|
||||||
|
- 检查没有同时依赖正式 Particle AAR 与官方 MapLibre AAR
|
||||||
|
- `git diff --check`
|
||||||
|
- repository search 审计旧 `13.4.1-step061` 使用位置
|
||||||
|
|
||||||
|
注意:
|
||||||
|
|
||||||
|
历史文档中出现 `13.4.1-step061` 是合法的。
|
||||||
|
|
||||||
|
但正式 release/package/build config 不得继续把它作为当前发行依赖。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 12. 用户手工 Android 验证入口
|
||||||
|
|
||||||
|
Codex 完成本任务后,必须给出准确的用户手工命令,但不得自行执行。
|
||||||
|
|
||||||
|
后续用户将手工完成两个阶段:
|
||||||
|
|
||||||
|
## 阶段 A:正式 AAR
|
||||||
|
|
||||||
|
构建:
|
||||||
|
|
||||||
|
```text
|
||||||
|
cc.navsea.maplibre:android-sdk-particle-opengl:13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
并验证 artifact 生成。
|
||||||
|
|
||||||
|
最终 publish server 尚未决定,因此可先由用户手工发布到 Maven Local 或指定 staging 目录用于验证。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 阶段 B:Consumer Test Host APK
|
||||||
|
|
||||||
|
Consumer 只安装:
|
||||||
|
|
||||||
|
```text
|
||||||
|
@navsea/maplibre-particle-rn@13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
通过正式 artifact dependency 获取 Android Native。
|
||||||
|
|
||||||
|
然后用户手工:
|
||||||
|
|
||||||
|
- Android assembleDebug
|
||||||
|
- 安装 APK
|
||||||
|
- 实机 smoke
|
||||||
|
- GSI
|
||||||
|
- WeatherColor
|
||||||
|
- Particle
|
||||||
|
- Runtime READY
|
||||||
|
|
||||||
|
通过后才能正式创建 release tag。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 13. Git Tag 规则
|
||||||
|
|
||||||
|
本任务暂时不得创建正式 release tag。
|
||||||
|
|
||||||
|
原因:
|
||||||
|
|
||||||
|
`13.4.1-particle.1` 必须先经过:
|
||||||
|
|
||||||
|
1. 正式 AAR 手工构建
|
||||||
|
2. npm tarball package consumer 验证
|
||||||
|
3. Consumer Test Host Android APK 实机验证
|
||||||
|
|
||||||
|
全部通过后,再单独执行最终 Release Freeze 任务创建 tag。
|
||||||
|
|
||||||
|
建议未来 tag:
|
||||||
|
|
||||||
|
```text
|
||||||
|
maplibre-particle/android/13.4.1-particle.1
|
||||||
|
```
|
||||||
|
|
||||||
|
实际 tag 命名在最终发布任务确认。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 14. Git 收尾
|
||||||
|
|
||||||
|
本任务会修改项目文件,因此必须提交并 push 到:
|
||||||
|
|
||||||
|
```text
|
||||||
|
origin/particle/main
|
||||||
|
```
|
||||||
|
|
||||||
|
严格遵守项目 Git 规则。
|
||||||
|
|
||||||
|
不得:
|
||||||
|
|
||||||
|
```text
|
||||||
|
git add .
|
||||||
|
git add -A
|
||||||
|
```
|
||||||
|
|
||||||
|
必须精确 add 本任务文件。
|
||||||
|
|
||||||
|
不得提交历史无关 untracked 文件。
|
||||||
|
|
||||||
|
完成后:
|
||||||
|
|
||||||
|
```text
|
||||||
|
git fetch origin
|
||||||
|
git rev-parse HEAD
|
||||||
|
git rev-parse origin/particle/main
|
||||||
|
git status --short
|
||||||
|
```
|
||||||
|
|
||||||
|
必须确认:
|
||||||
|
|
||||||
|
```text
|
||||||
|
HEAD == origin/particle/main
|
||||||
|
```
|
||||||
|
|
||||||
|
如果 push 失败:
|
||||||
|
|
||||||
|
**不得声称任务完成。**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 15. 任务完成状态
|
||||||
|
|
||||||
|
如果代码/package/publication 配置均完成,静态检查和 npm pack 均通过,但尚未执行用户手工 Android 构建:
|
||||||
|
|
||||||
|
状态写:
|
||||||
|
|
||||||
|
```text
|
||||||
|
IMPLEMENTED / WAITING_MANUAL_RELEASE_VALIDATION
|
||||||
|
```
|
||||||
|
|
||||||
|
不得提前写:
|
||||||
|
|
||||||
|
```text
|
||||||
|
RELEASED
|
||||||
|
CLOSED / PASS
|
||||||
|
```
|
||||||
|
|
||||||
|
正式 `CLOSED / PASS` 等待后续用户手工 AAR + Consumer APK 验证。
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
# 16. Codex 最终报告必须包含
|
||||||
|
|
||||||
|
- 实际确认的 upstream MapLibre Native version
|
||||||
|
- 当前 RN 基线
|
||||||
|
- 正式版本号
|
||||||
|
- npm package name
|
||||||
|
- Maven coordinate
|
||||||
|
- release manifest 路径
|
||||||
|
- 正式 RN package 路径
|
||||||
|
- Consumer Test Host 路径
|
||||||
|
- `npm pack` 结果
|
||||||
|
- tarball 文件名
|
||||||
|
- tarball 内容审计结果
|
||||||
|
- 是否仍存在正式配置中的 `step061`
|
||||||
|
- 是否存在 `file:` 或 source-path consumer dependency
|
||||||
|
- 是否修改 Native/Core 功能代码
|
||||||
|
- 是否执行 Android Gradle
|
||||||
|
- 是否构建 AAR
|
||||||
|
- 是否执行 ADB
|
||||||
|
- 是否执行 Jest
|
||||||
|
- 用户下一步手工命令
|
||||||
|
- commit hash
|
||||||
|
- commit message
|
||||||
|
- push result
|
||||||
|
- remote branch
|
||||||
|
- Final HEAD
|
||||||
|
- 历史无关 untracked 项说明
|
||||||
|
|
||||||
Reference in New Issue
Block a user