61 lines
1.3 KiB
Bash
61 lines
1.3 KiB
Bash
#!/usr/bin/env bash
|
|
|
|
set -euo pipefail
|
|
|
|
readonly BORDER='=================================================='
|
|
readonly DIVIDER='--------------------------------------------------'
|
|
|
|
log_section() {
|
|
printf '%s\n%s\n%s\n' "$BORDER" "$1" "$DIVIDER"
|
|
}
|
|
|
|
log_kv() {
|
|
printf '%-16s %s\n' "$1" "$2"
|
|
}
|
|
|
|
fail() {
|
|
printf '錯誤: %s\n' "$1" >&2
|
|
exit 1
|
|
}
|
|
|
|
require_value() {
|
|
local name="$1"
|
|
local value="${2:-}"
|
|
|
|
log_kv "$name" "$value"
|
|
|
|
if [[ -z "$value" || "$value" == "null" ]]; then
|
|
fail "$name 不能為空"
|
|
fi
|
|
}
|
|
|
|
log_section '參數檢查'
|
|
require_value 'RELEASE_VERSION' "${RELEASE_VERSION:-}"
|
|
require_value 'RELEASE_FOLDER' "${RELEASE_FOLDER:-}"
|
|
|
|
if [[ ! -d "$RELEASE_FOLDER" ]]; then
|
|
fail "找不到資料夾: $RELEASE_FOLDER"
|
|
fi
|
|
|
|
if ! command -v zip >/dev/null 2>&1; then
|
|
fail '找不到 zip 指令,請確認映像檔已安裝 zip'
|
|
fi
|
|
|
|
archive_name="$(basename "$PWD").${RELEASE_VERSION}.zip"
|
|
archive_path="$PWD/$archive_name"
|
|
file_count="$(find "$RELEASE_FOLDER" -type f | wc -l | tr -d ' ')"
|
|
|
|
log_section '壓縮檔案'
|
|
log_kv '來源資料夾' "$RELEASE_FOLDER"
|
|
log_kv '檔案數量' "$file_count"
|
|
log_kv '輸出檔案' "$archive_name"
|
|
|
|
(
|
|
cd "$RELEASE_FOLDER"
|
|
zip -qr "$archive_path" .
|
|
)
|
|
|
|
log_kv '狀態' '壓縮完成'
|
|
log_kv '檔案位置' "$archive_path"
|
|
printf '%s\n' "$BORDER"
|