#!/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"