-
-
Notifications
You must be signed in to change notification settings - Fork 429
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
feat(CLI): Yarn-like root scripts fallback #1159
feat(CLI): Yarn-like root scripts fallback #1159
Conversation
9f6eb1a
to
070e159
Compare
Codecov Report
@@ Coverage Diff @@
## dev #1159 +/- ##
==========================================
+ Coverage 85.41% 85.46% +0.04%
==========================================
Files 78 78
Lines 6790 6803 +13
Branches 1555 1558 +3
==========================================
+ Hits 5800 5814 +14
+ Misses 659 658 -1
Partials 331 331
Flags with carried forward coverage won't be shown. Click here to find out more.
Continue to review full report at Codecov.
|
4547394
to
45e377e
Compare
I would prefer to restrict it to user scripts only, so |
45e377e
to
57fb07b
Compare
I hesitated on this one. |
1f98450
to
660c2a3
Compare
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.
LGTM, also thanks for your detailed technical explanation.
You're welcome 🙏🏼 |
Yeah, I just don't have the energy to dig it, it seems quite flaky. I doubt it is related to the GitHub Action tools cache. |
* feat(core): Use tomllib on Python 3.11 (#1072) * docs: 📝 Fix typo in `pip install pdm` description (#1061) * Use tomllib on Python 3.11 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * news * use a compatibility module * missed one import Co-authored-by: t106362512 <[email protected]> Co-authored-by: hauntsaninja <> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * feat(core): Replace halo, click, and termcolor with rich (#1091) * feat(core): Use `unearth` as the backend to find and download packages (#1096) * perf(resolver): Speed up the resolution with lazy find_matches (#1098) * Improve the output of installing packages * Use confirm instead of ask * feat(core): New command: pdm publish (#1107) * Use rich handler for logging to stderr * feat(scripts): added composite tasks support (#1117) * feat(core): Add option to skip hooks (#1127) * fix(scripts): allow pdm test command to receive path arguments * feat(hooks): added a `--skip` option to skipp scripts and hooks (#1127) fix #948 * feat(hooks): use PDM_SKIP_HOOKS environement variable as fallback for skip list * feat(core): Support setup.py import (#1137) * Update completion script * fix(resolution): fix a bug that versions with local part can't be found and installed Close #1093 * feat(core): forbid editable depenencies in project table (#1140) * Make the error message more friendly * doc: improve the docs about dependencies * doc: add CLI reference doc * doc: use asciiart as the program description * chore: remove remaining artifacts from #1127 (#1152) * Feature: complete lifecycle signals and documentation (#1147) * feat(hooks): Added pre-publish hook * refactor(hooks): dynamic signal/hooks listing avoiding double declaration * feat(hooks): added (pre|post)_script and (pre|post)_run hooks * doc(hooks): added lifecycle and hooks documentation * review fix * fix(tests): add and use the _echo fixture for cross-plateform and concise test echos * refactor(hooks): automatically register the script handler for all hooks * feat: Update pdm-pep517 to 1.0 (#1153) * fix(scripts): merge the Script and Description field from listing (#1151) * feat: fetch the candidate hashes concurrently (#1154) * feat: fetch the candidate hashes concurrently * add news * Feat/respect-source-order (#1155) * doc: restructure the docs about project metadata and build configuration * parse pep 621 metadata to avoid build (#1156) * feat: Remove the compatible support for pdm legacy metadata (#1157) * fix(config): use platform standard directories for all PDM directories (#1161) Fixes #1150 * fix(#1156): only trust parsing result when all are static * New build configuration table * chore: added a tox.ini file for easier local testing against all Python versions (#1160) * feat(CLI): Yarn-like root scripts fallback (#1159) * feat(hooks): added a post_use hook (#1163) Co-authored-by: Shantanu <[email protected]> Co-authored-by: t106362512 <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Axel H <[email protected]>
I'll take a look if I have time |
Besides, it randomly errors
I don't know why the integration test is so flaky. May need some improvement on the test architecture of integration tests. |
Pull Request Check List
news/
describing what is new.Describe what you have changed in this PR.
This PR allow to execute PDM scripts without the
run
command prefix as long as it doesn't conflict with any builtin command or any plugin-provided command.In case of error, it produces the exact same output, especially in case of shell command not found (ie. instead of having the command not found error from your shell as
run
does, you still have the PDM usage and error).In the process I made the "no parameters provided" behavior the same as any others parsing error: usage (help in in this case) is printed on
stderr
instead ofstdout
here.Note: the
click.testing.CliRunner
have some known issues withstderr
(stderr
is unbuffered butCliRunner
mock it as a buffered one making error message lost in the process) and to be able to test error messages, I had to switch on a simpler home made runner only based on Pytest fixture. Same signature, lessclick
specific in the process but we gain properstderr
handling (as well as the possibility to have the execution output for debug with theRunResult.print()
method. I kept the dependency inpyproject.toml
to avoid locking in this PR and I wasn't sure about side-effects as some tests installclick
and having it as a dependency make sure that it is present in the cache.Note: there has been 3 versions before compatibility with Python 3.7 and Python 3.8 was reached:
argparse
'sexit_on_error
but this was added in Python 3.9argparse
'sexit_on_error
, was working but MyPy disagreedSystemExit
instead ofargparse.ArgumentError
: less fine but tests ensure that we don't silently catch other errors