feat: add ARM64 runtime release configuration
This commit is contained in:
@@ -4,24 +4,37 @@
|
|||||||
|
|
||||||
## 发布清单
|
## 发布清单
|
||||||
|
|
||||||
`release.json` 是发布入口:`schema_version` 为清单格式版本,`release_id` 标识一次发布,`version` 为精确 DSH 版本,`deployment_schema` 为运行布局版本,`platforms` 为支持的平台。当前为 `runtime-7.1`、DSH `0.2.0-rc.2`、布局 7、`linux/amd64`。
|
`release.json` 是发布入口:`schema_version` 为清单格式版本,`release_id` 标识一次发布,`version` 为精确 DSH 版本,`deployment_schema` 为运行布局版本,`platforms` 为支持的平台。当前待发布配置为 `runtime-7.2`、DSH `0.2.0-rc.2`、布局 7、`linux/amd64` 和 `linux/arm64`(aarch64,不含 32 位 ARM)。
|
||||||
|
|
||||||
|
ARM64 验收状态:已确认 Node/Caddy 基础镜像提供 ARM64 版本,但尚未完成 ARM64 runtime 构建及运行验收。清单声明会开放面板的对应平台构建入口,不等于兼容性证明;验收完成前不要推送发布。
|
||||||
|
|
||||||
此分支是可信代码来源,不是仅供读取的数据源:Dockerfile 和安装脚本会在构建时执行。只使用经过审核的提交,不要将不可信分支、PR 或任意远端内容直接用于构建。清单本身不代表镜像已经完成运行验收。
|
此分支是可信代码来源,不是仅供读取的数据源:Dockerfile 和安装脚本会在构建时执行。只使用经过审核的提交,不要将不可信分支、PR 或任意远端内容直接用于构建。清单本身不代表镜像已经完成运行验收。
|
||||||
|
|
||||||
## 本地构建与检查
|
## 本地构建与检查
|
||||||
|
|
||||||
需要 Docker、Node.js,以及拉取基础镜像和构建依赖的网络。从仓库根目录执行,版本和平台直接取自清单,不跟踪 latest:
|
需要 Docker、Node.js,以及拉取基础镜像和构建依赖的网络。从仓库根目录执行,DSH 版本取自清单,平台按 Docker daemon 架构选择,不跟踪 latest:
|
||||||
|
|
||||||
~~~sh
|
~~~sh
|
||||||
|
set -eu
|
||||||
DSH_VERSION="$(node -p "require('./release.json').version")"
|
DSH_VERSION="$(node -p "require('./release.json').version")"
|
||||||
PLATFORM="$(node -p "require('./release.json').platforms[0]")"
|
case "$(docker info --format '{{.Architecture}}')" in
|
||||||
|
aarch64|arm64) PLATFORM=linux/arm64 ;;
|
||||||
|
x86_64|amd64) PLATFORM=linux/amd64 ;;
|
||||||
|
*) echo 'Unsupported Docker daemon architecture' >&2; exit 1 ;;
|
||||||
|
esac
|
||||||
RELEASE_ID="$(node -p "require('./release.json').release_id")"
|
RELEASE_ID="$(node -p "require('./release.json').release_id")"
|
||||||
node --test image/*.test.mjs
|
node --test image/*.test.mjs
|
||||||
docker build --platform "$PLATFORM" \
|
docker build --platform "$PLATFORM" \
|
||||||
--build-arg DSH_VERSION="$DSH_VERSION" \
|
--build-arg DSH_VERSION="$DSH_VERSION" \
|
||||||
-t "dsh-web:$RELEASE_ID" ./image
|
-t "dsh-web:$RELEASE_ID-${PLATFORM#linux/}" ./image
|
||||||
~~~
|
~~~
|
||||||
|
|
||||||
|
默认按 Docker daemon 架构原生构建,不再固定取清单第一个平台。在交叉构建环境可手动将 PLATFORM 设置为 linux/arm64 或 linux/amd64;需要事先配置对应原生 builder 或 QEMU/binfmt,仅设置 --platform 不会自动提供模拟能力。
|
||||||
|
|
||||||
|
Dockerfile 两个阶段均继承目标平台,无需写死架构;不要将 Caddy 阶段固定为构建主机平台,也不要复用另一架构的 node_modules。
|
||||||
|
|
||||||
|
发布前分别验证两个架构的镜像构建、非 root 启动、代理认证、终端及原生模块、内置插件离线协调、工作区写入和重启持久化,以及升级/恢复路径。迁移工作区时需重新安装其中的架构相关依赖。
|
||||||
|
|
||||||
`image/` 是构建上下文。构建只生成本地镜像,不推送镜像,也不自动发布分支。保留 `image/init-profile.test.mjs` 作为独立 runtime 回归测试,覆盖初始化幂等性、保留已有配置和拒绝符号链接目录;它不依赖面板,且被 `image/.dockerignore` 排除在构建上下文之外。此测试不能替代真实容器启动、插件和持久化验收。
|
`image/` 是构建上下文。构建只生成本地镜像,不推送镜像,也不自动发布分支。保留 `image/init-profile.test.mjs` 作为独立 runtime 回归测试,覆盖初始化幂等性、保留已有配置和拒绝符号链接目录;它不依赖面板,且被 `image/.dockerignore` 排除在构建上下文之外。此测试不能替代真实容器启动、插件和持久化验收。
|
||||||
|
|
||||||
## 布局 7 合约
|
## 布局 7 合约
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
import { test } from 'node:test';
|
||||||
|
import assert from 'node:assert/strict';
|
||||||
|
import { readFileSync } from 'node:fs';
|
||||||
|
|
||||||
|
test('release targets AMD64 and ARM64 with layout 7', () => {
|
||||||
|
const release = JSON.parse(readFileSync(new URL('../release.json', import.meta.url), 'utf8'));
|
||||||
|
assert.deepEqual(release.platforms, ['linux/amd64', 'linux/arm64']);
|
||||||
|
assert.equal(release.deployment_schema, 7);
|
||||||
|
});
|
||||||
|
|
||||||
|
test('Node and Caddy stages inherit the target platform', () => {
|
||||||
|
const dockerfile = readFileSync(new URL('./Dockerfile', import.meta.url), 'utf8');
|
||||||
|
const stages = dockerfile.split(String.fromCharCode(10)).filter(line => line.startsWith('FROM '));
|
||||||
|
assert.deepEqual(stages, ['FROM caddy:2.10.2 AS proxy', 'FROM node:24-bookworm-slim']);
|
||||||
|
assert.ok(dockerfile.includes('COPY --from=proxy /usr/bin/caddy /usr/bin/caddy'));
|
||||||
|
});
|
||||||
+2
-2
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"schema_version": 1,
|
"schema_version": 1,
|
||||||
"release_id": "runtime-7.1",
|
"release_id": "runtime-7.2",
|
||||||
"version": "0.2.0-rc.2",
|
"version": "0.2.0-rc.2",
|
||||||
"deployment_schema": 7,
|
"deployment_schema": 7,
|
||||||
"platforms": ["linux/amd64"]
|
"platforms": ["linux/amd64", "linux/arm64"]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user