This commit is contained in:
曾志威
2026-09-23 18:30:25 +08:00
parent 4227130f57
commit 121a13e5cc
4 changed files with 46 additions and 4 deletions
+32
View File
@@ -49,6 +49,38 @@ steps:
- cp docs/build-output.md docs/testing.md "bin/releases/$release/docs/"
- (cd "bin/releases/$release" && sha256sum serviceport > SHA256SUMS.txt)
- (cd bin/releases && tar -czf "$release.tar.gz" "$release")
- (cd bin/releases && sha256sum "$release.tar.gz")
- echo "Package ready at bin/releases/$release.tar.gz (Drone workspace only until uploaded)"
- name: publish-gitea
image: alpine:3.22
environment:
GITEA_USER:
from_secret: gitea_user
GITEA_TOKEN:
from_secret: gitea_token
commands:
- apk add --no-cache curl
- |
if test -z "$GITEA_USER" || test -z "$GITEA_TOKEN"; then
echo 'Gitea package upload skipped: configure both gitea_user and gitea_token Drone secrets to retain the archive'
exit 0
fi
version=$(cat VERSION)
if test -n "$DRONE_TAG"; then
test "$DRONE_TAG" = "v$version" || { echo 'Tag must match VERSION (v-prefixed)'; exit 1; }
package_version="$version"
else
package_version=$(git rev-parse --verify HEAD)
fi
archive="serviceport-$version-linux-amd64.tar.gz"
url="https://git.freeicu.top/api/packages/$DRONE_REPO_OWNER/generic/serviceport/$package_version/$archive"
curl --fail-with-body -sS --show-error -u "$GITEA_USER:$GITEA_TOKEN" -T "bin/releases/$archive" "$url"
printf 'Gitea package uploaded: %s\n' "$url"
when:
event:
- push
- tag
- name: upload-ipfs
image: alpine:3.22
+1 -1
View File
@@ -50,7 +50,7 @@
## 构建
项目包含 `.drone.yml`,定义 Go 全量测试、`go vet`、前端生产构建、无 CGO Linux amd64 单文件编译、隔离启动与嵌入资源验证,以及 `bin/releases/serviceport-<VERSION>-linux-amd64.tar.gz` 打包。推送、拉取请求和标签均打包;`v<VERSION>` 标签可在配置 `ipfs_api` / `ipfs_token` Secret 后上传 IPFS,详见 [Drone/IPFS 发布说明](docs/ipfs.md)。流水线不连接真实数据库,不读取 `data/`;真实服务矩阵仍使用 `scripts/test-matrix.ps1` 或 `scripts/test-matrix.sh`。
项目包含 `.drone.yml`,定义 Go 全量测试、`go vet`、前端生产构建、无 CGO Linux amd64 单文件编译、隔离启动与嵌入资源验证,以及 `bin/releases/serviceport-<VERSION>-linux-amd64.tar.gz` 打包。推送、拉取请求和标签均打包;配置 `gitea_user` / `gitea_token` Secret 后,推送和标签可发布到 Gitea 包仓库;`v<VERSION>` 标签仍可通过 `ipfs_api` / `ipfs_token` 上传 IPFS。未配置发布凭据时产物仅留在临时工作区,详见 [Drone 发布说明](docs/ipfs.md)。流水线不连接真实数据库,不读取 `data/`;真实服务矩阵仍使用 `scripts/test-matrix.ps1` 或 `scripts/test-matrix.sh`。
项目版本统一维护在根目录 `VERSION`。`serviceport.exe version` 或 `serviceport.exe --version --json` 可查看版本、Git 提交、构建时间与平台,管理界面顶部也可查看版本信息。构建/打包脚本自动注入元数据;直接 `go build` 仍使用 VERSION 的版本值,但提交和时间可能显示 `unknown`。
+4
View File
@@ -1,5 +1,9 @@
# 变更原因与设计记录
## Drone 产物可见性与 Gitea 包发布(2026-09-23)
原因:Drone 原先只在临时工作区创建归档,构建成功后无法直接下载,容易误判为“打包没有反应”。现在 package 步骤打印路径及归档 SHA256,push/tag 在配置 `gitea_user` 与 `gitea_token` 时上传到 Gitea Generic Packages,并打印下载地址;未配置则明确跳过。PR 仍只验证打包,tag IPFS 上传维持原行为。push 用提交 SHA、tag 用 `VERSION` 作为包版本;重复发布相同版本文件可能失败。仅影响 CI 和发布方式,不改变运行时行为或数据,无迁移。若无构建记录仍需检查 Drone 仓库启用、Gitea webhook 和 runner。本地验证:YAML 解析及事件/步骤静态检查、`git diff --check`;未运行真实 Drone/Gitea 上传。
## Drone CI Linux 打包修复(2026-09-23)
原因:现有流水线仍引用旧 `agentdb` 模块和命令入口,不能编译本项目。改为固定 Go 1.25.0 和 Node 22.19.0,先测试并构建前端,再以受限编译并发生成内嵌页面的 `serviceport` Linux amd64 无 CGO 单文件程序,使用既有 `verify-package.mjs` 在隔离临时数据库与端口上验证后归档并生成 SHA256;可选标签 IPFS 上传保留且 API 路径不重复拼接。仅影响 CI 构建与发布,无运行时配置或数据迁移。本地 YAML 解析及 Go 1.25.0 Linux amd64 交叉编译通过;Windows 宿主无法运行 Linux 验证程序,未在真实 Drone runner/IPFS 节点发布,也未连接真实目标服务。
+9 -3
View File
@@ -1,12 +1,18 @@
# Drone CI 与 IPFS 发布
# Drone CI 与发布包
Drone 的 push、pull_request、tag 流水线先执行 Go 测试、`go vet` 和前端构建,再编译 Linux amd64 无 CGO 单文件程序。打包前运行 `scripts/verify-package.mjs`,在隔离临时目录检查版本信息、内嵌网页、健康检查与登录。所有事件均生成 `bin/releases/serviceport-<VERSION>-linux-amd64.tar.gz`;仅 `v<VERSION>` 标签运行可选 IPFS 上传。不发布 Windows 程序或容器镜像。
Drone 的 push、pull_request、tag 流水线先执行 Go 测试、`go vet` 和前端构建,再编译 Linux amd64 无 CGO 单文件程序。打包前运行 `scripts/verify-package.mjs`,在隔离临时目录检查版本信息、内嵌网页、健康检查与登录。所有事件均生成 `bin/releases/serviceport-<VERSION>-linux-amd64.tar.gz`,日志打印归档路径和 SHA256;push 和 tag 可上传 Gitea Generic Packages,仅 tag 可选上传 IPFS。不发布 Windows 程序或容器镜像。
若 Drone 页面没有任何构建记录,先在 Drone 启用该 Gitea 仓库,确认 Gitea webhook 投递成功、Linux amd64 Docker runner 在线,再推送新提交或重新触发构建;修改 YAML 本身不能启动 Drone。流水线归档位于临时工作区,构建结束后不会自动出现在仓库附件中。
在 Drone 仓库设置以下 Secret:
- `ipfs_api`:IPFS HTTP API 根地址,例如 `https://node.example` 或 `https://node.example/api/v0`。不要提交到仓库。
- `ipfs_token`:可选的 Bearer token;无认证节点可设置为空值。
- `gitea_user`:有权向仓库所有者发布包的 Gitea 用户名。
- `gitea_token`:该用户具有包写入权限的访问令牌。两项都配置后,push/tag 上传归档到 `https://git.freeicu.top/api/packages/<仓库所有者>/generic/serviceport/<包版本>/serviceport-<VERSION>-linux-amd64.tar.gz`,日志打印下载地址;请勿在日志或仓库暴露令牌。
Gitea 包版本在 tag 时为 `VERSION`,在 push 时为完整提交 SHA,以免不同提交的同一版本归档互相覆盖;PR 不发布。缺少 Gitea 凭据时明确记录跳过,包仍只存在于临时工作区。上传 HTTP 失败则流水线失败。重复运行同一个 tag 或提交可能因 Gitea 拒绝同名文件而失败;需在包仓库删除原文件后重试。
上传步骤使用 `pin=true` 和 `wrap-with-directory=true`,日志输出根 CID。IPFS API 不可用或上传失败时,标签流水线失败;未配置 `ipfs_api` 时仅跳过上传,不影响测试和打包。标签必须与 `VERSION` 完全一致并带 `v` 前缀,例如 `VERSION=1.2.3` 对应 `v1.2.3`。
发布包内容为 Linux amd64 无 CGO 二进制、`VERSION`、`README.md`、构建/测试文档和 `SHA256SUMS.txt`。Windows 单 EXE 仍通过 `scripts/package.ps1` 单独生成。Drone 必须使用 Linux amd64 Docker runner;归档留在构建工作区,持久下载需由 Drone artifact 存储或外部上传服务保存。流水线验证不代表真实数据库或 SSH 服务器的在线测试。
发布包内容为 Linux amd64 无 CGO 二进制、`VERSION`、`README.md`、构建/测试文档和 `SHA256SUMS.txt`。Windows 单 EXE 仍通过 `scripts/package.ps1` 单独生成。Drone 必须使用 Linux amd64 Docker runner;流水线验证不代表真实数据库或 SSH 服务器的在线测试。