Changelog¶
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased¶
1.3.1 - 2024-09-17¶
Fixed¶
- Fix incorrect parsing of
?*
and*?
wildcards in thenglob
module.
1.3.0 - 2024-08-27¶
Added¶
- Add support for standard output and error redirection in the script driver.
The dictionary returned by the
info
orcase_info
functions can include"stdout"
and/or"stderr"
items. The values of these two fields are paths to which the standard output and/or error of the run part of the script are redirected. - All API functions that define a step now return a
StepInfo
instance, which may contain useful information (e.g. output paths) to define follow-up steps. This is mainly useful for API extensions that define higher-level functions to create steps, e.g. as in StepUp RepRep. - The classes
NGlobMulti
has a new methodsingle()
andNGlobMatch
has a new propertysingle
. These are only valid when there is a unique match, i.e. when thefiles
method or property has exactly one path.
Changed¶
- Migrate
load_module_file
to stepup-reprep. - Replace watchdog by asyncinotify to avoid a long-standing issue in watchdog.
- :warning: API-breaking :warning:
When a step is defined with a working directory different from
'./'
, relative paths provided in other arguments to thestep()
function are interpreted relative to the given working directory, not the current working directory of the running process. - The directory
.stepup
is no longer created when runningstepup
without aplan.py
. - The files in
.stepup/logs
have been renamed to*.log
files under.stepup
.
Fixed¶
- Fix bug in the translation of relative paths before they are sent to the director process.
- Add trailing slash to
workdir
argument ofstepup.core.api.step()
if it is missing. - Fix mistake in worker log filenames.
- Fix bug in back translation of paths when substituted in a step command.
- Improve compatibility of nglob with Python’s built-in glob.
1.2.8 - 2024-06-28¶
Fixed¶
- Modify the script driver so that
info
andcase_info
may return empty dictionaries.
1.2.7 - 2024-06-24¶
Fixed¶
- Add workaround for Python==3.11 bug with RPC over sockets.
The RPC server (created with
asyncio.start_unix_server
) closes before all requests are handled. A stop event is now included for all RPC handlers to wait with stopping the server until every request is handled. This is a known issue fixed in Python 3.12.1: https://github.com/python/cpython/issues/120866
1.2.6 - 2024-06-13¶
Fixed¶
- Do not watch files when running StepUp non-interactively. This makes non-interactive mode a workaround for a nasty watchdog bug, which crops up when working on larger StepUp projects. See https://github.com/gorakhargosh/watchdog/issues/275
1.2.5 - 2024-06-13¶
Fixed¶
- Effectively make watching recursive when a directory is added that is known in the workflow.
- The function
amend()
now always returnsTrue
when the RPC client is a dummy. This fixes early exits from scripts that usedamend()
when they are called manually. - Prevent the
Cannot watch non-existing directory
error by ensuring that deferred glob matches exist before they are included as static files in the graph. - Check that local scripts have a shebang line before trying to execute them.
- Improved continuous integration setup
- Minor documentation improvements
- Minor code cleanups
1.2.4 - 2024-05-27¶
Changed¶
- Include “hidden” files when globbing.
Fixed¶
- Do not refuse to replay unchanged step that declares its own static inputs.
- Make recursive glob consistent with Python’s built-in glob in
step.core.nglob
. - Pool definitions are stored in workflow and replayed correctly when a step is skipped.
1.2.3 - 2024-05-19¶
Changed¶
- Completed and revised docstrings in
stepup.core.nglob
, and added this module to the reference documentation.
Fixed¶
- Improve hash computation of a symbolic links in
stepup.core.hash
.
1.2.2 - 2024-05-16¶
Changed¶
- Documentation updates.
Fixed¶
- Make
cleanup
command work in project subdirectories whenSTEPUP_ROOT
is set. - Avoid useless wait when running a
plan.py
script outside ofstepup
.
1.2.1 - 2024-05-07¶
Fixed¶
- Fixed packaging mistake that confused PyCharm and Pytest.
1.2.0 - 2024-05-02¶
Added¶
- Export of graphs to Graphviz DOT files.
- The
cleanup
script for manually cleaning up outputs.
Changed¶
- Documentation updates.
- Limit acyclic constraint to the supplier-consumer graph. This means a step can declare a static file and then amend it as input.
- Refactoring of the file
stepup.core.watcher
module:- Replace dependency
watchfiles
bywatchdog
. - Rename functions in
stepup.core.interact
:watch_add
->watch_update
watch_del
->watch_delete
- Separate watcher and runner coroutines with reduced risk for race conditions related to
watch_delete
andwatch_update
to addressTimeoutError
. - Place custom asyncio utilities in
stepup.core.asyncio
. - The watcher also tracks changes to static files while steps are being executed.
- Directories are watched as soon as they are created.
- Replace dependency
- The function
stepup.core.interact.graph
takes a prefix argument instead of a full filename, e.g.graph
instead ofgraph.txt
.
Fixed¶
- More graceful error message when the director process crashes early.
- Fix compatibility with asciinema terminal recording.
- Raise
ConnectionResetError
inSocketSyncRPCClient
instead of blocking forever when the director process crashes.
1.0.0 - 2024-04-25¶
Initial release