Skip to content
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

chore(deps): update dependency watchexec to v2 #962

Open
wants to merge 1 commit into
base: master
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Apr 22, 2024

Mend Renovate

This PR contains the following updates:

Package Update Change
watchexec major 1.25.1 -> 2.1.1

Release Notes

watchexec/watchexec (watchexec)

v2.1.1: CLI v2.1.1

  • Regression: -w, --watch was accidentally set to behave as -W (#​828)

v2.1.0: CLI v2.1.0

  • New: -W, --watch-non-recursive for watching paths without also watching subfolders.
  • New: out-of-tree git repositories are now detected (i.e. when .git is a file rather than a folder)
  • Logs are also improved slightly with less nonsense at startup.

v2.0.0: CLI v2.0.0

This is the first breaking release. Most of it is cleaning up a number of deprecated options, and changing some defaults. The idea, however, is to start a new era of Watchexec releases, where breaking changes are allowed more easily (to give an idea of how breaking-change-averse the project has been: this release was planned in January 2022! and ever-delayed since).

Fear not! The cadence of breaking releases will be at most once or twice a year, and whenever possible a deprecation will precede a break by at least three months. Watchexec will remain a stable part of your workflow, while allowing ourselves some evolution.

  • Shell default changes to $SHELL when it is present. (#​210)
    Use --shell=sh to switch back if your $SHELL is something else.
  • Shell default changes to Powershell on Windows when Watchexec detects it is running in Powershell. (#​80)
    Use --shell=cmd to switch back to CMD.EXE, or set the SHELL environment variable.
    A reminder that Windows 7 is not supported, and hasn't been for years.
  • --on-busy-update defaults to do-nothing now (was queue).
    Events received while a command is running won't trigger a run of the command immediately following this one.
  • -W / --watch-when-idle is removed, as it is now the default.
  • The default for --stop-timeout is now 10 seconds.
  • --debounce, --delay-run, --poll, and --stop-timeout now prefer durations with a unit, and warn if given unit-less durations. The default units for these are millisecond for --debounce and --poll, and seconds for --delay-run and --stop-timeout, which is a source of confusion. Unit-less durations will be removed in a future breaking release.
  • --no-shell is removed.
    Use --shell=none instead. The -n short option remains as an alias to --shell=none.
  • -k / --kill is removed.
    Use --signal=KILL instead.
  • --changes-only is removed.
    Use --print-events instead.
  • --emit-events-to defaults to none, and the environment mode is deprecated.
  • --emit-events-to no longer accepts stdin (deprecated alias for stdio) and json-stdin(deprecated alias for json-stdio).
  • --no-ignore is removed.
    Use --no-project-ignore instead.
  • --no-environment is deprecated.
  • --clear=reset will reset the screen on graceful shutdown. (#​797)
  • --no-process-group is deprecated.
  • Watchexec no longer warns (nor does anything else) when it sees the deprecated WATCHEXEC_FILTERER environment variable.

Improvements

  • New: --wrap-process=MODE lets you choose between using process groups, process sessions, or nothing at all. (#​794)
  • New: the WATCHEXEC_TMPDIR environment variable can be used to customize where Watchexec will write temporary files, if for some reason your $TMPDIR is unwritable. (#​814)
  • Fix: watchexec no longer creates a temporary file at startup. (#​814)
  • Fix: the screen is no longer cleared on all events, only when starting a new process. (#​809)

Experimental new feature

As a treat, this release also features an experimental new option: -j or --filter-prog, which lets you write filter programs.

-j, --filter-prog EXPRESSION

Provide your own custom filter programs in jaq (similar to jq) syntax. Programs are given an event in the same format as described in --emit-events-to and must return a boolean. In addition to the jaq stdlib, watchexec adds some custom filter definitions:

  • path | file_meta returns file metadata or null if the file does not exist.
  • path | file_size returns the size of the file at path, or null if it does not exist.
  • path | file_read(bytes) returns a string with the first n bytes of the file at path. If the file is smaller than n bytes, the whole file is returned. There is no filter to read the whole file at once to encourage limiting the amount of data read and processed.
  • string | hash, and path | file_hash return the hash of the string or file at path. No guarantee is made about the algorithm used: treat it as an opaque value.
  • any | kv_store(key), kv_fetch(key), and kv_clear provide a simple key-value store. Data is kept in memory only, there is no persistence. Consistency is not guaranteed.
  • any | printout, any | printerr, and any | log(level) will print or log any given value to stdout, stderr, or the log (levels = error, warn, info, debug, trace), and pass the value through (so [1] | log("debug") | .[] will produce a 1 and log [1]).

All filtering done with such programs, and especially those using kv or filesystem access, is much slower than the other filtering methods. If filtering is too slow, events will back up and stall watchexec. Take care when designing your filters.

If the argument to this option starts with an '@​', the rest of the argument is taken to be the path to a file containing a jaq program.

Jaq programs are run in order, after all other filters, and short-circuit: if a filter (jaq or not) rejects an event, execution stops there, and no other filters are run. Additionally, they stop after outputting the first value, so you'll want to use 'any' or 'all' when iterating, otherwise only the first item will be processed, which can be quite confusing!

Examples:

Regexp ignore filter on paths:

all(.tags[] | select(.kind == "path"); .absolute | test("[.]test[.]js$")) | not

Pass any event that creates a file:

any(.tags[] | select(.kind == "fs"); .simple == "create")

Pass events that touch executable files:

any(.tags[] | select(.kind == "path" && .filetype == "file"); .absolute | metadata | .executable)

Ignore files that start with shebangs:

any(.tags[] | select(.kind == "path" && .filetype == "file"); .absolute | read(2) == "#!") | not

More examples can be found and contributed in the discussion thread


Configuration

📅 Schedule: Branch creation - "before 4am on Monday" (UTC), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR has been generated by Mend Renovate. View repository job log here.

@renovate renovate bot force-pushed the renovate/watchexec-2.x branch from c59cf48 to f78723e Compare May 1, 2024 03:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

0 participants