Git推送至GitHub时,如何依据PHP文件变量自动创建Release?
当然可行!用GitHub Actions就能完美实现这个自动触发的需求,我给你一步步拆解具体怎么做:
实现思路
核心是利用GitHub Actions在代码推送时自动执行脚本,检查release.php里的$create_release变量值,若为TRUE则创建Release,甚至可以自动把该变量改回FALSE避免重复触发。
具体步骤
1. 创建GitHub Actions工作流文件
在你的项目根目录下新建.github/workflows文件夹(如果没有的话),然后在里面创建一个名为auto-release.yml的文件。
2. 编写工作流配置
把下面的代码复制进去,关键部分我会逐一说明:
name: Auto Create Release on: push: branches: [ main ] # 改成你要监听的分支,比如master permissions: contents: write # 赋予修改代码和创建Release的必要权限 jobs: check-and-release: runs-on: ubuntu-latest steps: - name: 检出代码 uses: actions/checkout@v4 with: fetch-depth: 0 # 确保能获取完整的提交历史 - name: 提取版本信息和开关状态 id: extract_info run: | # 从release.php中提取版本号 RELEASE_VERSION=$(grep -oP '\$release = '\''\K[^'\']+' release.php) # 提取发布日期 RELEASE_DATE=$(grep -oP '\$release_date = '\''\K[^'\']+' release.php) # 提取create_release的布尔值 CREATE_RELEASE=$(grep -oP '\$create_release = \K[^;]+' release.php | xargs) # 将提取到的值设置为步骤输出,供后续步骤调用 echo "version=$RELEASE_VERSION" >> $GITHUB_OUTPUT echo "date=$RELEASE_DATE" >> $GITHUB_OUTPUT echo "create=$CREATE_RELEASE" >> $GITHUB_OUTPUT - name: 创建GitHub Release if: steps.extract_info.outputs.create == 'TRUE' uses: actions/create-release@v1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: tag_name: v${{ steps.extract_info.outputs.version }} # 标签名格式如v1.0.4 release_name: Release ${{ steps.extract_info.outputs.version }} (${{ steps.extract_info.outputs.date }}) body: | 自动创建的版本发布 版本号: ${{ steps.extract_info.outputs.version }} 发布日期: ${{ steps.extract_info.outputs.date }} draft: false # 是否设为草稿版本 prerelease: false # 是否设为预发布版本 - name: 关闭自动创建开关(可选) if: steps.extract_info.outputs.create == 'TRUE' run: | # 将$create_release从TRUE改为FALSE sed -i 's/\$create_release = TRUE;/\$create_release = FALSE;/' release.php # 配置Git提交身份 git config --global user.name "GitHub Actions" git config --global user.email "actions@github.com" # 提交修改并推送,添加[skip ci]避免触发新一轮工作流 git add release.php git commit -m "Turn off create_release after auto release [skip ci]" git push
3. 关键细节说明
- 触发条件:我这里设置的是推送到
main分支时触发,你可以根据自己的主分支名称(比如master)修改。 - 权限设置:
permissions: contents: write是必须的,因为我们需要修改代码并推送,同时创建Release也依赖这个权限。 - 变量提取:用
grep的正则匹配精准提取PHP文件里的变量值,确保能正确拿到版本号、发布日期和开关状态。 - 避免无限循环:在关闭开关的提交信息里加了
[skip ci],这样GitHub Actions就不会再次触发工作流,防止死循环。 - Release自定义:你可以根据需求修改
release_name、body等内容,比如添加具体的版本更新日志。
测试方法
- 把
release.php里的$create_release设为TRUE,提交代码并推送到GitHub。 - 打开项目的Actions页面,查看这个工作流是否正常执行。
- 执行成功后,去项目的Releases页面,就能看到自动创建的Release,同时
release.php里的$create_release会被自动改成FALSE。
这样就完美实现你想要的自动触发功能啦!
内容的提问来源于stack exchange,提问作者fromthestone
相关产品推荐
相关产品推荐

