Configurable filesystem observer and script runner.
NEW uses Facebook Watchman 🔥if available 🚀
- Listens to changes to the filesystem and runs scripts based on events defined in
Robo
-file - Multiple files and directory trees can be followed
- Ignore pattern
!something
- Events can be delayed using
debounce
- Configuration changes are loaded dynamically
- You can have comments like
; here is explanation what this should do
You can use it to create local build pipelines, automatic test runs etc.
First install the command line utility rwatch
npm install -g robowatch
Then create a file Robo
with watch instructions, following the chokidar format.
watch src/**.ts {
shell {
debounce 3 "waiting 3 seconds"
"cd src && tsc"
}
}
; here is a comment
watch somefile {
}
Pure Shell commands are quoted like 'echo "Hello World"'
Each quoted command is run as separate exec under selected shell.
watch somefile {
shell {
; single quotes
'ls -al'
; double quotes
"ls -al"
; back-trick
`cd dir;
echo $(dirname "$FILE");
echo $FILE;
`
}
}
The shell command can have use "/bin/bash"
to select the running shell
watch (
!./**/node_modules/**
./**/package.json
) {
shell use "/bin/bash" {
; display which shell we are using
'echo $0'
}
}
Debounce will some seconds before starting. If new events arrive the startup is delayed N seconds more.
debounce 3 "waiting 3 seconds"
Example
watch *.css {
shell use "/bin/bash" {
debounce 5 "waiting before "
Show the changed filename
watch src/**.ts {
shell {
`
echo $(dirname "$FILE");
echo $FILE;
`
}
}
Multiple files can be observer
watch (
file1
file2
robowatch/src/**/*.ts
) {
}
Do not follow changes in node_modules
watch (
./**.ts
!./**/node_modules/**
) {
}
Example uses MacOS osascript
to display messages to user
watch (
!./**/node_modules/**
./**/package.json
) {
shell use "/bin/bash" {
debounce 5 "auditing package.json"
`
DIR=$(dirname "$FILE");
echo $DIR;
cd $DIR;
RVOF=$(npm audit);
retVal=$?
if [ $retVal -ne 0 ]; then
MSG='say "You loser! npm audit for ';
MSG+="$FILE";
MSG+=' failed"';
echo "$MSG" | osascript;
else
MSG='display notification "✅ npm audit for ';
MSG+="$FILE";
MSG+=' was success!"';
echo "$MSG" | osascript;
fi;
`
}
}