如何从GitHub PR标题提取版本号更新Android应用versionName?
从PR标题提取版本号并自动更新Android versionName的GitHub Actions方案
核心需求实现步骤
调整流水线触发条件
由于版本号来源于合并到master的PR标题,建议将触发条件改为PR合并事件,确保只有正式发布的PR才会触发部署:on: pull_request: branches: [ master ] types: [ closed ] push: branches: [ master ] # 保留原push触发,兼容直接推送场景从PR标题提取versionName
添加shell步骤,通过正则匹配提取标题中的版本号,并将其存入环境变量供后续步骤使用:- name: Extract versionName from PR title run: | # 匹配"Android App Release Vx.x.x"格式的标题,提取x.x.x部分 VERSION_NAME=$(echo "${{ github.event.pull_request.title }}" | sed -n 's/^Android App Release V\([0-9]\+\.[0-9]\+\.[0-9]\+\)$/\1/p') echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV if: github.event.pull_request.merged == true # 仅当PR合并时执行同时更新versionCode和versionName
修改现有的android-version-actions步骤,加入versionName参数,使用提取到的环境变量更新Gradle配置:- name: Bump version code and name uses: chkfung/android-version-actions@v1.2 with: gradlePath: app/build.gradle.kts versionCode: ${{ github.run_number }} versionName: ${{ env.VERSION_NAME }} if: github.event.pull_request.merged == true || github.event_name == 'push'
完整修改后的流水线配置
name: Android CD Pipeline on: pull_request: branches: [ master ] types: [ closed ] push: branches: [ master ] jobs: build: name: Deploy Android App runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3 - name: Set Up JDK 18 uses: actions/setup-java@v3 with: java-version: '18' distribution: 'temurin' - name: Extract versionName from PR title run: | VERSION_NAME=$(echo "${{ github.event.pull_request.title }}" | sed -n 's/^Android App Release V\([0-9]\+\.[0-9]\+\.[0-9]\+\)$/\1/p') echo "VERSION_NAME=$VERSION_NAME" >> $GITHUB_ENV if: github.event.pull_request.merged == true - name: Bump version code and name uses: chkfung/android-version-actions@v1.2 with: gradlePath: app/build.gradle.kts versionCode: ${{ github.run_number }} versionName: ${{ env.VERSION_NAME }} if: github.event.pull_request.merged == true || github.event_name == 'push'
关键说明
- 正则表达式
^Android App Release V\([0-9]\+\.[0-9]\+\.[0-9]\+\)$严格匹配指定的PR标题格式,确保只提取合法的版本号。 - 通过
$GITHUB_ENV存储版本号,实现步骤间的变量传递。 - 条件判断确保仅在PR合并或直接推送master时执行版本更新,避免无效触发。
内容的提问来源于stack exchange,提问作者Swapnil Musale
相关产品推荐
相关产品推荐

