更新发布脚本
This commit is contained in:
@@ -1,10 +1,14 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# Jackery HACS 发布准备脚本
|
# Jackery HACS 发布准备脚本
|
||||||
# 此脚本帮助你准备发布到 HACS
|
# 此脚本帮助你准备发布到 HACS 并支持自动创建 GitHub Release
|
||||||
|
|
||||||
set -e
|
set -e
|
||||||
|
|
||||||
|
# 配置路径
|
||||||
|
COMPONENT_PATH="custom_components/jackery"
|
||||||
|
MANIFEST_FILE="$COMPONENT_PATH/manifest.json"
|
||||||
|
|
||||||
echo "🚀 准备发布 Jackery 到 HACS"
|
echo "🚀 准备发布 Jackery 到 HACS"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -15,6 +19,13 @@ if [ ! -f "hacs.json" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# 检查 manifest 文件是否存在
|
||||||
|
if [ ! -f "$MANIFEST_FILE" ]; then
|
||||||
|
echo "❌ 错误:未找到 $MANIFEST_FILE"
|
||||||
|
echo "请确认文件路径是否正确"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
# 检查是否有未提交的更改
|
# 检查是否有未提交的更改
|
||||||
if ! git diff-index --quiet HEAD --; then
|
if ! git diff-index --quiet HEAD --; then
|
||||||
echo "⚠️ 检测到未提交的更改"
|
echo "⚠️ 检测到未提交的更改"
|
||||||
@@ -35,7 +46,7 @@ if ! git diff-index --quiet HEAD --; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# 获取当前版本
|
# 获取当前版本
|
||||||
CURRENT_VERSION=$(grep -o '"version": "[^"]*"' custom_components/Jackery/manifest.json | cut -d'"' -f4)
|
CURRENT_VERSION=$(grep -o '"version": "[^"].*"' "$MANIFEST_FILE" | cut -d'"' -f4)
|
||||||
echo "📦 当前版本: $CURRENT_VERSION"
|
echo "📦 当前版本: $CURRENT_VERSION"
|
||||||
echo ""
|
echo ""
|
||||||
|
|
||||||
@@ -50,9 +61,11 @@ fi
|
|||||||
# 更新 manifest.json 中的版本号
|
# 更新 manifest.json 中的版本号
|
||||||
if [ "$NEW_VERSION" != "$CURRENT_VERSION" ]; then
|
if [ "$NEW_VERSION" != "$CURRENT_VERSION" ]; then
|
||||||
echo "📝 更新 manifest.json 中的版本号..."
|
echo "📝 更新 manifest.json 中的版本号..."
|
||||||
sed -i.bak "s/\"version\": \"$CURRENT_VERSION\"/\"version\": \"$NEW_VERSION\"/" custom_components/Jackery/manifest.json
|
# 使用 .bak 后缀以兼容 macOS 和 Linux sed
|
||||||
rm custom_components/Jackery/manifest.json.bak
|
sed -i.bak "s/"version": "$CURRENT_VERSION"/"version": "$NEW_VERSION"/" "$MANIFEST_FILE"
|
||||||
git add custom_components/Jackery/manifest.json
|
rm "$MANIFEST_FILE.bak"
|
||||||
|
|
||||||
|
git add "$MANIFEST_FILE"
|
||||||
git commit -m "版本更新至 v$NEW_VERSION"
|
git commit -m "版本更新至 v$NEW_VERSION"
|
||||||
echo "✅ 版本号已更新"
|
echo "✅ 版本号已更新"
|
||||||
fi
|
fi
|
||||||
@@ -62,29 +75,89 @@ echo ""
|
|||||||
echo "📤 推送到 GitHub..."
|
echo "📤 推送到 GitHub..."
|
||||||
git push origin main
|
git push origin main
|
||||||
|
|
||||||
# 创建 tag
|
# 处理 Tag
|
||||||
TAG_NAME="v$NEW_VERSION"
|
TAG_NAME="v$NEW_VERSION"
|
||||||
|
|
||||||
|
# 检查本地 tag 是否存在
|
||||||
|
if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
|
||||||
|
echo "⚠️ Tag $TAG_NAME 本地已存在"
|
||||||
|
read -p "是否删除旧 Tag 并重新创建? (y/n) " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
git tag -d "$TAG_NAME"
|
||||||
|
# 尝试删除远程 tag (如果存在)
|
||||||
|
git push origin :refs/tags/"$TAG_NAME" 2>/dev/null || true
|
||||||
|
echo "🗑️ 旧 Tag 已清除"
|
||||||
|
else
|
||||||
|
echo "❌ 停止发布:Tag 已存在且未选择覆盖"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "🏷️ 创建 Git tag: $TAG_NAME"
|
echo "🏷️ 创建 Git tag: $TAG_NAME"
|
||||||
git tag -a "$TAG_NAME" -m "Release $TAG_NAME"
|
git tag -a "$TAG_NAME" -m "Release $TAG_NAME"
|
||||||
git push origin "$TAG_NAME"
|
git push origin "$TAG_NAME"
|
||||||
|
|
||||||
echo ""
|
echo ""
|
||||||
echo "✅ 准备完成!"
|
echo "✅ 代码和 Tag 推送完成!"
|
||||||
echo ""
|
echo ""
|
||||||
echo "📋 下一步操作:"
|
|
||||||
|
# GitHub Release 自动化
|
||||||
|
RELEASE_CREATED=false
|
||||||
|
|
||||||
|
if command -v gh &> /dev/null; then
|
||||||
|
echo "🤖 检测到 GitHub CLI (gh)"
|
||||||
|
read -p "是否使用 gh 立即创建 GitHub Release? (y/n) " -n 1 -r
|
||||||
|
echo
|
||||||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
||||||
|
|
||||||
|
RELEASE_TITLE="$TAG_NAME"
|
||||||
|
read -p "请输入 Release 标题 (默认: $TAG_NAME): " input_title
|
||||||
|
if [ -n "$input_title" ]; then
|
||||||
|
RELEASE_TITLE="$input_title"
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "您可以选择 Release Notes 来源:"
|
||||||
|
echo "1) 自动生成 (gh --generate-notes)"
|
||||||
|
echo "2) 使用简单的 'Release v...'"
|
||||||
|
echo "3) 取消自动发布"
|
||||||
|
read -p "请选择 (1/2/3, 默认 1): " note_choice
|
||||||
|
note_choice=${note_choice:-1}
|
||||||
|
|
||||||
|
case $note_choice in
|
||||||
|
1)
|
||||||
|
echo "⏳ 正在创建 Release (自动生成日志)..."
|
||||||
|
if gh release create "$TAG_NAME" --title "$RELEASE_TITLE" --generate-notes; then
|
||||||
|
RELEASE_CREATED=true
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
2)
|
||||||
|
echo "⏳ 正在创建 Release..."
|
||||||
|
if gh release create "$TAG_NAME" --title "$RELEASE_TITLE" --notes "Release $TAG_NAME"; then
|
||||||
|
RELEASE_CREATED=true
|
||||||
|
fi
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo "已取消 gh 发布。"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
|
if [ "$RELEASE_CREATED" = true ]; then
|
||||||
|
echo "🎉 GitHub Release 创建成功!"
|
||||||
|
# 尝试获取 release url
|
||||||
|
gh release view "$TAG_NAME" --json url --template '{{.url}}' || echo ""
|
||||||
|
echo ""
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$RELEASE_CREATED" = false ]; then
|
||||||
|
echo "📋 下一步操作 (手动发布):"
|
||||||
echo "1. 访问 GitHub 创建 Release:"
|
echo "1. 访问 GitHub 创建 Release:"
|
||||||
echo " https://github.com/suyulin/jackery/releases/new?tag=$TAG_NAME"
|
echo " https://github.com/suyulin/jackery/releases/new?tag=$TAG_NAME"
|
||||||
echo ""
|
echo ""
|
||||||
echo "2. 或者使用以下命令创建 Release (需要 gh CLI):"
|
echo "2. 如果尚未安装,推荐安装 GitHub CLI (gh) 以便下次自动发布。"
|
||||||
echo " gh release create $TAG_NAME --title \"$TAG_NAME\" --notes \"Release $TAG_NAME\""
|
fi
|
||||||
echo ""
|
|
||||||
echo "3. 用户可以通过以下方式添加到 HACS:"
|
|
||||||
echo " - 在 HACS 中添加自定义存储库"
|
|
||||||
echo " - URL: https://github.com/suyulin/jackery"
|
|
||||||
echo " - 类别: Integration"
|
|
||||||
echo ""
|
|
||||||
echo "4. 查看完整发布指南:"
|
|
||||||
echo " cat HACS_PUBLISHING_GUIDE.md"
|
|
||||||
echo ""
|
|
||||||
|
|
||||||
|
echo "✅ 流程结束"
|
||||||
Reference in New Issue
Block a user