只有 运行 黑色更改文件
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 操作获取所有更改的文件。然后,我 运行 black
和 reorder-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
我正在使用 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 操作获取所有更改的文件。然后,我 运行 black
和 reorder-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