Files
ChatLab/skills/sync-changelog/scripts/commit_release_changelogs.sh
T
2026-04-13 19:47:53 +08:00

48 lines
1.6 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
# 在当前项目提交多语言 changelog,提交信息为 release: v<version>
# 用法:commit_release_changelogs.sh <repo_path>
REPO_PATH="${1:-}"
if [[ -z "$REPO_PATH" ]]; then
echo "错误: 缺少仓库路径参数" >&2
exit 1
fi
CN_FILE="$REPO_PATH/docs/public/changelogs/cn.json"
EN_FILE="$REPO_PATH/docs/public/changelogs/en.json"
TW_FILE="$REPO_PATH/docs/public/changelogs/tw.json"
JA_FILE="$REPO_PATH/docs/public/changelogs/ja.json"
PKG_FILE="$REPO_PATH/package.json"
if [[ ! -f "$CN_FILE" || ! -f "$EN_FILE" || ! -f "$TW_FILE" || ! -f "$JA_FILE" || ! -f "$PKG_FILE" ]]; then
echo "错误: 多语言 changelog 或 package.json 不存在,无法提交" >&2
exit 1
fi
VERSION="$(node -e "const fs=require('fs');const arr=JSON.parse(fs.readFileSync(process.argv[1],'utf8'));process.stdout.write(arr?.[0]?.version||'');" "$CN_FILE")"
if [[ -z "$VERSION" ]]; then
echo "错误: 无法从 $CN_FILE 读取当前版本" >&2
exit 1
fi
# 仅暂存发布必需文件,避免误提交其他改动。
# 注意:package.json 中的版本号需要和 release 提交一起落盘。
git -C "$REPO_PATH" add \
package.json \
docs/public/changelogs/cn.json \
docs/public/changelogs/en.json \
docs/public/changelogs/tw.json \
docs/public/changelogs/ja.json
# 若没有差异则不提交,避免空提交失败。
if git -C "$REPO_PATH" diff --cached --quiet; then
echo "错误: 没有可提交的 changelog 变更" >&2
exit 1
fi
MSG="release: v${VERSION}"
git -C "$REPO_PATH" commit -m "$MSG" >/dev/null
git -C "$REPO_PATH" rev-parse --short HEAD