Files
BYW-VoiceHub/patches/0041-fix-ci-replace-heredoc-based-ENV_SH-with-printf-q-pi.patch
T

70 lines
4.2 KiB
Diff
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
From 4d39afd23f84e151bc03488cf47661b3ba9db843 Mon Sep 17 00:00:00 2001
From: HenryDu8133 <813367384@qq.com>
Date: Sat, 12 Sep 2026 00:54:20 +0800
Subject: [PATCH 41/58] =?UTF-8?q?fix(ci):=20replace=20heredoc-based=20ENV?=
=?UTF-8?q?=5FSH=20with=20printf=20%q=20pipe=20=E2=86=92=20resolve=20yaml?=
=?UTF-8?q?=20L544=20could=20not=20find=20expected=20':'=20colon=20false-p?=
=?UTF-8?q?ositive=20+=20bash=20-s=20positional=20arg=20for=20env=20source?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.gitea/workflows/deploy.yml | 37 ++++++++++++-------------------------
1 file changed, 12 insertions(+), 25 deletions(-)
diff --git a/.gitea/workflows/deploy.yml b/.gitea/workflows/deploy.yml
index acfbcaa..4b4df13 100644
--- a/.gitea/workflows/deploy.yml
+++ b/.gitea/workflows/deploy.yml
@@ -536,34 +536,21 @@ jobs:
# 本地预检查:ssh 先连上跑 whoami 确认连通,避免 20 分钟后才发现连不上
ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "whoami; docker --version; docker compose version"
- # 关键修复:远端 bash 前置 ENV=val 语法在 dash/sh 远端不认,
- # 改为先把变量用 printf 写到远端 /tmp/deploy_env.$$ 再远端 source 它,100% 可靠
+ # 关键修复:远端 bash 前置 ENV=val 语法在 dash/sh 远端不认,变量全空。
+ # 用 printf + \n 拼接完整 shell 脚本通过 stdin 注入到 ssh 远端 cat,
+ # 不用 heredoc,避免 YAML 冒号/缩进解析误判。
ENV_SH="/tmp/deploy_env_$$"
- # 注意:${IMAGE_NEW} / ${DEPLOY_PATH} 等在本地 shell 展开,不是远端,所以 heredoc 用 "" 双引号
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "cat > ${ENV_SH}" <<ENV_SH_EOF
-export IMAGE_NEW="${IMAGE_NEW}"
-export IMAGE_LATEST="${IMAGE_LATEST}"
-export DEPLOY_PATH="${DEPLOY_PATH}"
-export GITEA_HOST="${GITEA_HOST}"
-export GH_PROXY_PREFIX="${GH_PROXY_PREFIX}"
-export REGISTRY_PULL_USER="${REGISTRY_PULL_USER}"
-export REGISTRY_PULL_TOKEN="${REGISTRY_PULL_TOKEN}"
-export IMAGE_NAME="${IMAGE_NAME}"
-export NUXT_PUBLIC_SITE_URL="${NUXT_PUBLIC_SITE_URL}"
-export GITHUB_SERVER_URL="${GITHUB_SERVER_URL}"
-export GITHUB_REPOSITORY="${GITHUB_REPOSITORY}"
-export GITHUB_REF_NAME="${GITHUB_REF_NAME}"
-ENV_SH_EOF
+ ENV_PAYLOAD="$(printf 'export IMAGE_NEW=%q\nexport IMAGE_LATEST=%q\nexport DEPLOY_PATH=%q\nexport GITEA_HOST=%q\nexport GH_PROXY_PREFIX=%q\nexport REGISTRY_PULL_USER=%q\nexport REGISTRY_PULL_TOKEN=%q\nexport IMAGE_NAME=%q\nexport NUXT_PUBLIC_SITE_URL=%q\nexport GITHUB_SERVER_URL=%q\nexport GITHUB_REPOSITORY=%q\nexport GITHUB_REF_NAME=%q\n' \
+ "${IMAGE_NEW}" "${IMAGE_LATEST}" "${DEPLOY_PATH}" "${GITEA_HOST}" "${GH_PROXY_PREFIX}" \
+ "${REGISTRY_PULL_USER}" "${REGISTRY_PULL_TOKEN}" "${IMAGE_NAME}" "${NUXT_PUBLIC_SITE_URL}" \
+ "${GITHUB_SERVER_URL}" "${GITHUB_REPOSITORY}" "${GITHUB_REF_NAME}")"
+ printf '%s' "${ENV_PAYLOAD}" | ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "cat > ${ENV_SH}"
echo "[Deploy] env script written to ${ENV_SH} on remote"
+ # 立即回读验证远端文件非空 & IMAGE_NEW 非空,避免后面空跑
+ ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "set -e; ls -la ${ENV_SH}; grep -q IMAGE_NEW ${ENV_SH} && echo '[Deploy] env_sh IMAGE_NEW line OK'"
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" \
- "chmod +x ${ENV_SH} && bash -c 'source ${ENV_SH} && rm -f ${ENV_SH}'" <<'REMOTE_SCRIPT'
- # 注意:上面 source 的环境变量会自动继承到后面的 REMOTE_SCRIPT bash 子进程中
- true
-REMOTE_SCRIPT
-
- # 再次用 bash 显式 source env,然后执行真正的 deploy 脚本(双源保证)
- ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "bash -s -- ${ENV_SH}" <<'REMOTE_SCRIPT_MAIN'
+ # ssh 远端 bash -s 第一个参数传 $ENV_SH 路径,主脚本 source 它并做非空断言
+ ssh "${SSH_OPTS[@]}" "${DEPLOY_USER}@${DEPLOY_HOST}" "bash -s -- '${ENV_SH}'" <<'REMOTE_SCRIPT_MAIN'
set -euxo pipefail
ENV_SH="$1"
if [ -f "$ENV_SH" ]; then
--
2.45.1.windows.1