r-util-js/scripts/publish.sh

125 lines
3.1 KiB
Bash
Raw Normal View History

2026-03-17 10:24:02 +08:00
#!/bin/bash
# 发布所有子包到私有 npm 仓库
2026-03-17 14:42:03 +08:00
# 使用方法: bash scripts/publish.sh [版本类型]
# 版本类型: major | minor | patch (默认 patch)
# 注意: 发布仓库地址使用各子包 package.json 中的 publishConfig.registry 配置
2026-03-17 10:24:02 +08:00
set -e
2026-03-17 14:42:03 +08:00
# 获取版本类型参数,默认为 patch
VERSION_TYPE=${1:-patch}
2026-03-17 10:24:02 +08:00
2026-03-17 14:42:03 +08:00
# 验证版本类型
if [[ ! "$VERSION_TYPE" =~ ^(major|minor|patch)$ ]]; then
echo "❌ 无效的版本类型: $VERSION_TYPE"
echo "使用方法: bash scripts/publish.sh [major|minor|patch]"
exit 1
fi
echo "🚀 开始发布流程 (版本类型: $VERSION_TYPE)"
2026-03-17 10:24:02 +08:00
echo ""
# 子包列表
PACKAGES=(
"packages/common"
"packages/vue3"
"packages/uni-app"
"packages/vue2"
)
2026-03-17 14:42:03 +08:00
# 1. 检查工作区是否干净
echo "🔍 检查 Git 工作区状态..."
if [[ -n $(git status -s) ]]; then
echo "⚠️ 工作区有未提交的更改,请先提交或暂存"
git status -s
read -p "是否继续? (y/N) " -n 1 -r
echo
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
exit 1
fi
fi
echo ""
# 2. 运行测试
echo "🧪 运行测试..."
if ! pnpm test; then
echo "❌ 测试失败,停止发布"
exit 1
fi
echo ""
# 3. 更新版本号
echo "📝 更新版本号 ($VERSION_TYPE)..."
for package in "${PACKAGES[@]}"; do
if [ -d "$package" ]; then
echo " 更新 $package 版本号..."
cd "$package"
npm version $VERSION_TYPE --no-git-tag-version
cd - > /dev/null
fi
done
echo ""
# 4. 构建所有包
2026-03-17 10:24:02 +08:00
echo "📦 构建所有包..."
2026-03-17 14:42:03 +08:00
if ! pnpm build; then
echo "❌构建失败,停止发布"
exit 1
fi
echo ""
# 5. 更新 README 中的版本信息
echo "📄 更新 README..."
COMMON_VERSION=$(node -p "require('./packages/common/package.json').version")
echo " 当前版本: $COMMON_VERSION"
echo ""
# 6. 提交版本更新
echo "💾 提交版本更新..."
git add packages/*/package.json
git commit -m "chore(release): publish v$COMMON_VERSION" || echo " 没有需要提交的更改"
2026-03-17 10:24:02 +08:00
echo ""
2026-03-17 14:42:03 +08:00
# 7. 发布每个包
echo "📤 开始发布包到 npm..."
2026-03-17 10:24:02 +08:00
for package in "${PACKAGES[@]}"; do
if [ -d "$package" ]; then
2026-03-17 14:42:03 +08:00
PACKAGE_NAME=$(node -p "require('./$package/package.json').name")
PACKAGE_VERSION=$(node -p "require('./$package/package.json').version")
echo "📤 发布 $PACKAGE_NAME@$PACKAGE_VERSION ..."
2026-03-17 10:24:02 +08:00
cd "$package"
2026-03-17 14:42:03 +08:00
if ! pnpm publish --no-git-checks; then
echo "$package 发布失败,停止后续发布"
exit 1
fi
2026-03-17 10:24:02 +08:00
cd - > /dev/null
2026-03-17 14:42:03 +08:00
echo "$PACKAGE_NAME@$PACKAGE_VERSION 发布成功"
2026-03-17 10:24:02 +08:00
echo ""
else
echo "⚠️ 跳过不存在的包: $package"
fi
done
2026-03-17 14:42:03 +08:00
# 8. 创建 Git 标签
echo "🏷️ 创建 Git 标签..."
git tag "v$COMMON_VERSION"
echo ""
# 9. 推送到远程仓库
echo "🔼 推送到远程仓库..."
read -p "是否推送到远程仓库? (y/N) " -n 1 -r
echo
if [[ $REPLY =~ ^[Yy]$ ]]; then
git push origin master
git push origin "v$COMMON_VERSION"
echo "✅ 已推送到远程仓库"
else
echo "⚠️ 跳过推送,请手动执行:"
echo " git push origin master"
echo " git push origin v$COMMON_VERSION"
fi
echo ""
echo "🎉 所有包发布完成!版本: v$COMMON_VERSION"