修改 meta.json 规则, 涉及version 、group 字段.
This commit is contained in:
@@ -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`。
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -0,0 +1,2 @@
|
||||
- 每次需求修改都要同时更新文档、代码、测试代码。
|
||||
- 每条测试用例都要有一个唯一编号。例如 1-1、2-20 等。
|
||||
@@ -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`。
|
||||
|
||||
Reference in New Issue
Block a user