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
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:
@@ -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,89 +679,89 @@ 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"
|
||||||
suffix="$4"
|
suffix="$4"
|
||||||
|
|
||||||
for candidate in "${root}"/${pattern}; do
|
for candidate in "${root}"/${pattern}; do
|
||||||
[ -e "${candidate}" ] || continue
|
[ -e "${candidate}" ] || continue
|
||||||
name="${candidate##*/}"
|
name="${candidate##*/}"
|
||||||
version="${name#${prefix}}"
|
version="${name#${prefix}}"
|
||||||
if [ -n "${suffix}" ]; then
|
if [ -n "${suffix}" ]; then
|
||||||
version="${version%${suffix}}"
|
version="${version%${suffix}}"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
case "${version}" in
|
case "${version}" in
|
||||||
*[!0-9.]*|""|*.*.*.*)
|
*[!0-9.]*|""|*.*.*.*)
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
major="$(printf '%s' "${version}" | cut -d. -f1)"
|
major="$(printf '%s' "${version}" | cut -d. -f1)"
|
||||||
minor="$(printf '%s' "${version}" | cut -d. -f2)"
|
minor="$(printf '%s' "${version}" | cut -d. -f2)"
|
||||||
patch="$(printf '%s' "${version}" | cut -d. -f3)"
|
patch="$(printf '%s' "${version}" | cut -d. -f3)"
|
||||||
|
|
||||||
case "${major}${minor}${patch}" in
|
case "${major}${minor}${patch}" in
|
||||||
*[!0-9]*|"")
|
*[!0-9]*|"")
|
||||||
continue
|
continue
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
|
|
||||||
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"
|
||||||
suffix="$4"
|
suffix="$4"
|
||||||
mode="$5"
|
mode="$5"
|
||||||
keep=0
|
keep=0
|
||||||
|
|
||||||
for path in $(versioned_paths_desc "${root}" "${pattern}" "${prefix}" "${suffix}"); do
|
for path in $(versioned_paths_desc "${root}" "${pattern}" "${prefix}" "${suffix}"); do
|
||||||
keep=$((keep + 1))
|
keep=$((keep + 1))
|
||||||
if [ "${keep}" -gt 2 ]; then
|
if [ "${keep}" -gt 2 ]; then
|
||||||
if [ "${mode}" = "dir" ]; then
|
if [ "${mode}" = "dir" ]; then
|
||||||
run_cmd rm -rf "${path}"
|
run_cmd rm -rf "${path}"
|
||||||
else
|
else
|
||||||
run_cmd rm -f "${path}"
|
run_cmd rm -f "${path}"
|
||||||
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
|
||||||
|
|
||||||
platform_root="${OUTPUT_DIR}/${platform}"
|
platform_root="${OUTPUT_DIR}/${platform}"
|
||||||
run_cmd mkdir -p "${platform_root}"
|
run_cmd mkdir -p "${platform_root}"
|
||||||
|
|
||||||
for zip_file in "${release_platform_dir}"/*.zip; do
|
for zip_file in "${release_platform_dir}"/*.zip; do
|
||||||
[ -f "${zip_file}" ] || continue
|
[ -f "${zip_file}" ] || continue
|
||||||
run_cmd cp -p "${zip_file}" "${platform_root}/"
|
run_cmd cp -p "${zip_file}" "${platform_root}/"
|
||||||
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}"
|
||||||
|
|||||||
Reference in New Issue
Block a user