refactor(workflow): improve remote script structure and readability in desktop client build
Desktop Client Build / Resolve Build Metadata (push) Successful in 23s
Desktop Client Build / Build macOS Client (push) Has been cancelled
Desktop Client Build / Build Windows Client (push) Has been cancelled
Desktop Client Build / Publish Client Artifacts to NAS (push) Has been cancelled

This commit is contained in:
2026-05-06 22:08:57 +08:00
parent 23144a1280
commit 8eff05acfa
+42 -42
View File
@@ -291,21 +291,21 @@ jobs:
printf 'USE_SUDO=%s\n' "${nas_use_sudo}" printf 'USE_SUDO=%s\n' "${nas_use_sudo}"
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
cat <<'REMOTE_SCRIPT' cat <<'REMOTE_SCRIPT'
set -eu set -eu
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
unset SUDO_PASSWORD_B64 unset SUDO_PASSWORD_B64
run_cmd() { run_cmd() {
if [ "${USE_SUDO}" = "true" ]; then if [ "${USE_SUDO}" = "true" ]; then
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@"
else else
"$@" "$@"
fi fi
} }
run_cmd mkdir -p "${OUTPUT_DIR}" run_cmd mkdir -p "${OUTPUT_DIR}"
run_cmd find "${OUTPUT_DIR}" -maxdepth 3 \( -type f -o -type d -o -type l \) -print 2>/dev/null | sed 's#.*/##' run_cmd find "${OUTPUT_DIR}" -maxdepth 3 \( -type f -o -type d -o -type l \) -print 2>/dev/null | sed 's#.*/##'
REMOTE_SCRIPT REMOTE_SCRIPT
} | SSHPASS="${nas_ssh_password}" sshpass -e ssh \ } | SSHPASS="${nas_ssh_password}" sshpass -e ssh \
-p "${nas_port}" \ -p "${nas_port}" \
-o BatchMode=no \ -o BatchMode=no \
@@ -613,20 +613,20 @@ REMOTE_SCRIPT
printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}"
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
cat <<'REMOTE_SCRIPT' cat <<'REMOTE_SCRIPT'
set -eu set -eu
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
unset SUDO_PASSWORD_B64 unset SUDO_PASSWORD_B64
run_cmd() { run_cmd() {
if [ "${USE_SUDO}" = "true" ]; then if [ "${USE_SUDO}" = "true" ]; then
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@"
else else
"$@" "$@"
fi fi
} }
run_cmd mkdir -p "${OUTPUT_DIR}/${RELEASE_NAME}" run_cmd mkdir -p "${OUTPUT_DIR}/${RELEASE_NAME}"
REMOTE_SCRIPT REMOTE_SCRIPT
} | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s"
tar -C desktop-artifacts -czf "${archive_path}" . tar -C desktop-artifacts -czf "${archive_path}" .
@@ -638,18 +638,18 @@ REMOTE_SCRIPT
printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}"
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
cat <<'REMOTE_SCRIPT' cat <<'REMOTE_SCRIPT'
set -eu set -eu
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
unset SUDO_PASSWORD_B64 unset SUDO_PASSWORD_B64
if [ "${USE_SUDO}" = "true" ]; then if [ "${USE_SUDO}" = "true" ]; then
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}"
rm -f "${REMOTE_ARCHIVE}" rm -f "${REMOTE_ARCHIVE}"
else else
tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}"
rm -f "${REMOTE_ARCHIVE}" rm -f "${REMOTE_ARCHIVE}"
fi fi
REMOTE_SCRIPT REMOTE_SCRIPT
} | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s"
{ {
@@ -658,19 +658,19 @@ REMOTE_SCRIPT
printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}"
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
cat <<'REMOTE_SCRIPT' cat <<'REMOTE_SCRIPT'
set -eu set -eu
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
unset SUDO_PASSWORD_B64 unset SUDO_PASSWORD_B64
if [ "${USE_SUDO}" = "true" ]; then if [ "${USE_SUDO}" = "true" ]; then
tmp_file="$(mktemp)" tmp_file="$(mktemp)"
printf '%s\n' "${RELEASE_NAME}" > "${tmp_file}" printf '%s\n' "${RELEASE_NAME}" > "${tmp_file}"
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" cp "${tmp_file}" "${OUTPUT_DIR}/latest-desktop-client.txt" printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" cp "${tmp_file}" "${OUTPUT_DIR}/latest-desktop-client.txt"
rm -f "${tmp_file}" rm -f "${tmp_file}"
else else
printf '%s\n' "${RELEASE_NAME}" > "${OUTPUT_DIR}/latest-desktop-client.txt" printf '%s\n' "${RELEASE_NAME}" > "${OUTPUT_DIR}/latest-desktop-client.txt"
fi fi
REMOTE_SCRIPT REMOTE_SCRIPT
} | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s"
{ {
@@ -679,19 +679,19 @@ REMOTE_SCRIPT
printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}"
printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}"
cat <<'REMOTE_SCRIPT' cat <<'REMOTE_SCRIPT'
set -eu set -eu
SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)"
unset SUDO_PASSWORD_B64 unset SUDO_PASSWORD_B64
run_cmd() { run_cmd() {
if [ "${USE_SUDO}" = "true" ]; then if [ "${USE_SUDO}" = "true" ]; then
printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@"
else else
"$@" "$@"
fi fi
} }
versioned_paths_desc() { versioned_paths_desc() {
root="$1" root="$1"
pattern="$2" pattern="$2"
prefix="$3" prefix="$3"
@@ -723,9 +723,9 @@ versioned_paths_desc() {
printf '%s.%s.%s %s\n' "${major}" "${minor}" "${patch}" "${candidate}" printf '%s.%s.%s %s\n' "${major}" "${minor}" "${patch}" "${candidate}"
done | sort -t. -k1,1nr -k2,2nr -k3,3nr | awk '{print $2}' done | sort -t. -k1,1nr -k2,2nr -k3,3nr | awk '{print $2}'
} }
keep_latest_two() { keep_latest_two() {
root="$1" root="$1"
pattern="$2" pattern="$2"
prefix="$3" prefix="$3"
@@ -743,9 +743,9 @@ keep_latest_two() {
fi fi
fi fi
done done
} }
for platform in mac win; do for platform in mac win; do
release_platform_dir="${OUTPUT_DIR}/desktop-client-${CLIENT_VERSION}/${platform}" release_platform_dir="${OUTPUT_DIR}/desktop-client-${CLIENT_VERSION}/${platform}"
[ -d "${release_platform_dir}" ] || continue [ -d "${release_platform_dir}" ] || continue
@@ -758,10 +758,10 @@ for platform in mac win; do
done done
keep_latest_two "${platform_root}" "省心推-${platform}-*.zip" "省心推-${platform}-" ".zip" "file" keep_latest_two "${platform_root}" "省心推-${platform}-*.zip" "省心推-${platform}-" ".zip" "file"
done done
keep_latest_two "${OUTPUT_DIR}" "desktop-client-*" "desktop-client-" "" "dir" keep_latest_two "${OUTPUT_DIR}" "desktop-client-*" "desktop-client-" "" "dir"
REMOTE_SCRIPT REMOTE_SCRIPT
} | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s"
echo "Uploaded desktop client ${CLIENT_VERSION} to ${remote}:${remote_release_dir}" echo "Uploaded desktop client ${CLIENT_VERSION} to ${remote}:${remote_release_dir}"