From 23144a12805c8684e44d0b3eb7fa490d82e5ea7d Mon Sep 17 00:00:00 2001 From: liangxu Date: Wed, 6 May 2026 22:06:27 +0800 Subject: [PATCH] refactor(workflow): streamline sudo handling and improve script readability --- .gitea/workflows/desktop-client-build.yml | 208 +++++++++++----------- 1 file changed, 104 insertions(+), 104 deletions(-) diff --git a/.gitea/workflows/desktop-client-build.yml b/.gitea/workflows/desktop-client-build.yml index 2d9c064..6b1347f 100644 --- a/.gitea/workflows/desktop-client-build.yml +++ b/.gitea/workflows/desktop-client-build.yml @@ -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}"