如何通过GitHub Action获取项目最新Release并生成下一版本号?
自动获取并递增GitHub Release版本号的实现方案
方法一:通过Shell脚本手动处理版本号
直接调用GitHub API获取仓库的最新Release标签,解析后递增补丁版本号,再传递给发布步骤:
修改后的完整GitHub Action配置如下:
on: push: name: Build jobs: build-android: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v3 with: fetch-depth: 0 # 确保能获取所有标签数据 - name: 获取并递增最新版本号 id: bump_version run: | # 获取最新的Release标签,无Release则默认v0.0.0 LATEST_TAG=$(curl -s https://api.github.com/repos/${{ github.repository }}/releases/latest | jq -r '.tag_name // "v0.0.0"') echo "当前最新版本: $LATEST_TAG" # 拆分语义化版本号为三个部分 IFS='.' read -r MAJOR MINOR PATCH <<< "${LATEST_TAG#v}" # 递增补丁号 NEW_PATCH=$((PATCH + 1)) NEW_TAG="v$MAJOR.$MINOR.$NEW_PATCH" echo "新版本号: $NEW_TAG" echo "tag=$NEW_TAG" >> $GITHUB_OUTPUT - name: Install npm dependencies run: npm install - name: Build Android Release run: cd android && ./gradlew assembleRelease - name: Upload Artifact uses: actions/upload-artifact@v3 with: name: app-release.apk path: android/app/build/outputs/apk/release/ - name: Create Github Release uses: ncipollo/release-action@v1 with: artifacts: "android/app/build/outputs/apk/release/app-release.apk" tag: ${{ steps.bump_version.outputs.tag }} replacesArtifacts: false token: ${{ secrets.GITHUB_TOKEN }} allowUpdates: true
关键说明:
fetch-depth: 0:确保checkout时拉取完整仓库历史,避免本地无标签的情况- 结合
jq工具解析GitHub API返回的最新标签,兼容仓库无Release的初始状态 - 如需递增主版本或次版本,修改
MAJOR或MINOR的递增逻辑即可
方法二:使用现成的GitHub Action简化流程
利用专门处理版本号的Action自动完成获取最新标签、递增版本的操作,代码更简洁:
on: push: name: Build jobs: build-android: runs-on: ubuntu-latest permissions: contents: write steps: - uses: actions/checkout@v3 with: fetch-depth: 0 - name: 获取最新语义化版本标签 id: get_latest_tag uses: actions-ecosystem/action-get-latest-tag@v1 with: semver_only: true # 仅识别符合语义化规范的标签 default_tag: v0.0.0 # 无Release时的默认版本 - name: 递增补丁版本号 id: bump_version uses: actions-ecosystem/action-bump-version@v1 with: current_version: ${{ steps.get_latest_tag.outputs.tag }} version_bump: patch # 可选值:major/minor/patch,按需切换 - name: Install npm dependencies run: npm install - name: Build Android Release run: cd android && ./gradlew assembleRelease - name: Upload Artifact uses: actions/upload-artifact@v3 with: name: app-release.apk path: android/app/build/outputs/apk/release/ - name: Create Github Release uses: ncipollo/release-action@v1 with: artifacts: "android/app/build/outputs/apk/release/app-release.apk" tag: ${{ steps.bump_version.outputs.new_version }} replacesArtifacts: false token: ${{ secrets.GITHUB_TOKEN }} allowUpdates: true
关键说明:
actions-ecosystem/action-get-latest-tag:自动筛选仓库中最新的合规语义化版本标签actions-ecosystem/action-bump-version:根据指定类型自动递增版本号,无需手动拆分解析版本
内容的提问来源于stack exchange,提问作者Paul
相关产品推荐
相关产品推荐

