os
Interact with the OS
Schema
github.com/hofstadter.io/hof/flow/tasks/os
package os
import "strings"
Exec: {
@task(os.Exec)
// the command to run
cmd: string | [string, ...string]
run?: string
if run != _|_ {
cmd: strings.Split(run, " ")
}
// dir specifies the working directory of the command.
// The default is the current working directory.
dir?: string
// env defines the environment variables to use for this system.
// If the value is a list, the entries mus be of the form key=value,
// where the last value takes precedence in the case of multiple
// occurrences of the same key.
env?: {[string]: string} | [...=~"="]
// stdout captures the output from stdout if it is of type bytes or string.
// The default value of null indicates it is redirected to the stdout of the
// current process.
stdout?: null | bool | string | bytes
// stderr is like stdout, but for errors.
stderr?: null | bool | string | bytes
// stdin specifies the input for the process. If stdin is bool (true or false), the stdin
// of the current process is redirected to this command (the default).
// If it is of typ bytes or string, that input will be used instead.
stdin?: *null | bool | string | bytes
// success is set to true when the process terminates with with a zero exit
// code or false otherwise. The user can explicitly specify the value
// force a fatal error if the desired success code is not reached.
success: bool
// the exit code of the command
exitcode: int
// error from cmd.Run()
error: string
// exit flow when task fails
exitonerr: bool | *true
}
// Get a filelock
FileLock: {
@task(os.FileLock)
// lockfile name
filename: string
// read-write (true for read-write, false for read-only)
rw: bool | *false
// time.Duration for retries, zero means off
retry: string | *"0"
}
// release a filelock
FileUnlock: {
@task(os.FileUnlock)
// lockfile name
filename: string
}
// A Value are all possible values allowed in flags.
// A null value unsets an environment variable.
Value: bool | number | *string | null
// Name indicates a valid flag name.
Name: !="" & !~"^[$]"
// Getenv gets and parses the specific command line variables.
Getenv: {
@task(os.Getenv)
// if empty, get all
{[Name]: Value}
}
Glob: {
@task(os.Glob)
// glob patterns to match
globs: [...string]
// filepaths found matching any of the globs
filepaths: [...string]
}
// acts like 'mkdir -p'
Mkdir: {
@task(os.Mkdir)
dir: string
}
ReadFile: {
@task(os.ReadFile)
// filename to read
filename: string
// filled by flow
contents: *string | bytes
}
Sleep: {
@task(os.Sleep)
// time.Duration to sleep for
duration: string
}
// read from stdin
Stdin: {
@task(os.Stdout)
// optional message to user before reading input
prompt?: string
// user input
contents: string
}
// print to stdout
Stdout: {
@task(os.Stdout)
// text to write
text: string
}
Watch: {
@task(os.Watch)
// glob patterns to watch for events
globs: [...string]
// todo, only handles write events
// should add event to handler before calling
// a flow handler to run on each event
handler: {...}
// (good first issue)
// debounce?: string // time.Duration
}
WriteFile: {
@task(os.WriteFile)
filename: string
contents: string | bytes
mode: int | *0o644
}