Error in github actions when using `use_pyproject: true`
Describe the bug
black in github actions failed when we set use_pyproject: true
this way is discribed in here
To Reproduce
my .github/workflows/black.yml was like bellow.
name: Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: psf/black@stable
with:
options: "--check --verbose"
src: "."
jupyter: false
use_pyproject: true
and pyproject.toml was like bellow, so black is latest version.
[tool.poetry.group.dev.dependencies]
pytest = "^8.2.0"
notebook = "^7.2.0"
black = "^24.4.2"
The resulting error is lie this.
The yml description should be as documented, am I missing something?
when I give up to use use_pyproject: true and use version: "~= 24.4.2", no error occurred.
name: Lint
on: [push, pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: psf/black@stable
with:
options: "--check --verbose"
src: "."
jupyter: false
version: "~= 24.4.2" # same as the version in pyproject.toml
Environment
- Black's version: 24.4.2
- OS and Python version:
Additional context
I ran into the same issue, but I think it's not actually a bug as the action is operating as documented, though it is a bit of a gotcha when using this with Poetry.
The docs say: "To read the version from the pyproject.toml file instead, set use_pyproject to true. This will first look into the tool.black.required-version field, then the project.dependencies array and finally the project.optional-dependencies table."
The first suggestion is a Black-specific location, and then the other 2 are standard pyproject.toml locations as described in https://peps.python.org/pep-0621/. The issue is Poetry does not follow PEP 621 (yet - see https://github.com/python-poetry/roadmap/issues/3), and so it stores its dependencies in different locations - tool.poetry.dependencies and similar, and so the Black action cannot use the Poetry-specified version without redundancy.
If you add
[tool.black]
required-version = "24.4.2"
to your pyproject.toml file instead then use_pyproject will work as described.
Longer term the solution might be to note this gotcha in the docs, for Black to pick up on the Poetry syntax as well, and/or to just wait for Poetry to follow PEP 621.
Thanks @bobwhitelock!
I don't think Black should attempt to parse the Poetry-specific section in pyproject.toml. However, I would support adding a note in the docs to address this issue.
Since this issue is still open, I wanted to add more information and the solution I found.
GitHub Action Failures
Following the documentation for the stable branch of Black GitHub Actions integrations, the GitHub action I had authored continued to fail displaying Error: 'with.use_pyproject' input requires Python 3.11 or later..
Below are the workflow and pyproject files used:
# workflow.yml
name: Pull Request Workflow
on:
pull_request:
jobs:
check-code-style:
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4
- name: Check Formatting
uses: psf/black@stable
with:
options: "--check"
src: "."
use_pyproject: true
# pyproject.toml
[tool.black]
target-version = ["py313"] # projects python version
required-version = "24.8.0" # required version of black to run
Solution
The documentation for the latest includes a step for setting up the python environment. By including the following to workflow.yml the pipeline was successful.
- name: Setup Python
uses: actions/setup-python@v5
with:
python-version: "3.13"