diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 81f4dfe..fb02b6b 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -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-`(`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`。 diff --git a/deploy/docker/build-dev.sh b/deploy/docker/build-dev.sh new file mode 100755 index 0000000..2f65b26 --- /dev/null +++ b/deploy/docker/build-dev.sh @@ -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 diff --git a/makefile b/makefile index 156c9c4..a0e0841 100644 --- a/makefile +++ b/makefile @@ -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: