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:
@@ -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`。
|
||||
|
||||
Executable
+48
@@ -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
|
||||
@@ -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:
|
||||
|
||||
Reference in New Issue
Block a user