diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml index a16efa4..350afb3 100644 --- a/.gitea/workflows/deploy.yml +++ b/.gitea/workflows/deploy.yml @@ -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 前缀)"