-
Notifications
You must be signed in to change notification settings - Fork 100
Fix deprecated license syntax #549
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #549 +/- ##
=========================================
Coverage 100.00% 100.00%
=========================================
Files 34 34
Lines 2111 2111
=========================================
Hits 2111 2111 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
e801cba to
448f46f
Compare
niksirbi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks @sfmig for taking the initiative to tackle this.
On your questions:
- It feels a bit odd that we set different lower bounds for the setuptools version used in building and in checking the manifest file... Any thoughts about this?
I am worried about this to be honest, it might cause weird mismatches between local hooks and CI, which will be hard to debug.
- What is the reasoning behind running check-manifest in the precommits with no-build-isolation? From the check manifest repo, this option was introduced "so that check-manifest can succeed building pep517-based distributions without an internet connection". But: "With --no-build-isolation, you must preinstall the build-system.requires beforehand."
I had totally forgotten the reason, but luckily git never forgets.
This was added to the cookiecutter by @lauraporta in this PR, approved by me.
However, I now think we should re-examine and check whether it's truly necessary.
My preference would be to remove the --no-build-isolation arg, which means we will no longer need additional_dependencies. This way we keep a single source of truth — the [build-system].requires in pyproject.toml. The added benefit is that each manifest check will happen in a fresh env, making sure we're not relying on package versions that happened to be locally present. However, I'm not 100% sure if I'm correctly understanding the docs on this.
- Should
build-system.requiresand the additional dependencies forcheck-manifestmatch?
I'd say yes, if we follow my proposal above, and it works, we will only have the former (yay for DRY).
- If we agree to implement this, should we add it to other NIU repos and/or the cookiecutter?
I would be in favour of that, unless we can't do that because of reasons mentioned here.
|
Beware that we might have a problem with |
448f46f to
69583ea
Compare
|
|
Hey @sfmig, I faintly remember the bug related to From
So no need of additional pre-installations. |
niksirbi
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I did a deeper dive into your questions @sfmig, and this is my current take (updated from my previous views):
It feels a bit odd that we set different lower bounds for the setuptools version used in building and in checking the manifest file... Any thoughts about this?
It is technically "fine" for these to differ, it just means that the pre-commit environment is stricter than our declared build system. However, I don't like it for maintainability reasons. More importantly, as we're now switching to the new licence syntax in pyproject.toml, which requires setuptools>=77, I'm not even sure if our package can be built with older versions. I recommend setting the lower bounds to 77 everywhere.
What is the reasoning behind running
check-manifestin the precommits withno-build-isolation? From the check manifest repo, this option was introduced "so that check-manifest can succeed building pep517-based distributions without an internet connection". But: "With--no-build-isolation, you must preinstall thebuild-system.requiresbeforehand."
This is my understanding of the trade-offs posed by using no-build-isolation:
Usually, check-manifest calls python -m build. By default, build creates a fresh, temporary virtual environment and installs everything in build-system.requires from the internet. Creating that environment every time you run a pre-commit hook may be slow, and it may fail completely if we lose internet (e.g. whilst coding on a train/plane).
By using --no-build-isolation we gain speed and robustness to network losses, but lose the 'purity' of the check. If we forget to add a dependency to additional_dependencies, the check might fail or give a false positive because the environment isn't a perfect replica. So with --no-build-isolation, we accept the responsibility to keep the hook's additional_dependencies aligned with build-system.requires. I think that is a price worth paying, especially given that this setup has been working for us so far.
Should
build-system.requiresand the additional dependencies forcheck-manifestmatch?
My understanding is that they don't have to match exactly, but they should be compatible.
check-manifest --no-build-isolation needs a build environment that can successfully build our sdist/wheel, so its additional_dependencies should still satisfy build-system.requires.
To be extra sure of the compatibility, we should also constrain setuptools_scm[toml]>=6.2 in pre-commit.
If we agree to implement this, should we add it to other NIU repos and/or the cookiecutter?
Yes, this setup is not unique to movement. Whatever the outcome, it should apply to all of our repositories.
My recommendations
- Set
setuptools>=77in bothbuild-system.requiresandpre-commit-config.yaml. This seems to me as the most future-proof option. - Keep using
--no-build-isolationbut constrainsetuptools_scm[toml]>=6.2in the pre-commit config to matchpyproject.toml. - Propagate these changes to the cookiecutter.
Note
This PR will have to be rebased to main as it is severely out-of-sync.
69583ea to
d23b206
Compare
|
I've just rebased this PR to |
d23b206 to
34aa52d
Compare
|



Description
What is this PR
Why is this PR needed?
In CI we are getting two warnings re the syntax used to specify the license in
pyproject.toml:The first one says:
This follows PEP 639 and is also explained in the Python packing guide.
The second one says:
This is also explained in the same PEP and in the packaging guide here.
What does this PR do?
In pyproject.toml:
license-filesfieldIn the pre-commit config file
check-manifest --no-build-isolation. The lower-bound forsetuptoolsneeds to be set to 77, since that is the version when the new license syntax is supported (see here).Question
check-manifestin the precommits withno-build-isolation? From the check manifest repo, this option was introduced "so that check-manifest can succeed building pep517-based distributions without an internet connection". But: "With--no-build-isolation, you must preinstall thebuild-system.requiresbeforehand."
build-system.requiresand the additional dependencies forcheck-manifestmatch?References
\
How has this PR been tested?
pre-commitspasscheck-manifest --no-build-isolationthrows no warnings locallyIs this a breaking change?
\
Does this PR require an update to the documentation?
\
Checklist: