From 8eff05acfa67a5e0501dee66fbb9db847a7bc0dd Mon Sep 17 00:00:00 2001 From: liangxu Date: Wed, 6 May 2026 22:08:57 +0800 Subject: [PATCH] refactor(workflow): improve remote script structure and readability in desktop client build --- .gitea/workflows/desktop-client-build.yml | 234 +++++++++++----------- 1 file changed, 117 insertions(+), 117 deletions(-) diff --git a/.gitea/workflows/desktop-client-build.yml b/.gitea/workflows/desktop-client-build.yml index 6b1347f..2425fb8 100644 --- a/.gitea/workflows/desktop-client-build.yml +++ b/.gitea/workflows/desktop-client-build.yml @@ -291,21 +291,21 @@ jobs: printf 'USE_SUDO=%s\n' "${nas_use_sudo}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" cat <<'REMOTE_SCRIPT' -set -eu -SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" -unset SUDO_PASSWORD_B64 + set -eu + SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" + unset SUDO_PASSWORD_B64 -run_cmd() { - if [ "${USE_SUDO}" = "true" ]; then - printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" - else - "$@" - fi -} + run_cmd() { + if [ "${USE_SUDO}" = "true" ]; then + printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" + else + "$@" + fi + } -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#.*/##' -REMOTE_SCRIPT + 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#.*/##' + REMOTE_SCRIPT } | SSHPASS="${nas_ssh_password}" sshpass -e ssh \ -p "${nas_port}" \ -o BatchMode=no \ @@ -613,20 +613,20 @@ REMOTE_SCRIPT printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" cat <<'REMOTE_SCRIPT' -set -eu -SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" -unset SUDO_PASSWORD_B64 + set -eu + SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" + unset SUDO_PASSWORD_B64 -run_cmd() { - if [ "${USE_SUDO}" = "true" ]; then - printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" - else - "$@" - fi -} + run_cmd() { + if [ "${USE_SUDO}" = "true" ]; then + printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" + else + "$@" + fi + } -run_cmd mkdir -p "${OUTPUT_DIR}/${RELEASE_NAME}" -REMOTE_SCRIPT + run_cmd mkdir -p "${OUTPUT_DIR}/${RELEASE_NAME}" + REMOTE_SCRIPT } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" tar -C desktop-artifacts -czf "${archive_path}" . @@ -638,18 +638,18 @@ REMOTE_SCRIPT printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" cat <<'REMOTE_SCRIPT' -set -eu -SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" -unset SUDO_PASSWORD_B64 + set -eu + SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" + unset SUDO_PASSWORD_B64 -if [ "${USE_SUDO}" = "true" ]; then - printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" - rm -f "${REMOTE_ARCHIVE}" -else - tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" - rm -f "${REMOTE_ARCHIVE}" -fi -REMOTE_SCRIPT + if [ "${USE_SUDO}" = "true" ]; then + printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" + rm -f "${REMOTE_ARCHIVE}" + else + tar -xzf "${REMOTE_ARCHIVE}" -C "${REMOTE_RELEASE_DIR}" + rm -f "${REMOTE_ARCHIVE}" + fi + REMOTE_SCRIPT } | 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 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" cat <<'REMOTE_SCRIPT' -set -eu -SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" -unset SUDO_PASSWORD_B64 + set -eu + SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" + unset SUDO_PASSWORD_B64 -if [ "${USE_SUDO}" = "true" ]; then - tmp_file="$(mktemp)" - printf '%s\n' "${RELEASE_NAME}" > "${tmp_file}" - printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" cp "${tmp_file}" "${OUTPUT_DIR}/latest-desktop-client.txt" - rm -f "${tmp_file}" -else - printf '%s\n' "${RELEASE_NAME}" > "${OUTPUT_DIR}/latest-desktop-client.txt" -fi -REMOTE_SCRIPT + if [ "${USE_SUDO}" = "true" ]; then + tmp_file="$(mktemp)" + printf '%s\n' "${RELEASE_NAME}" > "${tmp_file}" + printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" cp "${tmp_file}" "${OUTPUT_DIR}/latest-desktop-client.txt" + rm -f "${tmp_file}" + else + printf '%s\n' "${RELEASE_NAME}" > "${OUTPUT_DIR}/latest-desktop-client.txt" + fi + REMOTE_SCRIPT } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" { @@ -679,89 +679,89 @@ REMOTE_SCRIPT printf 'USE_SUDO=%s\n' "${NAS_USE_SUDO}" printf 'SUDO_PASSWORD_B64=%s\n' "${sudo_password_b64}" cat <<'REMOTE_SCRIPT' -set -eu -SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" -unset SUDO_PASSWORD_B64 + set -eu + SUDO_PASSWORD="$(printf '%s' "${SUDO_PASSWORD_B64}" | base64 -d 2>/dev/null || true)" + unset SUDO_PASSWORD_B64 -run_cmd() { - if [ "${USE_SUDO}" = "true" ]; then - printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" - else - "$@" - fi -} + run_cmd() { + if [ "${USE_SUDO}" = "true" ]; then + printf '%s\n' "${SUDO_PASSWORD}" | sudo -S -p "" "$@" + else + "$@" + fi + } -versioned_paths_desc() { - root="$1" - pattern="$2" - prefix="$3" - suffix="$4" + versioned_paths_desc() { + root="$1" + pattern="$2" + prefix="$3" + suffix="$4" - for candidate in "${root}"/${pattern}; do - [ -e "${candidate}" ] || continue - name="${candidate##*/}" - version="${name#${prefix}}" - if [ -n "${suffix}" ]; then - version="${version%${suffix}}" - fi + for candidate in "${root}"/${pattern}; do + [ -e "${candidate}" ] || continue + name="${candidate##*/}" + version="${name#${prefix}}" + if [ -n "${suffix}" ]; then + version="${version%${suffix}}" + fi - case "${version}" in - *[!0-9.]*|""|*.*.*.*) - continue - ;; - esac + case "${version}" in + *[!0-9.]*|""|*.*.*.*) + continue + ;; + esac - major="$(printf '%s' "${version}" | cut -d. -f1)" - minor="$(printf '%s' "${version}" | cut -d. -f2)" - patch="$(printf '%s' "${version}" | cut -d. -f3)" + major="$(printf '%s' "${version}" | cut -d. -f1)" + minor="$(printf '%s' "${version}" | cut -d. -f2)" + patch="$(printf '%s' "${version}" | cut -d. -f3)" - case "${major}${minor}${patch}" in - *[!0-9]*|"") - continue - ;; - esac + case "${major}${minor}${patch}" in + *[!0-9]*|"") + continue + ;; + esac - printf '%s.%s.%s %s\n' "${major}" "${minor}" "${patch}" "${candidate}" - done | sort -t. -k1,1nr -k2,2nr -k3,3nr | awk '{print $2}' -} + printf '%s.%s.%s %s\n' "${major}" "${minor}" "${patch}" "${candidate}" + done | sort -t. -k1,1nr -k2,2nr -k3,3nr | awk '{print $2}' + } -keep_latest_two() { - root="$1" - pattern="$2" - prefix="$3" - suffix="$4" - mode="$5" - keep=0 + keep_latest_two() { + root="$1" + pattern="$2" + prefix="$3" + suffix="$4" + mode="$5" + keep=0 - for path in $(versioned_paths_desc "${root}" "${pattern}" "${prefix}" "${suffix}"); do - keep=$((keep + 1)) - if [ "${keep}" -gt 2 ]; then - if [ "${mode}" = "dir" ]; then - run_cmd rm -rf "${path}" - else - run_cmd rm -f "${path}" - fi - fi - done -} + for path in $(versioned_paths_desc "${root}" "${pattern}" "${prefix}" "${suffix}"); do + keep=$((keep + 1)) + if [ "${keep}" -gt 2 ]; then + if [ "${mode}" = "dir" ]; then + run_cmd rm -rf "${path}" + else + run_cmd rm -f "${path}" + fi + fi + done + } -for platform in mac win; do - release_platform_dir="${OUTPUT_DIR}/desktop-client-${CLIENT_VERSION}/${platform}" - [ -d "${release_platform_dir}" ] || continue + for platform in mac win; do + release_platform_dir="${OUTPUT_DIR}/desktop-client-${CLIENT_VERSION}/${platform}" + [ -d "${release_platform_dir}" ] || continue - platform_root="${OUTPUT_DIR}/${platform}" - run_cmd mkdir -p "${platform_root}" + platform_root="${OUTPUT_DIR}/${platform}" + run_cmd mkdir -p "${platform_root}" - for zip_file in "${release_platform_dir}"/*.zip; do - [ -f "${zip_file}" ] || continue - run_cmd cp -p "${zip_file}" "${platform_root}/" - done + for zip_file in "${release_platform_dir}"/*.zip; do + [ -f "${zip_file}" ] || continue + run_cmd cp -p "${zip_file}" "${platform_root}/" + done - keep_latest_two "${platform_root}" "省心推-${platform}-*.zip" "省心推-${platform}-" ".zip" "file" -done + keep_latest_two "${platform_root}" "省心推-${platform}-*.zip" "省心推-${platform}-" ".zip" "file" + done -keep_latest_two "${OUTPUT_DIR}" "desktop-client-*" "desktop-client-" "" "dir" -REMOTE_SCRIPT + keep_latest_two "${OUTPUT_DIR}" "desktop-client-*" "desktop-client-" "" "dir" + REMOTE_SCRIPT } | SSHPASS="${nas_ssh_password}" sshpass -e ssh ${ssh_opts} "${remote}" "sh -s" echo "Uploaded desktop client ${CLIENT_VERSION} to ${remote}:${remote_release_dir}"