如何将Git注释标签版本同步至build.sbt并结合GitHub Actions发布
同步Git注释标签版本到build.sbt的两种方案
方案一:本地脚本自动更新build.sbt并打标签
适合希望仓库中build.sbt的版本与Git标签保持一致的场景,通过脚本完成版本替换、提交、打标签的全流程:
- 创建一个名为
release.sh的脚本,内容如下:
#!/bin/bash if [ -z "$1" ]; then echo "Usage: $0 <version-number>" exit 1 fi VERSION=$1 # 替换build.sbt中的两个模块版本号 sed -i.bak "s/val module1Version = \"[^\"]*\"/val module1Version = \"$VERSION\"/" build.sbt sed -i.bak "s/val module2Version = \"[^\"]*\"/val module2Version = \"$VERSION\"/" build.sbt rm build.sbt.bak # 提交版本更新 git add build.sbt git commit -m "Bump version to $VERSION" # 创建注释标签并推送 git tag -a v$VERSION -m "Release version $VERSION" git push origin main # 替换成你的主分支名 git push origin --tags
- 给脚本添加执行权限:
chmod +x release.sh
- 执行脚本完成发布:
./release.sh 2.2.2
运行后,build.sbt中的版本会被替换为2.2.2,该修改会被提交,同时创建对应的注释标签并推送到远程仓库。
方案二:GitHub Actions动态注入版本(无需修改仓库文件)
适合不想每次发布都修改并提交build.sbt的场景,通过CI流程从Git标签提取版本,动态覆盖build.sbt中的默认版本:
- 修改build.sbt,让版本支持从系统属性读取:
val defaultVersion = "0.0.1-SNAPSHOT" val module1Version = sys.props.getOrElse("module.version", defaultVersion) val module2Version = sys.props.getOrElse("module.version", defaultVersion)
- 编写GitHub Actions工作流文件(如
.github/workflows/release.yml):
name: 发布构建 on: push: tags: - 'v*' # 仅在推送v开头的标签时触发 jobs: build-and-publish: runs-on: ubuntu-latest steps: - name: 拉取代码 uses: actions/checkout@v4 - name: 从标签提取版本号 run: echo "VERSION=${GITHUB_REF#refs/tags/v}" >> $GITHUB_ENV - name: 配置Scala环境 uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '17' # 替换为你的项目所需Java版本 - name: 构建并发布 run: sbt -Dmodule.version=$VERSION publish
当你推送v2.2.2标签到远程仓库时,GitHub Actions会自动触发构建,提取版本号2.2.2并注入到sbt构建中,此时build.sbt中的模块版本会被替换为标签对应的版本,无需修改仓库中的build.sbt文件。
内容的提问来源于stack exchange,提问作者joesan
相关产品推荐
相关产品推荐

