This release brings compatility with older versions of filelock when installing dev-cmd with the
old-pythons extra.
This release switches from a bespoke lock embedding in dev-cmd distributuons to use of the
pex.build_backend.wrap delegating backend to embed the dev-cmd lock.
This release fixes the dev-cmd wheel RECORD metadata to be Windows compatible.
This release fixes the dev-cmd wheel RECORD metadata to include the embedded pylock.toml lock.
Drop support for Python 3.8 and officially add support for Python PI.
Also add a pylock.toml to the dev-cmd sdist and wheel to support a Pex
experiment adding support for pex3 run against locked entry points (See:
https://discuss.python.org/t/pre-pep-add-ability-to-install-a-package-with-reproducible-dependencies).
Fix venv creation to detect corrupted venvs (via system Python upgrades or un-installs).
Fix venv creation to handle #!/bin/sh re-director script re-writes. These are Python scripts with
#!/bin/sh re-director headers that work around shebang-length limitations.
Fix venv creation to use the newest Pip possible given the target python.
Add support for a {--hashseed} placeholder that is substituted with the value passed to dev-cmd
via --hashseed or else a random value suitable for use in PYTHONHASHSEED.
Fix --py / --python venv creation on Windows.
Fix command accepts-extra-args handling. If multiple different commands that accept extra args are
run together, only error if extra args are actually passed; otherwise, allow the invocation to
proceed.
Fix a bug when using command dependency groups that would always also build the default venv even when just a command with a custom dependency group was being run.
Add support for varying --python venvs based on the command being run under the requested
--python. This is done by specifying the dependency-group the command needs and then
parametrizing the [[tool.dev-cmd.python]] 3rdparty-export-command with the "{dependency-group}"
placeholder as appropriate.
This release also improves command parameterization with several new features:
- Add support for command arguments that are discarded is they evaluate to the empty string after
processing parameter substitutions. These args just need to be wrapped in
{discard_empty = "..."}single-item objects. - Add special support for
-pyfactors in commandpython. To indicate a PyPy implementation instead of CPython, you can just passpyfor the factor value; so-pypyMaps to PyPy of any version,-pypy3maps to a PyPy with major version 3, and-pypy310or-pypy3.10maps to a PyPy with version 3.10. - Add support for flag factors in the form
{-name?flag_value:default_value}that allow the presence of-namein a command name to passflag_valueand the absence to passdefault_value.
Add support for - in factor values by escaping with a leading -; i.e. to pass the value of
bar-baz for factor foo of command test you can now say: test-foo:bar--baz (or
test-foobar--baz).
Also fix an issue with pyproject.toml discovery when dev-cmd is installed in another repo in
editable mode.
Finally, fix over-eager command deactivation in some cases where commands had multiple
implementations selected amongst via when markers.
As long as there is at least one command left to execute, tasks and any groups they contain now
support having individual commands deactivated by when environment markers. This allows running
tasks under multiple different Pythons and just running a subset of commands instead of failing when
not all commands are available to execute under the selected Python.
The command python value can now be parametrized allowing for tox-style ad-hoc Python specification.
The --py / --python and command "python" now all accet version number abbreviations without the
dot. For example, to specify Python 3.8 you can now say any of --py python3.8, --py 3.8 or
--py 38.
This release adds support for --python and command "python" abbreviations. In addition to
specifying --python /usr/bin/python3.12 and --python python3.12 you can now just say
--python 3.12 and this will be expanded to --python python3.12. For maximum brevity, you can
say --py 3.12.
Also, creating --python venvs previously would error out in some scenarios previously when
re-writing venv script shebangs. This is now fixed.
Finally, using factors now mixes cleanly with commands that have aliases. Specifying a factor for the alias now plumbs through to the underlying command correctly.
This release adds support for setting a custom python per-command. This python works just like
the global --python option, but scoped to an individual command and trumping all other
configuration. If a command says it needs python = "python3.9" then it will always run under
python3.9.
Also, the error output is improved when the requested --python can't be found and console script
shebangs in --python venvs are fixed to point to the correct interpreter allowing direct use.
Fix [[tool.dev-cmd.python]] extra-requirements handling of string values (requirements.txt style
value).
Fix [[tool.dev-cmd.python]] pyproject-cache-keys inheritance handling.
Fix regression in when handling for 1st defined [[tool.dev-cmd.python]].
This release re-works --python venv setup customization with breaking TOML schema changes. Please
review https://github.com/jsirois/dev-cmd/blob/main/README.md#custom-pythons to learn about the new
features and TOML structure changes under the [toolAlso provid.dev-cmd] python key.
Add support for per---python venv setup customization. This allows for vagaries in older Pythons
and the Pips that support them.
Also provide finer-grained venv caching control with the new
[tool.dev-cmd.python.requirements] input-keys for selecting just a subset of pyproject.toml's
values to form the cache key.
Fix when environment marker evaluation to take place in the requested Python's environment when a
custom --python is specified.
Add support for --python PYTHON to have dev-cmd establish a custom python venv to run commands
in. This option is only present if you install dev-cmd with the old-pythons extra; e.g. a
requirement string like "dev-cmd[old-pythons]". As the extra name suggests, this will allow you to
run development commands against Pythons older than those supported by the underlying development
tool you use to run dev-cmd.
This release also fixes a regression in --color output handling.
Fix command timing regression that reported ~0s for serially executed commands.
Fix redundant step prefixes for bare commands.
Fix up parallel step indication and timing rollups.
Add support for task timing rollups and fix a bug in accepts-extra-args handling when there are
multiple accepts-extra-args commands in a run, but they all resolve to the same command.
Fix times reported via -t / --timings to have a consistent format with the overall run time.
Add support for emitting detailed timings with -t / --timings.
Fix rendering of command output to be resilient to bytes that can't be decoded into the console character encoding.
Fix late detection of configuration errors in the run phase from bubbling up uncaught.
Add support for when marker expressions to commands and tasks to allow defining
platform-specific commands and tasks. Also add support for an explicit name for commands and
tasks to allow defining one version of a command or task for one platform and others for other
platforms.
Fix extra args support to pass all args after the 1st occurrence of -- in the arg list.
Previously, only args after the last occurrence were captured.
Denote the default command or task in -l / --list output with a leading asterisk.
Fix missing help output for come commands and fix --color help.
Note when commands and tasks can accept extra args in -l / --list output.
Add support for hiding commands and tasks from -l / --list output.
Add support for documenting commands and tasks and listing them with their documentation via
-l / --list.
Support an optional leading : in factor argument values to parallel factor parameter default
syntax and better visually separate factor values from factor names.
This change adds support for command parametrization via environment variables, Python interpreter marker environment values and factors similar to those found in tox configuration.
Improve error message when the project root cannot be discovered.
Fix commands with an argv0 of "python" on Windows and add support for argv0 being a Python script.
Fix -p / --parallel handling of tasks - no longer flatten them.
Gracefully handle keyboard interrupt and kill in-flight processes with logging.
Fix missing typing-extensions dependency and update README.
Fix -s / --skip interaction with extra args support.
Add support for skipping task steps with -s / --skip.
Fix dev-cmd handling of execution errors. Previously an uncaught exception assigning
__traceback__ could be observed in certain situations.
Fix dev-cmd for interactive commands that read from stdin.
Fix sdist release to include tests and uv.lock.
Add support for Python 3.8.
Also improve color support for Windows.
Add -q / --quiet to quiet dev-cmd output to just the output of the commands it runs.
Also fix the dev-cmd exit code to reflect the exit code of a failing command when there is
exactly one failing command.
Finally, fix dev-cmd color setting propagation to subprocesses in certain situations where
NO_COLOR or FORCE_COLOR are present in the environment.
Add knobs to control when and how dev-cmd exits an invocation that has command failures:
[tool.dev-cmd] exit-styleand-k/--keep-goingor-X/--exit-styleallow configuring how quickly thedev-cmdinvocation exits after a command failure. By default, it exits after the step containing the 1st command failure completes, but an immediate end or continuation through all steps can be requested.[tool.dev-cmd] grace-periodand--grace-periodallow configuring how in-flight commands are terminated when exiting an invocation with command errors.
Emit a trailing message indicating overall run status and timing.
Fix inadvertent -p / --parallel output interleaving.
Add support for --color choice and respect ambient color setting when there is not --color
choice.
Add support for -p / --parallel to request all top-level commands and tasks requested on the
command line be run in parallel.
Also, re-work task parallelization to be more robust and general. Now sub-lists in a task definition are either run in parallel or serial depending on their nesting depth, which can be arbitrarily deep. The 1st level, the task list itself, is run in serial to seed the alternation.
Several parallelization fixes:
- Restore color support.
- Restore
accepts-extra-argssupport. - Complete parallel tasks incrementally.
Breaking pre-1.0 changes:
[tool.dev-cmd.aliases]is now named[tool.dev-cmd.tasks].- The default task or command is now specified with the
defaultkey in the `[tool.dev-cmd] table. The key is just the name for the task or command that should be default.
Fix regression in cwd and env support for commands.
Add support for parallelizing execution of commands in a task.
Fix project root dir detection.
Guarantee commands are run in the root project dir or else the custom
cwd project sub-dir defined for the command.
Update project metadata.
Initial release.