新增 CI 和 Release 流水线,优化构建与发布流程,添加 VERSION 文件以统一版本管理
CI / validate (push) Successful in 5s
CI / build (amd64) (push) Successful in 22s
CI / build (arm64) (push) Successful in 3m48s
Release / build (amd64) (push) Successful in 28s
Release / build (arm64) (push) Successful in 3m30s
Release / release (push) Successful in 35s
CI / validate (push) Successful in 5s
CI / build (amd64) (push) Successful in 22s
CI / build (arm64) (push) Successful in 3m48s
Release / build (amd64) (push) Successful in 28s
Release / build (arm64) (push) Successful in 3m30s
Release / release (push) Successful in 35s
This commit is contained in:
@@ -23,13 +23,13 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
|
||||
## 构建与发布流程(CI)
|
||||
|
||||
[.gitea/workflows/ci.yaml](.gitea/workflows/ci.yaml) 是 Gitea Actions 流水线:
|
||||
Gitea Actions 拆成两条独立流水线:
|
||||
|
||||
1. **build-and-test**(矩阵 `arch=[amd64,arm64]`,跑在对应架构的原生 runner 上):用 `docker buildx` 按 `docker/Dockerfile` 原生编译 → 打成 tar.gz → 调 `debian/build-deb.sh` 打 .deb → 上传 artifact。
|
||||
2. **release**(仅 tag 触发):下载 artifact,上传 tar.gz 到 Generic Package Registry、上传 .deb 到 Debian Registry(stable/main),并创建 Gitea Release。
|
||||
1. [.gitea/workflows/ci.yml](.gitea/workflows/ci.yml) 仅由分支推送触发:先检查版本号和 shell 语法,再用 amd64、arm64 原生 runner 并行编译、执行严格冒烟测试并验证 DEB 包内容;不上传 artifact。
|
||||
2. [.gitea/workflows/release.yml](.gitea/workflows/release.yml) 仅由 tag 推送触发:校验 tag 与 [VERSION](VERSION) 一致,双架构原生构建 → tar.gz → DEB → artifact 汇总 → SHA256SUMS → Generic/Debian Registry → Gitea Release。
|
||||
|
||||
关键点:
|
||||
- 版本号**硬编码**在 ci.yaml 的 `PACKAGE_VERSION: "6.26.0"`(纯数字,符合 Debian 版本规范),发版改这里。**关键分界**:上游源码 git tag 带 `v`(CI 用 `XXXIG_VERSION=v${PACKAGE_VERSION}` 检出 `v6.26.0`),而 tar.gz/deb/registry 路径等包版本一律用数字;release job 用 `VERSION="${TAG#v}"` 归一,install 脚本下载时同样 `${version#v}`。
|
||||
- 根目录 [VERSION](VERSION) 是唯一版本来源,内容为不带 `v` 的纯版本号;发布 tag 可带或不带 `v`,但归一后必须与 VERSION 完全一致。上游源码 git tag 带 `v`,CI 构建时自动补回;tar.gz、DEB 和 Registry 路径使用不带 `v` 的版本。
|
||||
- 编译选项(`docker/Dockerfile`,musl 全静态):`-DWITH_CC_CLIENT=ON -DWITH_CC_SERVER=ON -DBUILD_STATIC=ON -DWITH_OPENCL=OFF -DWITH_CUDA=OFF`,即 CPU-only 全静态构建;arm64/arm 在对应架构原生 runner 上编译并设 `-DARM_TARGET=8/7`。
|
||||
- **为何用 musl(alpine) 而非 glibc(勿改回 glibc 全静态)**:glibc 的 `getaddrinfo` 依赖运行时 `dlopen` NSS 模块,`-static` 全静态后无法加载,跨 glibc 版本运行时 DNS 解析失败(`errno=EBUSY` → libuv `UV_EBUSY` → `DNS error: "resource busy or locked"`)。musl 的 `getaddrinfo` 自带实现,全静态也能正常解析。曾用的 glibc(ubuntu) 构建线已删除。
|
||||
- 架构名映射:`x86_64→amd64`、`aarch64→arm64`。
|
||||
@@ -40,7 +40,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
|
||||
```bash
|
||||
# 本地编译某架构/发行版的二进制(输出到 ./output/linux_<arch>/)
|
||||
docker buildx build --platform linux/amd64 \
|
||||
--build-arg XXXIG_VERSION=v6.26.0 \
|
||||
--build-arg XXXIG_VERSION="v$(cat VERSION)" \
|
||||
--output type=local,dest=./output \
|
||||
-f docker/Dockerfile .
|
||||
|
||||
|
||||
Reference in New Issue
Block a user