修改 meta.json 规则, 涉及version 、group 字段.

This commit is contained in:
cheney
2026-06-17 10:03:51 +08:00
parent fc81584878
commit 364efbc1c1
8 changed files with 599 additions and 136 deletions
+21 -20
View File
@@ -1,4 +1,4 @@
- 基于 webdav 协议访问。包括**远程仓库存储方案**(基于 WebDAV 协议)与**本地客户端存储方案**。
- 基于 webdav 协议访问。包括**远程仓库存储方案**(基于 WebDAV 协议)与**本地客户端存储方案**。
- 支持存储多种操作系统(Linux、Windows)、多种架构(X86、aarch64)
- 支持记录官网地址,方便定期从官网拉取新版本存储。
@@ -20,21 +20,23 @@
```
/repo/ # WebDAV 服务暴露的根路径
└─ {project-id}/ # 项目目录(唯一标识)
├─ metadata.json # 项目级元数据文件
└─ {semver}/ # 版本目录(如 1.2.3 或 v1.2.3)
├─ version.json # 版本级元数据文件(推荐)
├─ any/any/ # 平台无关文件目录(保留字)
│ └─ ... # 单文件或压缩包
├─ {os}/ # 操作系统(如 linux, windows, darwin)
│ └─ {arch}/ # 架构(如 x86_64, aarch64)
│ └─ ... # 具体二进制文件或压缩包
└─ ...
└─ {group}/ # 分组目录,默认 /modules;空值等同 /
└─ {project-id}/ # 项目目录(唯一标识),实际路径为 group/id
├─ metadata.json # 项目级元数据文件
└─ {version}/ # 版本目录(如 1.0、1.1、2.0)
├─ version.json # 版本级元数据文件(推荐)
├─ any/any/ # 平台无关文件目录(保留字)
│ └─ ... # 单文件或压缩包
├─ {os}/ # 操作系统(如 linux, windows, darwin)
│ └─ {arch}/ # 架构(如 x86_64, aarch64)
│ └─ ... # 具体二进制文件或压缩包
└─ ...
```
#### 2.1 命名规则
- `project-id`:小写字母、数字、连字符(-),长度 ≤ 64。
- `semver`:符合 [Semantic Versioning 2.0]( 的版本号,推荐不含 `v` 前缀。
- `project-id`:来自项目 `meta.json` 中的唯一 `id`,小写字母、数字、连字符(-),长度 ≤ 64。
- `group`:来自项目 `meta.json`,默认 `/modules`;空字符串等同 `/`;支持 `/docker`、`/tmpls`、`/docker/net` 等子路径。
- `version`:来自项目 `meta.json` 的 `version`;若为空,发布时根据远程 `metadata.json.version` 尾数 +1,远程不存在时初始为 `1.0`。
- `os` 与 `arch` 使用标准化名称(见下表),`any` 为保留字,表示任意平台。
| 操作系统 | 标准名称 | 架构 | 标准名称 |
@@ -58,12 +60,11 @@
**字段说明**:
| 字段名 | 类型 | 必选 | 说明 |
| ------------------ | ----------------- | --- | ----------------- |
| `project_id` | string | 是 | 项目唯一标识,与目录名相同 |
| `group` | string | 否 | 仓库分组路径,默认 `/modules`,空值等同 `/` |
| `official_url` | string | 是 | 项目官网地址(用于定期拉取新版本) |
| `description` | string | 否 | 项目简述 |
| `latest_version` | string | 是 | 仓库中已存储的最新版本号 |
| `versions` | array of strings | 是 | 仓库中已存储的所有版本号列表 |
| `version` | string | 是 | 当前远程最新版本号;不再使用 `versions` 数组 |
| `last_fetch_check` | string (ISO 8601) | 否 | 上次检查官网更新的时间戳 |
| `fetch_rules` | array of objects | 否 | 自动拉取时的匹配规则(见 3.3) |
| `extra` | object | 否 | 扩展字段 |
@@ -72,10 +73,10 @@
```json
{
"project_id": "myapp",
"group": "/modules",
"official_url": "",
"description": "An example tool",
"latest_version": "1.2.1",
"versions": ["1.0.0", "1.2.0", "1.2.1"],
"version": "1.2",
"last_fetch_check": "2026-06-15T12:00:00Z",
"fetch_rules": [...],
"extra": { "license": "Apache-2.0" }
@@ -207,9 +208,9 @@
2. 访问 `official_url`,获取所有可用版本列表及最新版本。
3. 对比已存储版本,找出缺失的新版本。
4. 对于每个新版本,根据 `fetch_rules`(或内置逻辑)匹配下载 URL,下载对应的二进制/压缩包。
5. 按 `os` / `arch` / `any` 规则存放到 `{project-id}/{version}/{os}/{arch}/` 下。
5. 按 `os` / `arch` / `any` 规则存放到 `{group}/{project-id}/{version}/{os}/{arch}/` 下。
6. 计算文件哈希,生成或更新该版本的 `version.json`。
7. 更新项目级 `metadata.json`(`versions`、`latest_version`、`last_fetch_check`)。
7. 更新项目级 `metadata.json`(`version`、`group`、`last_fetch_check`),不再写入 `versions`。
---
+2
View File
@@ -0,0 +1,2 @@
- 每次需求修改都要同时更新文档、代码、测试代码。
- 每条测试用例都要有一个唯一编号。例如 1-1、2-20 等。
+15
View File
@@ -25,3 +25,18 @@ rollback myapp
# 删除模块
remove myapp
```
## 发布规则
项目 `meta.json` 支持 `group` 字段:
- 默认值为 `/modules`。
- 空字符串等同于 `/`。
- 可配置为 `/docker`、`/tmpls` 等一级路径,也可配置为 `/docker/net` 等子路径。
- 远程仓库整体上传路径为 `group/id`,其中 `id` 是项目唯一标识。
项目 `meta.json` 只使用 `version` 字段,不再使用 `versions`:
- `version` 有值时,按该版本上传;上传前检查远程 `group/id/version` 是否存在,已存在则报错。
- `version` 为空时,先读取远程 `group/id/metadata.json` 中的 `version`,将尾数 +1 后上传。
- 远程没有版本信息时,初始版本号为 `1.0`。