Update:
1.SDK開發流程說明 ReadMe.md 2.主項目開發流程說明 3.新增Sdk發布腳本 4.新增repo鏈結/取消鏈結指令
This commit is contained in:
119
scripts/publish_sdk.sh
Executable file
119
scripts/publish_sdk.sh
Executable file
@@ -0,0 +1,119 @@
|
||||
#!/bin/bash
|
||||
# SDK Tag 發布腳本 (僅限 main 分支使用)
|
||||
# 用法: ./scripts/publish_sdk.sh <sdk-name> <version>
|
||||
|
||||
# 此腳本執行後的行為說明:
|
||||
# 1.強制分支檢查:如果當前不是 main 分支,腳本會立即報錯終止。
|
||||
# 2.版本一致性檢查:它會讀取 packages/xxx/pubspec.yaml 裡面的 version 欄位。如果你輸入的參數是 1.1.0 但檔案裡寫的是 1.0.9,腳本會拒絕執行。這強制要求你必須在 PR 階段就正確更新版本號。
|
||||
# 3.同步檢查:它會檢查本地的 main 是否與遠端的 origin/main 一致。這防止你在忘記 git pull 的情況下把 Tag 打在舊的 Commit 上。
|
||||
# 4.防重複檢查:如果該 Tag 名稱(例如 networks_sdk/1.1.0)已經存在,腳本會報錯,防止覆蓋發布。
|
||||
# 5.不修改檔案:此腳本不會修改任何代碼,它只負責「蓋章(打 Tag)」和「公告(Push Tag)」。
|
||||
|
||||
#操作流程:
|
||||
# 1.開發:在功能分支開發,手動更新 pubspec.yaml 的版本號。
|
||||
# 2.審核:提交 PR,通過測試與 Code Review,合併進入 main 分支。
|
||||
# 3.發布:
|
||||
# •git checkout main
|
||||
# •git pull
|
||||
# •執行 melos run publish:sdk:only -- <sdk-name> <version>
|
||||
# 範例:
|
||||
# melos run publish:sdk:only -- networks_sdk 1.1.0
|
||||
#
|
||||
# 4.完成:Tag 已推送到遠端,其他專案可以引用該 Tag。
|
||||
set -e
|
||||
|
||||
# 顏色定義
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
# 檢查參數
|
||||
if [ -z "$1" ] || [ -z "$2" ]; then
|
||||
echo -e "${RED}用法: $0 <sdk-name> <version>${NC}"
|
||||
echo "例如: $0 networks_sdk 1.0.0"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SDK_NAME=$1
|
||||
VERSION=$2
|
||||
PACKAGE_DIR="packages/$SDK_NAME"
|
||||
TAG_NAME="${SDK_NAME}/${VERSION}"
|
||||
|
||||
# 1. 檢查是否在 main 分支
|
||||
CURRENT_BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
||||
if [ "$CURRENT_BRANCH" != "main" ]; then
|
||||
echo -e "${RED}錯誤: 此腳本只能在 'main' 分支執行。${NC}"
|
||||
echo "當前分支為: $CURRENT_BRANCH"
|
||||
echo "請先合併 PR 並切換至 main 分支後再執行。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 2. 檢查 SDK 目錄與 pubspec.yaml
|
||||
if [ ! -f "$PACKAGE_DIR/pubspec.yaml" ]; then
|
||||
echo -e "${RED}錯誤: 找不到 $PACKAGE_DIR/pubspec.yaml${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 3. 檢查 pubspec.yaml 內部的版本號是否已經正確更新
|
||||
# 這是為了確保開發者在 PR 時已經手動改好了版本號
|
||||
FILE_VERSION=$(grep "^version: " "$PACKAGE_DIR/pubspec.yaml" | sed 's/version: //')
|
||||
if [ "$FILE_VERSION" != "$VERSION" ]; then
|
||||
echo -e "${RED}錯誤: 版本號不匹配!${NC}"
|
||||
echo "參數輸入的版本為: $VERSION"
|
||||
echo "pubspec.yaml 內的版本為: $FILE_VERSION"
|
||||
echo "請確保已在 PR 中更新了 pubspec.yaml 的版本號並已合併。"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 4. 檢查遠端是否有更新 (確保本地 main 是最新的)
|
||||
echo -e "${CYAN}正在檢查遠端狀態...${NC}"
|
||||
git fetch origin
|
||||
LOCAL=$(git rev-parse HEAD)
|
||||
REMOTE=$(git rev-parse origin/main)
|
||||
if [ "$LOCAL" != "$REMOTE" ]; then
|
||||
echo -e "${RED}錯誤: 本地 main 分支落後於遠端,請先執行 git pull。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 5. 檢查 Tag 是否已存在
|
||||
if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
|
||||
echo -e "${RED}錯誤: Tag '$TAG_NAME' 已經存在。${NC}"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN}SDK 正式發布 (Git Tag Only)${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo "SDK Name: $SDK_NAME"
|
||||
echo "Version: $VERSION"
|
||||
echo "Tag: $TAG_NAME"
|
||||
echo "Branch: main"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
|
||||
# 確認訊息
|
||||
echo -e "${YELLOW}警告:這將會為當前 commit 創建並推送一個正式的 Tag。${NC}"
|
||||
read -p "確定要發布 $TAG_NAME? (y/n): " confirm
|
||||
|
||||
if [ "$confirm" != "y" ] && [ "$confirm" != "Y" ]; then
|
||||
echo "已取消發布"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Step 1: Create Tag
|
||||
echo ""
|
||||
echo -e "${GREEN}[1/2] 創建本地 Git Tag...${NC}"
|
||||
git tag "$TAG_NAME"
|
||||
|
||||
# Step 2: Push Tag
|
||||
echo ""
|
||||
echo -e "${GREEN}[2/2] 推送 Tag 到遠端...${NC}"
|
||||
git push origin "$TAG_NAME"
|
||||
|
||||
echo ""
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo -e "${GREEN} Tag 發布成功!${NC}"
|
||||
echo -e "${GREEN}========================================${NC}"
|
||||
echo "現在可以在其他項目中使用此版本:"
|
||||
echo "ref: $TAG_NAME"
|
||||
Reference in New Issue
Block a user