统一 musl 全静态构建,规范 Dockerfile 与产物命名
Build and Release / release (push) Successful in 12s
Build and Release / build-and-test (amd64) (push) Successful in 1m27s
Build and Release / build-and-test (arm64) (push) Successful in 4m5s

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-06-10 10:12:08 +08:00
co-authored by Claude Opus 4.8
parent 69a9404a97
commit 491c9e0bc3
8 changed files with 21 additions and 107 deletions
+6 -5
View File
@@ -25,14 +25,15 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
[.gitea/workflows/ci.yaml](.gitea/workflows/ci.yaml) 是 Gitea Actions 流水线:
1. **build-and-test**(矩阵 `arch=[amd64,arm64] × distro=[ubuntu,alpine]`,跑在对应架构的原生 runner 上):用 `docker buildx``docker/Dockerfile.{distro}` 原生编译 → 打成 tar.gz → 仅 ubuntu distro 再`debian/build-deb.sh` 打 .deb → 上传 artifact。
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 Registrystable/main),并创建 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}`
- 编译选项(两个 Dockerfile 一致):`-DWITH_CC_CLIENT=ON -DWITH_CC_SERVER=ON -DBUILD_STATIC=ON -DWITH_OPENCL=OFF -DWITH_CUDA=OFF`,即 CPU-only 静态构建arm64/arm 走交叉编译并设 `-DARM_TARGET=8/7`
- 编译选项(`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`
- tar.gz 下载 URL 形如 `https://gitea.bcde.io/api/packages/wangdefa/generic/xxxig/{version}/xxxig-{arch}-{os}-{version}.tar.gz`
- tar.gz 下载 URL 形如 `https://gitea.bcde.io/api/packages/wangdefa/generic/xxxig/{version}/xxxig-{arch}-linux-static-{version}.tar.gz`
## 本地常用命令
@@ -41,10 +42,10 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
docker buildx build --platform linux/amd64 \
--build-arg XXXIG_VERSION=v6.26.0 \
--output type=local,dest=./output \
-f docker/Dockerfile.ubuntu .
-f docker/Dockerfile .
# 用已有 tar.gz 打 .deb 包
./debian/build-deb.sh amd64 6.26.0 xxxig-amd64-ubuntu-6.26.0.tar.gz
./debian/build-deb.sh amd64 6.26.0 xxxig-amd64-linux-static-6.26.0.tar.gz
# 改 shell 脚本后做静态检查(仓库未配置,需自行安装 shellcheck)
shellcheck script/*.sh debian/*.sh