Skip to content

Commit dd31b5b

Browse files
committed
build: add bump script
1 parent 0a616b4 commit dd31b5b

5 files changed

Lines changed: 61 additions & 2 deletions

File tree

AGENTS.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@
122122
### 必须遵守的
123123

124124
- **提交信息**: 必须使用 Conventional Commits 格式(`feat:` / `fix:` / `perf:` / `remove:` / `deprecate:` / `security:`)。Lefthook commit-msg hook 自动校验格式,不满足会被拒绝。如需跳过用 `git commit --no-verify`。如需在 changelog 中展示详细说明,在 footer 中写入 `CHANGELOG: <description>`。破坏性变更使用 `feat!:``BREAKING CHANGE:` footer
125-
- **CHANGELOG 更新**: 发布前运行 `moon run <project>:changelog` 自动更新 CHANGELOG.md,然后提交并打 tag
125+
- **CHANGELOG 更新**: 发布前运行 `moon run <project>:bump` 自动版本升级、生成 CHANGELOG、commit 并 tag。底层调用 `scripts/bump.sh`,接受 3 参数:`TAG_PREFIX``MANIFEST``INCLUDE_PATHS`。首次发布(无 tag)直接标记当前版本;后续发布通过 `git-cliff --bump` 自动检测版本,commit 使用 `--no-verify` 绕过 lefthook
126126

127127
- Rust: 必须使用 `#[error]` 宏定义错误码(6 位数字),不要手动实现 Error trait
128128
- Rust: 必须使用 `err!` 宏产生 ApiError,不要直接 `Err(ApiError::...)`
@@ -218,6 +218,7 @@ nix develop # 默认完整环境(含 moon、just、mdbook、pkg-co
218218
- 生成 React 组件时,默认配套同名的 `.module.css`(仅限 server-ui 管理后台,使用 Mantine v9;扩展使用 Ant Design v5)
219219
- 启动扩展开发用 `cd apps/extension && pnpm run dev`,加载 `.output/chrome-mv3-dev`
220220
- Rust 路由改动后运行 `cargo check` 验证类型,不用 `cargo run` 全量编译;新增业务逻辑记得同时运行 `cargo test`
221+
- 发布时运行 `moon run <project>:bump`,自动升版本、生成 changelog、commit 并 tag
221222

222223
## 5. 构建与 CI 调试
223224

apps/extension/moon.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,12 @@ tasks:
3838
VERSION=$(grep '"version"' package.json | head -1 | sed -E 's/.*"version":[[:space:]]*"(.*)".*/\1/') && git-cliff --unreleased --tag "$VERSION" --include-path apps/extension/** --config ../../cliff.toml --prepend CHANGELOG.md
3939
options:
4040
runInCI: false
41+
42+
bump:
43+
script: |
44+
bash ../../scripts/bump.sh "@job-hunting/extension" "package.json" "--include-path apps/extension/** --include-path libs/analysis/**"
45+
options:
46+
runInCI: false
4147
zip:
4248
options:
4349
runInCI: false

apps/server/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "job-hunting-server"
3-
version = "0.1.0"
3+
version = "1.0.0"
44
authors.workspace = true
55
edition.workspace = true
66
publish = false

apps/server/moon.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,12 @@ tasks:
88
options:
99
runInCI: false
1010

11+
bump:
12+
script: |
13+
bash ../../scripts/bump.sh "job-hunting-server" "Cargo.toml" "--include-path apps/server/** --include-path apps/server-ui/**"
14+
options:
15+
runInCI: false
16+
1117
format:
1218
command: 'cargo fmt --check'
1319

scripts/bump.sh

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
#!/usr/bin/env bash
2+
set -euo pipefail
3+
set -f
4+
5+
TAG_PREFIX=$1
6+
MANIFEST=$2
7+
INCLUDE_PATHS=$3
8+
9+
COMMIT_SCOPE="$TAG_PREFIX"
10+
TAG_PATTERN="${TAG_PREFIX}@[0-9]+\.[0-9]+\.[0-9]+"
11+
CONFIG="$(git rev-parse --show-toplevel)/cliff.toml"
12+
CURRENT=$(grep -oE '[0-9]+\.[0-9]+\.[0-9]+' "$MANIFEST" | head -1)
13+
14+
LATEST_TAG=$(git tag -l "${TAG_PREFIX}@*" --sort=-version:refname | head -1)
15+
16+
if [ -z "$LATEST_TAG" ]; then
17+
touch CHANGELOG.md && git-cliff --unreleased --tag "$CURRENT" $INCLUDE_PATHS --config "$CONFIG" --prepend CHANGELOG.md
18+
git add "$MANIFEST" CHANGELOG.md && git commit --no-verify -m "bump($COMMIT_SCOPE): $CURRENT"
19+
git tag -m "bump($COMMIT_SCOPE): $CURRENT" "${TAG_PREFIX}@$CURRENT"
20+
echo "✔ First release — tagged ${TAG_PREFIX}@$CURRENT"
21+
echo "---"
22+
awk '/^## /{if(++c>1) exit} 1' CHANGELOG.md
23+
echo "---"
24+
echo " Run: git push origin ${TAG_PREFIX}@$CURRENT"
25+
exit 0
26+
fi
27+
28+
OUTPUT=$(git-cliff --bump --tag-pattern "$TAG_PATTERN" $INCLUDE_PATHS --config "$CONFIG" 2>&1)
29+
echo "$OUTPUT" | grep -q 'There is nothing to bump' && { echo "No unreleased changes."; exit 0; }
30+
31+
NEW=$(echo "$OUTPUT" | grep '^## ' | head -1 | sed 's/^## *//; s/ (.*//; s/.*@//')
32+
33+
case "$MANIFEST" in
34+
*.toml) sed -i "s/version = \"$CURRENT\"/version = \"$NEW\"/" "$MANIFEST" ;;
35+
*.json) sed -i "s/\"version\": \"$CURRENT\"/\"version\": \"$NEW\"/" "$MANIFEST" ;;
36+
esac
37+
38+
touch CHANGELOG.md && git-cliff --unreleased --tag "$NEW" $INCLUDE_PATHS --config "$CONFIG" --prepend CHANGELOG.md
39+
git add "$MANIFEST" CHANGELOG.md && git commit --no-verify -m "bump($COMMIT_SCOPE): $NEW"
40+
git tag -m "bump($COMMIT_SCOPE): $NEW" "${TAG_PREFIX}@$NEW"
41+
42+
echo "✔ Bumped $CURRENT$NEW, tagged ${TAG_PREFIX}@$NEW"
43+
echo "---"
44+
awk '/^## /{if(++c>1) exit} 1' CHANGELOG.md
45+
echo "---"
46+
echo " Run: git push origin ${TAG_PREFIX}@$NEW"

0 commit comments

Comments
 (0)