如何关联psf/black与create-pull-request,仅格式化时触发PR?
解决GitHub Action中Black格式化后仅在文件修改时创建PR的问题
你的问题核心是引用了错误的输出变量,psf/black@stable Action并不提供is_formatted这个输出字段,官方定义的输出是changed——当有文件被Black修改时,该值为true,否则为false。
以下是修正后的完整工作流配置,同时补充了必要的权限和配置项:
name: Auto-Format with Black & Create PR on: push: branches: [ main, develop ] # 按需调整触发分支 pull_request: branches: [ main, develop ] jobs: format-and-pr: runs-on: ubuntu-latest permissions: contents: write # 允许创建分支和提交修改 pull-requests: write # 允许创建PR steps: - name: Checkout repository uses: actions/checkout@v4 with: fetch-depth: 0 # 拉取完整仓库历史,确保PR创建正常 - name: Set up Python environment uses: actions/setup-python@v5 with: python-version: "3.11" # 匹配你的项目Python版本 - name: Run Black formatter id: black uses: psf/black@stable with: src: "./" # 指定要格式化的目录或文件 # 如果只想检查是否需要格式化,可添加 --check --diff;直接修改则去掉这两个参数 options: "--check --diff" - name: Create Pull Request (if files changed) if: steps.black.outputs.changed == 'true' uses: peter-evans/create-pull-request@v3 with: title: "Auto-format: Apply Black code style" body: | This PR automatically applies code formatting using Black. - Files modified: ${{ steps.black.outputs.changed_files }} branch: auto-format/black-updates commit-message: "style: auto-format code with Black"
关键修正点说明:
- 正确引用输出变量:将
steps.action_black.outputs.is_formatted改为steps.black.outputs.changed,同时确保Black步骤的id设置为black(与引用时的steps.black对应)。 - 权限配置:添加
permissions字段,赋予工作流创建分支、提交修改和PR的权限,避免权限不足导致失败。 - 完整仓库拉取:
checkout步骤设置fetch-depth: 0,确保create-pull-request Action能正常创建新分支。 - 可选配置:Black的
options参数如果使用--check --diff,只会检查是否需要格式化而不修改文件;若要直接修改文件,去掉这两个参数即可,此时create-pull-request会自动检测修改并创建PR。
额外注意事项:
- 确保使用的
psf/black@stable是最新稳定版,旧版本可能存在输出变量不一致的情况。 - 如果在拉取请求事件中运行,工作流默认会对PR的分支进行处理,无需额外配置。
内容的提问来源于stack exchange,提问作者Robert Alexander
相关产品推荐
相关产品推荐

