#!/bin/bash # 快速打包 SDK 脚本 set -e PACKAGE_NAME=$1 VERSION=$2 if [ -z "$PACKAGE_NAME" ] || [ -z "$VERSION" ]; then echo "用法: ./build_sdk.sh " echo "" echo "示例:" echo " ./build_sdk.sh BaseCore 1.0.0" echo " ./build_sdk.sh BaseCommon 1.0.0" echo " ./build_sdk.sh CapabilityPush 1.0.0" exit 1 fi SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" if [ ! -d "$PACKAGE_NAME" ]; then echo "❌ 错误: 找不到包 '$PACKAGE_NAME'" echo "" echo "可用的包:" ls -d */ | grep -E "^(Base|Capability)" | sed 's|/$||' | sed 's/^/ - /' exit 1 fi cd "$PACKAGE_NAME" echo "=== 打包 $PACKAGE_NAME v$VERSION ===" echo "" # 1. 检查 Package.swift if [ ! -f "Package.swift" ]; then echo "❌ 错误: 找不到 Package.swift" exit 1 fi # 2. 编译 echo "1. 编译 $PACKAGE_NAME..." swift build if [ $? -ne 0 ]; then echo "❌ 编译失败" exit 1 fi echo " ✅ 编译成功" echo "" # 3. 测试 echo "2. 运行测试..." if [ -d "Tests" ] && [ "$(ls -A Tests 2>/dev/null)" ]; then swift test if [ $? -ne 0 ]; then echo "❌ 测试失败" exit 1 fi echo " ✅ 测试通过" else echo " ⚠️ 没有测试文件,跳过" fi echo "" # 4. 检查 Git(可选) if [ -d ".git" ]; then echo "3. 创建 Git 标签..." # 检查是否有未提交的更改 if [ -n "$(git status --porcelain)" ]; then echo " ⚠️ 有未提交的更改,建议先提交" read -p " 是否继续?(y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi # 检查标签是否已存在 if git rev-parse "$VERSION" >/dev/null 2>&1; then echo " ⚠️ 标签 $VERSION 已存在" read -p " 是否覆盖?(y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi git tag -d "$VERSION" 2>/dev/null || true fi # 创建标签 git tag "$VERSION" echo " ✅ 标签已创建: $VERSION" echo "" echo " 提示: 使用以下命令推送标签:" echo " git push origin main" echo " git push origin $VERSION" else echo "3. Git 仓库未初始化,跳过标签创建" echo " 提示: 运行 'git init' 初始化仓库" fi echo "" echo "✅ $PACKAGE_NAME v$VERSION 打包完成!" echo "" echo "下一步:" echo " 1. 如果使用 Git,推送标签:git push origin $VERSION" echo " 2. 在其他项目中使用:.package(url: \"...\", from: \"$VERSION\")"