diff --git a/entrypoint.sh b/entrypoint.sh index 55db888..b16a4ef 100644 --- a/entrypoint.sh +++ b/entrypoint.sh @@ -1,56 +1,72 @@ -#!/bin/bash +#!/usr/bin/env bash -echo "==================================================" +set -euo pipefail -echo "參數檢查" +separator() { + printf '%s\n' "==================================================" +} -echo "--------------------------------------------------" +section() { + printf '\n%s\n' "$1" + printf '%s\n' "--------------------------------------------------" +} -# 顯示 GITEA_SERVER_URL 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "GITEA_SERVER_URL=$GITEA_SERVER_URL" && ([ -z "$GITEA_SERVER_URL" ] || [ "$GITEA_SERVER_URL" = "null" ]) && exit 1 +require_var() { + local name="$1" + local value="${!name:-}" -# 顯示 GITEA_REPOSITORY 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "GITEA_REPOSITORY=$GITEA_REPOSITORY" && ([ -z "$GITEA_REPOSITORY" ] || [ "$GITEA_REPOSITORY" = "null" ]) && exit 1 + printf '%s=%s\n' "$name" "$value" + if [ -z "$value" ] || [ "$value" = "null" ]; then + printf '錯誤: %s 不可為空或 null\n' "$name" >&2 + exit 1 + fi +} -# 顯示 CONFIGURATION 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "CONFIGURATION=$CONFIGURATION" && ([ -z "$CONFIGURATION" ] || [ "$CONFIGURATION" = "null" ]) && exit 1 +separator +section "參數檢查" -# 顯示 RELEASE_PROJECT 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_PROJECT=$RELEASE_PROJECT" && ([ -z "$RELEASE_PROJECT" ] || [ "$RELEASE_PROJECT" = "null" ]) && exit 1 +require_var GITEA_SERVER_URL +require_var GITEA_REPOSITORY +require_var CONFIGURATION +require_var RELEASE_PROJECT +require_var RELEASE_VERSION +require_var RELEASE_AUTHOR +require_var RELEASE_COMPANY +require_var RELEASE_DESCRIPTION -# 顯示 RELEASE_VERSION 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_VERSION=$RELEASE_VERSION" && ([ -z "$RELEASE_VERSION" ] || [ "$RELEASE_VERSION" = "null" ]) && exit 1 +readonly RELEASE_COPYRIGHT="Copyright (c) $(date +%Y) ${RELEASE_COMPANY}" +readonly RELEASE_URL="${GITEA_SERVER_URL}/${GITEA_REPOSITORY}/src/branch/master" +readonly OUTPUT_DIR="${WORKSPACE}/output" -# 顯示 RELEASE_AUTHOR 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_AUTHOR=$RELEASE_AUTHOR" && ([ -z "$RELEASE_AUTHOR" ] || [ "$RELEASE_AUTHOR" = "null" ]) && exit 1 +printf 'RELEASE_COPYRIGHT=%s\n' "$RELEASE_COPYRIGHT" +printf 'RELEASE_URL=%s\n' "$RELEASE_URL" +printf 'OUTPUT_DIR=%s\n' "$OUTPUT_DIR" -# 顯示 RELEASE_COMPANY 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_COMPANY=$RELEASE_COMPANY" && ([ -z "$RELEASE_COMPANY" ] || [ "$RELEASE_COMPANY" = "null" ]) && exit 1 +section "打包 NUGET 套件" -# 組合 RELEASE_COPYRIGHT 參數並顯示 -RELEASE_COPYRIGHT=$(date +%Y) -RELEASE_COPYRIGHT="Copyright©$RELEASE_COPYRIGHT $RELEASE_COMPANY" && echo "RELEASE_COPYRIGHT=$RELEASE_COPYRIGHT" +if [ ! -d "$RELEASE_PROJECT" ]; then + printf '錯誤: 找不到專案目錄 %s\n' "$RELEASE_PROJECT" >&2 + exit 1 +fi -# 顯示 RELEASE_DESCRIPTION 參數,並檢查是否為空或 "null",如果是則輸出錯誤訊息並退出 -echo "RELEASE_DESCRIPTION=$RELEASE_DESCRIPTION" && ([ -z "$RELEASE_DESCRIPTION" ] || [ "$RELEASE_DESCRIPTION" = "null" ]) && exit 1 +mkdir -p "$OUTPUT_DIR" -echo "==================================================" +printf '專案目錄=%s\n' "$RELEASE_PROJECT" +printf '組建配置=%s\n' "$CONFIGURATION" +printf '版本號=%s\n' "$RELEASE_VERSION" -echo "打包 NUGET 套件" - -echo "--------------------------------------------------" - -# 組合來源連結 -RELEASE_URL="$GITEA_SERVER_URL/$GITEA_REPOSITORY/src/branch/master" - -# 打包 NUGET 套件 -cd $RELEASE_PROJECT && dotnet pack -c "$CONFIGURATION" -o "$WORKSPACE/output" \ +cd "$RELEASE_PROJECT" +dotnet pack \ + -c "$CONFIGURATION" \ + -o "$OUTPUT_DIR" \ /p:PackageVersion="$RELEASE_VERSION" \ /p:RepositoryUrl="$RELEASE_URL" \ - /p:RepositoryType="git" \ + /p:RepositoryType=git \ /p:Authors="$RELEASE_AUTHOR" \ /p:Company="$RELEASE_COMPANY" \ /p:Copyright="$RELEASE_COPYRIGHT" \ /p:Description="$RELEASE_DESCRIPTION" -echo "==================================================" \ No newline at end of file +section "完成" +printf '輸出位置=%s\n' "$OUTPUT_DIR" +separator