diff --git a/entrypoint.sh b/entrypoint.sh index 117347c..5e8a1ce 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,23 +1,60 @@ -#!/bin/bash +#!/usr/bin/env bash -echo "==================================================" +set -euo pipefail -echo "參數檢查" +readonly BORDER='==================================================' +readonly DIVIDER='--------------------------------------------------' -echo "--------------------------------------------------" +log_section() { + printf '%s\n%s\n%s\n' "$BORDER" "$1" "$DIVIDER" +} -# 顯示 RELEASE_VERSION 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_VERSION=$RELEASE_VERSION" && ([ -z "$RELEASE_VERSION" ] || [ "$RELEASE_VERSION" = "null" ]) && exit 1 +log_kv() { + printf '%-16s %s\n' "$1" "$2" +} -# 顯示 RELEASE_FOLDER 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_FOLDER=$RELEASE_FOLDER" && ([ -z "$RELEASE_FOLDER" ] || [ "$RELEASE_FOLDER" = "null" ]) && exit 1 +fail() { + printf '錯誤: %s\n' "$1" >&2 + exit 1 +} -echo "==================================================" +require_value() { + local name="$1" + local value="${2:-}" -echo "壓縮檔案" + log_kv "$name" "$value" -echo "--------------------------------------------------" + if [[ -z "$value" || "$value" == "null" ]]; then + fail "$name 不能為空" + fi +} -zip -r "$(basename "$PWD").$RELEASE_VERSION.zip" $RELEASE_FOLDER/* +log_section '參數檢查' +require_value 'RELEASE_VERSION' "${RELEASE_VERSION:-}" +require_value 'RELEASE_FOLDER' "${RELEASE_FOLDER:-}" -echo "==================================================" \ No newline at end of file +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"