fortpanel-publish 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md ADDED
@@ -0,0 +1,132 @@
1
+ # fortpanel-publish
2
+
3
+ Channel-aware release CLI for **FortPanel** —— 一条命令把面板源码编译并推送到 FortPanelAdmin
4
+ 的版本仓库,供节点自动升级链路拉取。
5
+
6
+ 是 `FortPanel/deploy/release.sh` + `FortPanelAdmin/publish-skill/publish.sh` 的纯 Node
7
+ 重写,**不再依赖 bash / Git Bash / WSL**,Windows 上也能跑。
8
+
9
+ ## 安装
10
+
11
+ ```bash
12
+ npm i -g fortpanel-publish
13
+ fortpanel-publish --version
14
+ ```
15
+
16
+ 要发布得另外装:
17
+
18
+ - **Go 1.25+**(交叉编译 FortPanel 后端)
19
+ - **Node 18+ / pnpm**(构建 FortPanelWeb)
20
+ - **git**
21
+
22
+ ## 5 分钟上手
23
+
24
+ ```bash
25
+ # 1. 准备凭据(放 ~/.config/fortpanel-publish/.env, mode 600)
26
+ mkdir -p ~/.config/fortpanel-publish
27
+ cat > ~/.config/fortpanel-publish/.env <<'EOF'
28
+ HOST=https://kadm.fortpanel.app
29
+ BUILD=fpk_xxxxxxxxxxxxxxxx
30
+ EOF
31
+ chmod 600 ~/.config/fortpanel-publish/.env
32
+
33
+ # 2. 进入 FortPanel 工作区(含 FortPanel/ + FortPanelWeb/ 同级目录)
34
+ cd ~/work/qp/FortPanel
35
+
36
+ # 3. 体检一遍
37
+ fortpanel-publish doctor
38
+
39
+ # 4. 先 dry-run 给老板看 changelog
40
+ fortpanel-publish release --channel dev --dry-run
41
+
42
+ # 5. 实际发布
43
+ fortpanel-publish release --channel dev
44
+ ```
45
+
46
+ ## 命令
47
+
48
+ ### `release` —— 编译并上传
49
+
50
+ ```
51
+ fortpanel-publish release --channel <dev|beta|stable> [flags]
52
+
53
+ --fortpanel-tag <tag> FortPanel 仓的 tag (beta/stable 必填或取最新)
54
+ --web-tag <tag> FortPanelWeb 仓的 tag (同上)
55
+ --arches <list> 逗号分隔, 默认 linux-amd64
56
+ 例: --arches linux-amd64,linux-arm64
57
+ --dry-run 只校验 + 生成 changelog,不构建不上传
58
+ --no-release 跳过 Gitea release 创建 (二进制仍上传)
59
+ --workspace-root <path> 指定根目录,默认 cwd 向上找
60
+ --out-dir <path> 二进制落地目录,默认 <root>/.deploy/fortpanel-release
61
+ --publish-log-file <path> 发布公告(给终端用户)文件;内容由 fortpanel-publish-skill
62
+ 据 changelog 生成,随上传写入面板的 publish_log
63
+ ```
64
+
65
+ > **版本号**:面板版本号是构建时刻 `YYYY.MMDD.HHMMSS`(独立于两仓 tag,秒级唯一、
66
+ > 不会覆盖)。两仓各自的 tag/commit 作为元数据(`fortpanel_tag`/`web_tag`/
67
+ > `git_commit`/`web_commit`)随版本一并记录在面板。
68
+ >
69
+ > **两类说明**:`notes` = 变更日志(change log,本 CLI 按 commit 自动生成);
70
+ > `publish_log` = 发布公告(由 skill 据 change log 生成,面向终端用户)。
71
+
72
+ ### `doctor` —— 环境探测
73
+
74
+ ```
75
+ fortpanel-publish doctor [--workspace-root <path>]
76
+ ```
77
+
78
+ 检查 go / git / node / npm / pnpm / `.env` / 工作区结构。
79
+
80
+ ## Channel 矩阵
81
+
82
+ | Channel | 触发条件 | Changelog 范围 | 失败拒绝条件 |
83
+ |---|---|---|---|
84
+ | `dev` | 两仓必须 **master** + clean | 最近 **10 条** commit | 任一仓非 master / 工作树 dirty |
85
+ | `beta` | 两仓 HEAD == 指定 tag(或最新) | 面板上该 channel 最新版本记录的 tag `..` 本次 tag(各仓独立;查不到则回退本地上一个 git tag) | tag 不存在 / HEAD 不在 tag / Gitea 远端无 tag |
86
+ | `stable` | 同 beta + 工作树 clean | 同 beta | 同 beta + tag 含 `-beta/-rc/-alpha` 后缀 |
87
+
88
+ ## 凭据安全
89
+
90
+ - `BUILD` 必须 `fpk_` 前缀(FortPanelAdmin Build API Key)
91
+ - **绝不接受**命令行 `--admin-token / --token / --api-key / --build`,会被前置 reject
92
+ - 所有日志输出经 `fpk_***` 脱敏
93
+ - POSIX 下 `.env` 权限非 600 会**告警**(不强制拒绝;Windows 不检查)
94
+
95
+ ## 环境变量
96
+
97
+ | Var | 用途 |
98
+ |---|---|
99
+ | `HOST` / `BUILD` | 同 `.env`,优先级低于 `.env` |
100
+ | `FORTPANEL_PUBLISH_ENV` | 覆盖 `.env` 路径 |
101
+ | `GITEA_TOKEN` | 创建 Gitea release 用(不设则跳过 release 创建) |
102
+
103
+ ## Exit Code
104
+
105
+ | Code | 含义 |
106
+ |---|---|
107
+ | 0 | 成功 |
108
+ | 2 | 参数 / 前置校验错(含 token / channel / tag / 工作区) |
109
+ | 3 | Gitea 远端校验失败(tag 不存在等) |
110
+ | 4 | 构建 / 上传失败 |
111
+ | 5 | Gitea release 创建失败(二进制已上传) |
112
+
113
+ ## 与原 bash 脚本的关系
114
+
115
+ | 旧 | 新 |
116
+ |---|---|
117
+ | `FortPanelAdmin/publish-skill/publish.sh` | `fortpanel-publish release` |
118
+ | `FortPanel/deploy/release.sh` | (内联到 release.ts) |
119
+ | Windows 需 Git Bash | 纯 Node 跨平台 |
120
+ | 凭据校验在 bash 里 | 同等的 reject + 0600 告警 |
121
+
122
+ 旧版 bash `publish-skill/` 已**移除**;本 npm 包是唯一实现。
123
+
124
+ ## 给 AI Agent
125
+
126
+ 如果你是 Claude / Copilot / Codex 等 Agent,不要直接跑这个 CLI —— 走 `fortpanel-publish-skill`
127
+ (同 family 的 SKILL.md 安装器),它会教 Agent 何时该用哪个 channel、`--dry-run` 流程、
128
+ 失败 exit code 怎么解读。
129
+
130
+ ## License
131
+
132
+ MIT
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ // fortpanel-publish 入口 shim
3
+ require('../dist/index.js').main();