You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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等内容,比如添加具体的版本更新日志。
测试方法
  1. 把release.php里的$create_release设为TRUE,提交代码并推送到GitHub。
  2. 打开项目的Actions页面,查看这个工作流是否正常执行。
  3. 执行成功后,去项目的Releases页面,就能看到自动创建的Release,同时release.php里的$create_release会被自动改成FALSE。

这样就完美实现你想要的自动触发功能啦!

内容的提问来源于stack exchange,提问作者fromthestone

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:02:45