fix(ci): docker-compose.override.yml 生成方式从 heredoc 改 printf 单行拼,彻底绕开 bash heredoc 结束分隔符必须行首 + 变量不展开 + YAML parser 误判 services: 三重坑
构建并部署 BYW VoiceHub / Preflight 语法与构建检查 (push) Successful in 2m22s
构建并部署 BYW VoiceHub / 构建并推送容器镜像 (push) Successful in 9m14s
构建并部署 BYW VoiceHub / 部署到生产服务器 (push) Successful in 6s

This commit is contained in:
2026-09-06 15:10:36 +08:00
parent 732c9c6725
commit 43e2a05666
+8 -7
View File
@@ -489,14 +489,15 @@ jobs:
docker tag "${IMAGE_NEW}" "${IMAGE_LATEST}"
echo "New image pulled and tagged as latest"
# heredoc 分隔符用 COMPOSE_OVERRIDE,不能用 YAML(外层是 .yml 文件,YAML parser 会冲突)
# 注意:heredoc 内容和结束 COMPOSE_OVERRIDE 行必须保持同样的缩进(跟 run block 对齐),否则 YAML parser 会把 services: 当 YAML key 解析
cat > docker-compose.override.yml <<'COMPOSE_OVERRIDE'
services:
voicehub:
image: ${IMAGE_NEW}
COMPOSE_OVERRIDE
# 用 printf 拼 override.yml,彻底避免 bash heredoc 的三重坑:
# 1) 结束分隔符必须行首(否则 bash 不认,把后面整段代码都写进文件)
# 2) 内层 <<'XXX' 单引号包裹导致变量不展开(image: ${IMAGE_NEW} 会是字面量)
# 3) 外层 .yml parser 把 heredoc 里的 services: 当 YAML mapping key 解析
printf 'services:\n voicehub:\n image: %s\n' "${IMAGE_NEW}" > docker-compose.override.yml
echo "docker-compose.override.yml written, image=${IMAGE_NEW}"
echo "--- override.yml content ---"
cat docker-compose.override.yml
echo "--- override.yml end ---"
if [ ! -f docker-compose.yml ]; then
echo "docker-compose.yml 不存在,自动从仓库模板下载(如访问 GitHub 会自动加 gh-proxy 前缀)"