Files
ykxmz/docs/双平台发布.md
T

133 lines
4.5 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 双平台发布(Gitee + EzHub)
## 平台
| | 地址 | 类型 |
|---|---|---|
| **Gitee** | `git@gitee.com:xmz7891/ykxmz.git` | Gitee(API v5) |
| **EzHub** | `ssh://git@git.261826.xyz/xmz/ykxmz.git` | **Gitea 1.22.0**(API v1) |
本地 remote 已配好:`origin` = Gitee,`ezhub` = EzHub。
---
## 一次性配置(需要你操作两件事)
### 1. 把 SSH 公钥加到 EzHub
我已经生成了一把**专用于 EzHub** 的密钥(不复用 Gitee 那把,权限隔离):
```
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIMFMh2Zqwm+8KFhU3DhzhOO5Sx7cIzybYqUsrbt1c3ly ykxmz-ezhub
```
**操作**:EzHub 网页 → 右上角头像 → **设置** → **SSH / GPG 密钥** → **增加密钥**
→ 把上面那一整行粘进去 → 保存。
> ⚠️ **实测状态(2026-10-07)**:公钥加过一次,但服务端仍拒绝。
> 报错:\Permission denied (publickey,password)> 本机送出的指纹:\SHA256:Acmu49YQcjw3m5WefOXSBzYNY2WPHLL2vvhnlYRAttA> 请到 EzHub 确认那条密钥的内容和上面**完全一致**(一个字符都不能差),
> 并且加在**正确的账号**下。
>
> 在你修好之前,可以先用令牌走 HTTPS 推:
> \\powershell
> python _build\ezhub_push.py <令牌>
> \> (令牌存在仓库外的 \%USERPROFILE%\.ykxmz\ezhub_token\)
本机配置(已写好,不用你管):
```
# ~/.ssh/config
Host git.261826.xyz
HostName git.261826.xyz
User git
IdentityFile ~/.ssh/id_ed25519_ezhub
IdentitiesOnly yes
ServerAliveInterval 30
```
### 2. 生成 EzHub 的 API 令牌
SSH 密钥只能推代码,**建发行版必须要令牌**。
**操作**:EzHub 网页 → **设置** → **应用** → **生成令牌**
→ 名称随便(比如 `ykxmz-release`)→ 权限勾 **`write:repository`** → 生成 → 复制。
> ⚠️ **只勾读权限是不行的**(实测踩过)。
> Gitea 的令牌如果只有读权限:能读仓库、能列发行版,**看起来一切正常**,
> 但一推代码就 `403 Forbidden`、一建发行版也 403。
> Gitea 会把原因写在响应里:
> `token does not have at least one of required scope(s): [write:repository]`
>
> 提前探一下(无副作用):
> ```powershell
> python _build\probe_token.py <令牌>
> ```
> 原理:对一个**不存在的**发行版发 DELETE。
> `403` = 缺写权限;`404` = 有写权限(只是资源不存在)。
> 令牌只从命令行传给脚本,不落盘、不进仓库。
> `_build/ezhub_push.py` 会把它存到 `%USERPROFILE%\.ykxmz\ezhub_token`
> (仓库外),不会进版本库。
---
## 日常发布
```powershell
cd C:\Users\shu\Desktop\deepseekagent\LanRemote
# 先演练(不真的发,只看会做什么)
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0 --dry
# 确认无误再正式发
python _build\release_all.py <gitee令牌> <ezhub令牌> 1.8.0
```
脚本会依次做:
1. **前置检查**
- 三个产物在不在(安装包 exe / 服务端 zip / 手表 apk)
- 从 `CHANGELOG.md` 取这个版本的更新说明
- 工作区干不干净(不干净就拒绝 —— 否则推上去的和测过的不是一份)
- **对外口径检查**:更新说明里出现管理页字眼直接拒绝
2. **推代码**到 `origin` 和 `ezhub`
3. **建发行版**并传三个附件到两个平台
4. 打印两边发行版地址
---
## 两个平台的接口差别(写代码时容易错的地方)
| 项目 | Gitee | Gitea / EzHub |
|---|---|---|
| API 前缀 | `/api/v5/repos/...` | `/api/v1/repos/...` |
| 认证方式 | 参数 `access_token` | 请求头 `Authorization: token <t>` |
| 传附件路径 | `/releases/{id}/attach_files` | `/releases/{id}/assets?name=<文件名>` |
| 附件字段名 | `file` | **`attachment`** |
| 草稿/预发布 | 只有 `prerelease` | `draft` + `prerelease` |
**最容易踩的**:EzHub 的文件名要走**查询参数** `?name=`,
不是 Gitee 那种放 `Content-Disposition` 里。
---
## 单独发某一个平台
```powershell
# 只发 EzHub
python _build\ezhub_release.py <ezhub令牌> 1.8.0
# 只发 Gitee
python _build\gitee_release.py <gitee令牌> 1.8.0
```
---
## 注意事项
- **私钥在 `~/.ssh/`,仓库外,不会进版本库。** 已用 `git ls-files` 确认过。
- 令牌**不要**提交到仓库,也不要写进任何脚本。
- 发行版说明**只放更新内容**(用户要求),脚本自动从 CHANGELOG 取,
不会套额外的标题。
- 重发同一个版本时,脚本会先按标签查已有的发行版并复用,不会报错。