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

如何关联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"

关键修正点说明:

  1. 正确引用输出变量:将steps.action_black.outputs.is_formatted改为steps.black.outputs.changed,同时确保Black步骤的id设置为black(与引用时的steps.black对应)。
  2. 权限配置:添加permissions字段,赋予工作流创建分支、提交修改和PR的权限,避免权限不足导致失败。
  3. 完整仓库拉取:checkout步骤设置fetch-depth: 0,确保create-pull-request Action能正常创建新分支。
  4. 可选配置:Black的options参数如果使用--check --diff,只会检查是否需要格式化而不修改文件;若要直接修改文件,去掉这两个参数即可,此时create-pull-request会自动检测修改并创建PR。

额外注意事项:

  • 确保使用的psf/black@stable是最新稳定版,旧版本可能存在输出变量不一致的情况。
  • 如果在拉取请求事件中运行,工作流默认会对PR的分支进行处理,无需额外配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:05:25