只有 运行 黑色更改文件

Only run black on changed files

我正在使用 official black GitHub 操作。目前,每当我推送更改时,整个存储库上的 black 运行s。但是,我只希望它在更改的文件上 运行 。我试过使用一些 GitHub 环境变量,但无济于事。这是我的工作流程 yaml:

name: Lint

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - run : echo ${{ github.sha }} # this outputs a SHA
      - run : echo ${{ github.run_attempt }} # this outputs an int
      - run: echo ${{ github.head_ref }} # outputs nothing
      - run: echo ${{ github.base_ref }} # outputs nothing
      - uses: actions/setup-python@v3
        with:
          python-version: '3.9.12'
        name: Run black on diffed files
      - run: echo ${{ github.head_ref }} # outputs nothing
      - run: echo ${{ github.base_ref }} # outputs nothing
      - run: pip install black && black $(git diff --name-only ${{ github.base_ref}} ${{ github.head_ref }} | grep .py)

工作流成功安装并 运行s black,但失败,因为没有文件被传递给 black 命令。

我不确定我做错了什么。

找到适合我的解决方案,该解决方案还考虑了@jonrsharpe 的建议(请参阅他对原始问题的评论)。

利用另一个 GitHub 操作获取所有更改的文件。然后,我 运行 blackreorder-python-imports 仅在更改的文件上。这样,用户就知道 他们的 文件中有哪些有问题。但是,出于 CI 原因(感谢 Jon!),我随后还 运行 使用 Black 的官方 GHA 在完整代码库上使用 black。

注意:目前,以下 GHA 在 pull-requests 上按预期运行。但是,如果您推送多个提交,它只会 运行 对组中的最后一次提交执行操作。我正在尝试弄清楚如何在所有推送的提交上实现它 运行,而不仅仅是最后一个提交。

name: Black (python)

on: [push, pull_request]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout branch
        uses: actions/checkout@v2
        with:
          fetch-depth: 0

      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v19

      - name: Setup Python env
        uses: actions/setup-python@v2

      - name: Install black and reorder-python-imports
        run: pip install black reorder-python-imports

      - name: Black and Sort changed files
        run: |
          for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
            echo $file
            if [[ $file == *.py ]]; then
              black $file --check
              reorder-python-imports $file
            fi
          done

      - name: Run black on full codebase
        uses: psf/black@stable