ci: add multi-arch dev image build script

- deploy/docker/build-dev.sh + make image-dev: linux/amd64+arm64 build & push,
  dev/dev-<sha>/dev-<date> tags, registry inline cache, auto create buildx builder
- PUSH=0 falls back to host-arch build with --load for local verification
- verified end-to-end (PUSH=0): container frontend build, CGO-free cross compile,
  upx pack 31.7MB->11.8MB, image smoke test 200
This commit is contained in:
Sakurasan
2026-08-30 02:11:11 +08:00
parent 33f5e7b71a
commit 963da99fd6
3 changed files with 61 additions and 0 deletions
+8
View File
@@ -292,3 +292,11 @@ src/
- `composables/toast.ts`:模块级响应式 `toasts` 列表,`setToast(message, type?, duration?)` 推入带唯一 id 的条目并定时自动移除(默认 3s);`useToast()` 签名不变,13 个调用视图零改动;移除原 provide/inject 方案。
- `Toast.vue`:daisyUI `toast toast-top toast-end` 容器 + `TransitionGroup` 进出场动画(仅 transform/opacity,配合全局 reduced-motion 降级)、每条带关闭按钮(aria-label)、容器 `aria-live="polite"`。
- 验证:`pnpm build` 通过;浏览器实测连续触发两条 toast 同时堆叠展示、3s 后全部自动消失。
### 增量 8 — dev 镜像构建脚本(多平台)✅
- 新增 `deploy/docker/build-dev.sh` + `make image-dev`:
- 默认多平台 `linux/amd64,linux/arm64` 构建并推送(自动创建缺失的 buildx 容器构建器);`PUSH=0` 退化为本机架构构建并 `--load` 到本地。
- 标签:`dev`、`dev-<短SHA>`、`dev-<YYYYMMDD>`(`REGISTRY_IMAGE` / `PLATFORMS` / `BUILDER` / `DOCKERFILE` 均可用环境变量覆盖)。
- 推送时附带 registry inline cache(`--cache-from/--cache-to type=inline`)加速后续 dev 构建。
- 验证:`PUSH=0` 端到端实测通过(容器内前端构建 + Go 交叉编译 + upx 压缩 31.7MB→11.8MB + 本地加载);镜像冒烟测试 `/:200`、`/api/*:200`。
+48
View File
@@ -0,0 +1,48 @@
#!/usr/bin/env sh
# 构建 dev 镜像:默认多平台(amd64/arm64)并推送,PUSH=0 时按本机架构构建并加载到本地
#
# 用法:
# sh deploy/docker/build-dev.sh # 多平台构建并推送 dev 标签
# PUSH=0 sh deploy/docker/build-dev.sh # 本机架构构建 --load,仅本地
# REGISTRY_IMAGE=demo/openteam PLATFORMS=linux/amd64 sh deploy/docker/build-dev.sh
set -e
cd "$(dirname "$0")/../.."
REGISTRY_IMAGE=${REGISTRY_IMAGE:-mirrors2/opencatd-open}
PLATFORMS=${PLATFORMS:-linux/amd64,linux/arm64}
BUILDER=${BUILDER:-xbuilder}
PUSH=${PUSH:-1}
DOCKERFILE=${DOCKERFILE:-deploy/docker/Dockerfile}
SHORT_SHA=$(git rev-parse --short HEAD 2>/dev/null || echo unknown)
DATE_TAG=$(date +%Y%m%d)
# 确保 buildx 容器构建器存在(默认 docker driver 不支持多平台)
docker buildx inspect "$BUILDER" >/dev/null 2>&1 || docker buildx create --name "$BUILDER" --driver docker-container >/dev/null
TAGS="-t $REGISTRY_IMAGE:dev -t $REGISTRY_IMAGE:dev-$SHORT_SHA -t $REGISTRY_IMAGE:dev-$DATE_TAG"
if [ "$PUSH" = "1" ]; then
echo ">>> 多平台构建并推送: $PLATFORMS"
# shellcheck disable=SC2086
docker buildx build \
--builder "$BUILDER" \
--platform "$PLATFORMS" \
$TAGS \
--cache-from type=registry,ref="$REGISTRY_IMAGE:dev" \
--cache-to type=inline \
-f "$DOCKERFILE" \
. --push
echo ">>> 已推送: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)"
else
HOST_ARCH=$(docker version -f '{{.Server.Arch}}')
echo ">>> 本机架构构建并加载: linux/$HOST_ARCH"
docker buildx build \
--builder "$BUILDER" \
--platform "linux/$HOST_ARCH" \
$TAGS \
-f "$DOCKERFILE" \
. --load
echo ">>> 已加载本地镜像: $REGISTRY_IMAGE:dev (dev-$SHORT_SHA, dev-$DATE_TAG)"
fi
+5
View File
@@ -60,6 +60,11 @@ docker:
docker buildx inspect xbuilder --bootstrap
docker buildx build --platform linux/amd64,linux/arm64 -t mirrors2/opencatd-open:latest -f deploy/docker/Dockerfile . --push
.PHONY:image-dev
# build & push multi-arch dev image (PUSH=0 仅本地加载本机架构)
image-dev:
sh deploy/docker/build-dev.sh
.PHONY: clean
# clean
clean: