Documentation
¶
Index ¶
- Constants
- Variables
- type AppChannel
- type AppEnvironment
- type Command
- func (c *Command[Pipe]) AddSelfToTheParentTask(pt *Task[Pipe]) *Command[Pipe]
- func (c *Command[Pipe]) AddSelfToTheTask() *Command[Pipe]
- func (c *Command[Pipe]) AppendArgs(args ...string) *Command[Pipe]
- func (c *Command[Pipe]) AppendDirectEnvironment(environment ...string) *Command[Pipe]
- func (c *Command[Pipe]) AppendEnvironment(environment map[string]string) *Command[Pipe]
- func (c *Command[Pipe]) EnableStreamRecording() *Command[Pipe]
- func (c *Command[Pipe]) EnableTerminator() *Command[Pipe]
- func (c *Command[Pipe]) EnsureIsAlive() *Command[Pipe]
- func (c *Command[Pipe]) GetCombinedStream() []string
- func (c *Command[Pipe]) GetFormattedCommand() string
- func (c *Command[Pipe]) GetStderrStream() []string
- func (c *Command[Pipe]) GetStdoutStream() []string
- func (c *Command[Pipe]) IsDisabled() bool
- func (c *Command[Pipe]) Job() Job
- func (c *Command[Pipe]) Run() error
- func (c *Command[Pipe]) RunSet() error
- func (c *Command[Pipe]) Set(fn CommandFn[Pipe]) *Command[Pipe]
- func (c *Command[Pipe]) SetDir(dir string) *Command[Pipe]
- func (c *Command[Pipe]) SetIgnoreError() *Command[Pipe]
- func (c *Command[Pipe]) SetLogLevel(stdout LogLevel, stderr LogLevel, lifetime LogLevel) *Command[Pipe]
- func (c *Command[Pipe]) SetMaskOsEnvironment() *Command[Pipe]
- func (c *Command[Pipe]) SetOnTerminator(fn CommandFn[Pipe]) *Command[Pipe]
- func (c *Command[Pipe]) SetPath(dir string) *Command[Pipe]
- func (c *Command[Pipe]) ShouldDisable(fn TaskPredicateFn[Pipe]) *Command[Pipe]
- func (c *Command[Pipe]) ShouldRunAfter(fn CommandFn[Pipe]) *Command[Pipe]
- type CommandFn
- type CommandOptions
- type DeprecationNotice
- type ErrorWithLogger
- type GuardHandlerFn
- type Job
- type JobPredicate
- type JobWrapperFn
- type LogLevel
- type Plumber
- func (p *Plumber) AppendFlags(flags ...[]cli.Flag) []cli.Flag
- func (p *Plumber) AppendSecrets(secrets ...string) *Plumber
- func (p *Plumber) EnableTerminator() *Plumber
- func (p *Plumber) New(fn func(a *Plumber) *cli.App) *Plumber
- func (p *Plumber) RegisterTerminated() *Plumber
- func (p *Plumber) RegisterTerminator() *Plumber
- func (p *Plumber) Run()
- func (p *Plumber) SendCustomError(log *logrus.Entry, err error) *Plumber
- func (p *Plumber) SendCustomFatal(log *logrus.Entry, err error) *Plumber
- func (p *Plumber) SendError(err error) *Plumber
- func (p *Plumber) SendExit(code int) *Plumber
- func (p *Plumber) SendFatal(err error) *Plumber
- func (p *Plumber) SendTerminate(sig os.Signal, code int)
- func (p *Plumber) SetOnTerminate(fn PlumberOnTerminateFn) *Plumber
- func (p *Plumber) Terminate(code int)
- type PlumberOnTerminateFn
- type Result
- type ResultMask
- type Task
- func (t *Task[Pipe]) AddCommands(commands ...*Command[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) AddSelfToTheParent(fn func(pt *Task[Pipe], st *Task[Pipe])) *Task[Pipe]
- func (t *Task[Pipe]) AddSelfToTheParentAsParallel() *Task[Pipe]
- func (t *Task[Pipe]) AddSelfToTheParentAsSequence() *Task[Pipe]
- func (t *Task[Pipe]) CreateCommand(command string, args ...string) *Command[Pipe]
- func (t *Task[Pipe]) CreateSubtask(name ...string) *Task[Pipe]
- func (t *Task[Pipe]) EnableTerminator() *Task[Pipe]
- func (t *Task[Pipe]) ExtendSubtask(fn JobWrapperFn) *Task[Pipe]
- func (t *Task[Pipe]) GetCommandJobAsJobParallel() Job
- func (t *Task[Pipe]) GetCommandJobAsJobSequence() Job
- func (t *Task[Pipe]) GetCommandJobs() []Job
- func (t *Task[Pipe]) GetCommands() []*Command[Pipe]
- func (t *Task[Pipe]) GetSubtasks() Job
- func (t *Task[Pipe]) HasParent() bool
- func (t *Task[Pipe]) IsDisabled() bool
- func (t *Task[Pipe]) IsMarkedAsRoutine() bool
- func (t *Task[Pipe]) IsSkipped() bool
- func (t *Task[Pipe]) Job() Job
- func (t *Task[Pipe]) Run() error
- func (t *Task[Pipe]) RunCommandJobAsJobParallel() error
- func (t *Task[Pipe]) RunCommandJobAsJobParallelWithExtension(fn JobWrapperFn) error
- func (t *Task[Pipe]) RunCommandJobAsJobSequence() error
- func (t *Task[Pipe]) RunCommandJobAsJobSequenceWithExtension(fn JobWrapperFn) error
- func (t *Task[Pipe]) RunSubtasks() error
- func (t *Task[Pipe]) RunSubtasksWithExtension(fn func(job Job) Job) error
- func (t *Task[Pipe]) SendError(err error) *Task[Pipe]
- func (t *Task[Pipe]) SendExit(code int) *Task[Pipe]
- func (t *Task[Pipe]) SendFatal(err error) *Task[Pipe]
- func (t *Task[Pipe]) Set(fn TaskFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) SetJobWrapper(fn JobWrapperFn) *Task[Pipe]
- func (t *Task[Pipe]) SetMarks(marks ...string) *Task[Pipe]
- func (t *Task[Pipe]) SetOnTerminator(fn TaskFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) SetSubtask(job Job) *Task[Pipe]
- func (t *Task[Pipe]) ShouldDisable(fn TaskPredicateFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) ShouldRunAfter(fn TaskFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) ShouldRunBefore(fn TaskFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) ShouldSkip(fn TaskPredicateFn[Pipe]) *Task[Pipe]
- func (t *Task[Pipe]) ToParent(parent *Task[Pipe], fn func(pt *Task[Pipe], st *Task[Pipe])) *Task[Pipe]
- type TaskFn
- type TaskList
- func (t *TaskList[Pipe]) CreateBasicJob(fn func() error) Job
- func (t *TaskList[Pipe]) CreateJob(fn func(tl *TaskList[Pipe]) error) Job
- func (t *TaskList[Pipe]) CreateTask(name ...string) *Task[Pipe]
- func (t *TaskList[Pipe]) GetTasks() Job
- func (t *TaskList[Pipe]) GuardAlways(job Job) Job
- func (t *TaskList[Pipe]) GuardIgnorePanic(job Job) Job
- func (t *TaskList[Pipe]) GuardOnPanic(job Job, fn GuardHandlerFn[Pipe]) Job
- func (t *TaskList[Pipe]) GuardOnTimeout(job Job, fn GuardHandlerFn[Pipe], timeout time.Duration) Job
- func (t *TaskList[Pipe]) GuardPanic(job Job) Job
- func (t *TaskList[Pipe]) GuardResume(job Job, mask Result) Job
- func (t *TaskList[Pipe]) GuardTimeout(job Job, timeout time.Duration) Job
- func (t *TaskList[Pipe]) IsDisabled() bool
- func (t *TaskList[Pipe]) IsSkipped() bool
- func (t *TaskList[Pipe]) Job() Job
- func (t *TaskList[Pipe]) JobBackground(job Job) Job
- func (t *TaskList[Pipe]) JobDelay(job Job, delay time.Duration) Job
- func (t *TaskList[Pipe]) JobElse(job Job) Job
- func (t *TaskList[Pipe]) JobIf(predicate JobPredicate, jobs ...Job) Job
- func (t *TaskList[Pipe]) JobIfNot(predicate JobPredicate, jobs ...Job) Job
- func (t *TaskList[Pipe]) JobLoop(job Job) Job
- func (t *TaskList[Pipe]) JobLoopWithWaitAfter(job Job, delay time.Duration) Job
- func (t *TaskList[Pipe]) JobParallel(jobs ...Job) Job
- func (t *TaskList[Pipe]) JobRepeat(job Job, times int) Job
- func (t *TaskList[Pipe]) JobSequence(jobs ...Job) Job
- func (t *TaskList[Pipe]) JobThen(job Job) Job
- func (t *TaskList[Pipe]) JobWait(predicate JobPredicate, sleep time.Duration) Job
- func (t *TaskList[Pipe]) JobWaitForTerminator() Job
- func (t *TaskList[Pipe]) JobWhile(predicate JobPredicate, job Job) Job
- func (t *TaskList[Pipe]) New(p *Plumber) *TaskList[Pipe]
- func (t *TaskList[Pipe]) NewResultMask(mask Result) ResultMask
- func (t *TaskList[Pipe]) Predicate(fn TaskListPredicateFn[Pipe]) JobPredicate
- func (t *TaskList[Pipe]) PredicateAnd(predicates ...JobPredicate) JobPredicate
- func (t *TaskList[Pipe]) PredicateNot(predicate JobPredicate) JobPredicate
- func (t *TaskList[Pipe]) PredicateOr(predicates ...JobPredicate) JobPredicate
- func (t *TaskList[Pipe]) PredicateXor(predicates ...JobPredicate) JobPredicate
- func (t *TaskList[Pipe]) Run() error
- func (t *TaskList[Pipe]) RunJobs(job Job) error
- func (t *TaskList[Pipe]) Set(fn TaskListJobFn[Pipe]) *TaskList[Pipe]
- func (t *TaskList[Pipe]) SetCliContext(ctx *cli.Context) *TaskList[Pipe]
- func (t *TaskList[Pipe]) SetDelimiter(delimiter string) *TaskList[Pipe]
- func (t *TaskList[Pipe]) SetName(names ...string) *TaskList[Pipe]
- func (t *TaskList[Pipe]) SetTasks(tasks Job) *TaskList[Pipe]
- func (t *TaskList[Pipe]) ShouldDisable(fn TaskListPredicateFn[Pipe]) *TaskList[Pipe]
- func (t *TaskList[Pipe]) ShouldRunAfter(fn TaskListFn[Pipe]) *TaskList[Pipe]
- func (t *TaskList[Pipe]) ShouldRunBefore(fn TaskListFn[Pipe]) *TaskList[Pipe]
- func (t *TaskList[Pipe]) ShouldSkip(fn TaskListPredicateFn[Pipe]) *TaskList[Pipe]
- func (t *TaskList[Pipe]) Validate(data TaskListData) error
- type TaskListData
- type TaskListFn
- type TaskListJobFn
- type TaskListOptions
- type TaskListPredicateFn
- type TaskOptions
- type TaskPredicateFn
- type Terminator
Constants ¶
const ( LOG_LEVEL_DEFAULT LogLevel = 0 LOG_LEVEL_PANIC LogLevel = logrus.PanicLevel LOG_LEVEL_FATAL LogLevel = logrus.FatalLevel LOG_LEVEL_ERROR LogLevel = logrus.ErrorLevel LOG_LEVEL_WARN LogLevel = logrus.WarnLevel LOG_LEVEL_INFO LogLevel = logrus.InfoLevel LOG_LEVEL_DEBUG LogLevel = logrus.DebugLevel LOG_LEVEL_TRACE LogLevel = logrus.TraceLevel LOG_FIELD_CONTEXT string = "context" LOG_FIELD_STATUS string = "status" )
const CLI_FLAGS_CATEGORY = "CLI"
const (
MARK_ROUTINE string = "MARK_ROUTINE"
)
Variables ¶
var CliDefaultFlags = []cli.Flag{ &cli.BoolFlag{ Category: CLI_FLAGS_CATEGORY, Name: "ci", Usage: "Sets whether this is running inside a CI/CD environment.", Hidden: true, EnvVars: []string{"CI"}, }, &cli.BoolFlag{ Category: CLI_FLAGS_CATEGORY, Name: "debug", Usage: "Enable debugging for the application.", EnvVars: []string{"DEBUG"}, Hidden: true, }, &cli.StringFlag{ Category: CLI_FLAGS_CATEGORY, Name: "log-level", Usage: `Define the log level for the application. enum("PANIC", "FATAL", "WARNING", "INFO", "DEBUG", "TRACE")`, EnvVars: []string{"LOG_LEVEL"}, Value: logrus.InfoLevel.String(), }, &cli.StringSliceFlag{ Category: CLI_FLAGS_CATEGORY, Name: "env-file", Usage: "Environment files to inject.", EnvVars: []string{"ENV_FILE"}, }, }
Functions ¶
This section is empty.
Types ¶
type AppChannel ¶
type AppChannel struct { // to communicate the errors while not blocking Err chan error // to communicate the errors while not blocking CustomErr chan ErrorWithLogger // Fatal errors Fatal chan error // to communicate the errors while not blocking CustomFatal chan ErrorWithLogger // terminate channel Interrupt chan os.Signal // exit channel Exit *broadcaster.Broadcaster[int] }
type AppEnvironment ¶
type Command ¶
type Command[Pipe TaskListData] struct { Command *exec.Cmd Plumber *Plumber Log *logrus.Entry // contains filtered or unexported fields }
func NewCommand ¶
func NewCommand[Pipe TaskListData]( task *Task[Pipe], command string, args ...string, ) *Command[Pipe]
func (*Command[Pipe]) AddSelfToTheParentTask ¶
func (*Command[Pipe]) AddSelfToTheTask ¶
func (*Command[Pipe]) AppendArgs ¶
Command.AppendArgs Appends arguments to the command.
func (*Command[Pipe]) AppendDirectEnvironment ¶
Command.AppendDirectEnvironment Appends environment variables to command as directly.
func (*Command[Pipe]) AppendEnvironment ¶
Command.AppendEnvironment Appends environment variables to command as map.
func (*Command[Pipe]) EnableStreamRecording ¶
func (*Command[Pipe]) EnableTerminator ¶
func (*Command[Pipe]) EnsureIsAlive ¶
func (*Command[Pipe]) GetCombinedStream ¶
func (*Command[Pipe]) GetFormattedCommand ¶
func (*Command[Pipe]) GetStderrStream ¶
func (*Command[Pipe]) GetStdoutStream ¶
func (*Command[Pipe]) IsDisabled ¶
func (*Command[Pipe]) SetIgnoreError ¶
func (*Command[Pipe]) SetLogLevel ¶
func (c *Command[Pipe]) SetLogLevel( stdout LogLevel, stderr LogLevel, lifetime LogLevel, ) *Command[Pipe]
Command.SetLogLevel Sets the log level specific to this command.
func (*Command[Pipe]) SetMaskOsEnvironment ¶
func (*Command[Pipe]) SetOnTerminator ¶
func (*Command[Pipe]) ShouldDisable ¶
func (*Command[Pipe]) ShouldRunAfter ¶
type CommandFn ¶
type CommandFn[Pipe TaskListData] func(*Command[Pipe]) error
type CommandOptions ¶
type CommandOptions[Pipe TaskListData] struct { Disable TaskPredicateFn[Pipe] }
type DeprecationNotice ¶
type ErrorWithLogger ¶
type GuardHandlerFn ¶
type GuardHandlerFn[Pipe TaskListData] func(*TaskList[Pipe])
type JobPredicate ¶
type JobPredicate = floc.Predicate
type JobWrapperFn ¶
type Plumber ¶
type Plumber struct { Cli *cli.App Log *logrus.Logger Environment AppEnvironment Channel AppChannel Terminator PlumberOnTerminateFn DocsFile string DocsExcludeFlags bool DocsExcludeEnvironmentVariables bool DocsExcludeHelpCommand bool DeprecationNotices []DeprecationNotice // contains filtered or unexported fields }
func (*Plumber) AppendFlags ¶
func (p *Plumber) AppendFlags(flags ...[]cli.Flag) []cli.Flag
Cli.AppendFlags Appends flags together.
func (*Plumber) AppendSecrets ¶
func (*Plumber) EnableTerminator ¶
func (*Plumber) RegisterTerminated ¶
func (*Plumber) RegisterTerminator ¶
func (*Plumber) SendCustomError ¶
func (*Plumber) SendCustomFatal ¶
func (*Plumber) SetOnTerminate ¶
func (p *Plumber) SetOnTerminate(fn PlumberOnTerminateFn) *Plumber
Cli.SetOnTerminate Sets the action that would be executed on terminate.
type PlumberOnTerminateFn ¶
type PlumberOnTerminateFn func() error
type ResultMask ¶
type ResultMask = floc.ResultMask
type Task ¶
type Task[Pipe TaskListData] struct { Name string Plumber *Plumber Log *logrus.Entry Channel *AppChannel Lock *sync.RWMutex Pipe *Pipe Control floc.Control // contains filtered or unexported fields }
func (*Task[Pipe]) AddCommands ¶
func (*Task[Pipe]) AddSelfToTheParent ¶
func (*Task[Pipe]) AddSelfToTheParentAsParallel ¶
func (*Task[Pipe]) AddSelfToTheParentAsSequence ¶
func (*Task[Pipe]) CreateCommand ¶
func (*Task[Pipe]) CreateSubtask ¶
func (*Task[Pipe]) EnableTerminator ¶
func (*Task[Pipe]) ExtendSubtask ¶
func (*Task[Pipe]) GetCommandJobAsJobParallel ¶
func (*Task[Pipe]) GetCommandJobAsJobSequence ¶
func (*Task[Pipe]) GetCommandJobs ¶
func (*Task[Pipe]) GetCommands ¶
func (*Task[Pipe]) GetSubtasks ¶
func (*Task[Pipe]) IsDisabled ¶
func (*Task[Pipe]) IsMarkedAsRoutine ¶
func (*Task[Pipe]) RunCommandJobAsJobParallel ¶
func (*Task[Pipe]) RunCommandJobAsJobParallelWithExtension ¶
func (*Task[Pipe]) RunCommandJobAsJobSequence ¶
func (*Task[Pipe]) RunCommandJobAsJobSequenceWithExtension ¶
func (*Task[Pipe]) RunSubtasks ¶
func (*Task[Pipe]) RunSubtasksWithExtension ¶
func (*Task[Pipe]) SetJobWrapper ¶
func (*Task[Pipe]) SetOnTerminator ¶
func (*Task[Pipe]) SetSubtask ¶
func (*Task[Pipe]) ShouldDisable ¶
func (*Task[Pipe]) ShouldRunAfter ¶
func (*Task[Pipe]) ShouldRunBefore ¶
func (*Task[Pipe]) ShouldSkip ¶
type TaskFn ¶
type TaskFn[Pipe TaskListData] func(t *Task[Pipe]) error
type TaskList ¶
type TaskList[Pipe TaskListData] struct { Name string Tasks Job Plumber *Plumber CliContext *cli.Context Pipe Pipe Lock *sync.RWMutex Log *logrus.Logger Channel *AppChannel Control floc.Control // contains filtered or unexported fields }
func (*TaskList[Pipe]) CreateBasicJob ¶
func (*TaskList[Pipe]) CreateTask ¶
func (*TaskList[Pipe]) GuardAlways ¶
Always run this job!
func (*TaskList[Pipe]) GuardIgnorePanic ¶
func (*TaskList[Pipe]) GuardOnPanic ¶
func (t *TaskList[Pipe]) GuardOnPanic(job Job, fn GuardHandlerFn[Pipe]) Job
OnPanic protects the job from falling into panic. In addition it takes PanicTrigger func which is called in case of panic. Guarding the job from falling into panic is effective only if the job runs in the current goroutine.
func (*TaskList[Pipe]) GuardOnTimeout ¶
func (t *TaskList[Pipe]) GuardOnTimeout( job Job, fn GuardHandlerFn[Pipe], timeout time.Duration, ) Job
OnTimeout protects the job from taking too much time on execution. In addition it takes TimeoutTrigger func (t *TaskList[Pipe]) which called if time is out. The job is run in it's own goroutine while the current goroutine waits until the job finished or time went out or the flow is finished.
func (*TaskList[Pipe]) GuardPanic ¶
Panic protects the job from falling into panic. On panic the flow will be canceled with the ErrPanic result. Guarding the job from falling into panic is effective only if the job runs in the current goroutine.
func (*TaskList[Pipe]) GuardResume ¶
Resume resumes execution of the flow possibly finished by the job. If the mask is empty execution will be resumed regardless the reason it was finished. Otherwise execution will be resumed if the reason it finished with is masked.
func (*TaskList[Pipe]) GuardTimeout ¶
GuardTimeout protects the job from taking too much time on execution. The job is run in it's own goroutine while the current goroutine waits until the job finished or time went out or the flow is finished.
func (*TaskList[Pipe]) IsDisabled ¶ added in v4.17.0
func (*TaskList[Pipe]) JobBackground ¶
JobBackground starts the job in it's own goroutine. The function does not track the lifecycle of the job started and does no synchronization with it therefore the job running in background may remain active even if the flow is finished. The function assumes the job is aware of the flow state and/or synchronization and termination of it is implemented outside.
floc.Run(run.Background( func(ctx floc.Context, ctrl floc.Control) error { for !ctrl.IsFinished() { fmt.Println(time.Now()) } return nil } })
Summary:
- Run jobs in goroutines : YES
- Wait all jobs finish : NO
- Run order : SINGLE
Diagram:
--+-----------> | +-->[JOB]
func (*TaskList[Pipe]) JobDelay ¶
JobDelay does delay before starting the job.
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
--(DELAY)-->[JOB]-->
func (*TaskList[Pipe]) JobElse ¶
JobElse just returns the job unmodified. Else is used for expressiveness and can be omitted.
Summary:
- Run jobs in goroutines : N/A
- Wait all jobs finish : N/A
- Run order : N/A
Diagram:
----[JOB]--->
func (*TaskList[Pipe]) JobIf ¶
func (t *TaskList[Pipe]) JobIf(predicate JobPredicate, jobs ...Job) Job
JobIf runs the first job if the condition is met and runs the second job, if it's passed, if the condition is not met. The function panics if no or more than two jobs are given.
For expressiveness Then() and Else() can be used.
flow := run.If(testSomething, run.Then(doSomething), run.Else(doSomethingElse), )
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
+----->[JOB_1]---+ | YES | --(CONDITION MET?)--+ +--> | NO | +----->[JOB_2]---+
func (*TaskList[Pipe]) JobIfNot ¶
func (t *TaskList[Pipe]) JobIfNot(predicate JobPredicate, jobs ...Job) Job
JobIfNot runs the first job if the condition is not met and runs the second job, if it's passed, if the condition is met. The function panics if no or more than two jobs are given.
For expressiveness Then() and Else() can be used.
flow := run.IfNot(testSomething, run.Then(doSomething), run.Else(doSomethingElse), )
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
+----->[JOB_1]---+ | NO | --(CONDITION MET?)--+ +--> | YES | +----->[JOB_2]---+
func (*TaskList[Pipe]) JobLoop ¶
JobLoop repeats running the job forever.
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
+----------+ | | V | ----->[JOB]--+
func (*TaskList[Pipe]) JobLoopWithWaitAfter ¶
func (*TaskList[Pipe]) JobParallel ¶
JobParallel runs jobs in their own goroutines and waits until all of them finish.
Summary:
- Run jobs in goroutines : YES
- Wait all jobs finish : YES
- Run order : PARALLEL
Diagram:
+-->[JOB_1]--+ | | --+--> .. --+--> | | +-->[JOB_N]--+
func (*TaskList[Pipe]) JobRepeat ¶
JobRepeat repeats running the job for N times.
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
NO +-----------[JOB]<---------+ | | V | YES ----(ITERATED COUNT TIMES?)--+---->
func (*TaskList[Pipe]) JobSequence ¶
JobSequence runs jobs sequentially, one by one.
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SEQUENCE
Diagram:
-->[JOB_1]-...->[JOB_N]-->
func (*TaskList[Pipe]) JobThen ¶
Then just returns the job unmodified. Then is used for expressiveness and can be omitted.
Summary:
- Run jobs in goroutines : N/A
- Wait all jobs finish : N/A
- Run order : N/A
Diagram:
----[JOB]--->
func (*TaskList[Pipe]) JobWait ¶
func (t *TaskList[Pipe]) JobWait(predicate JobPredicate, sleep time.Duration) Job
JobWait waits until the condition is met. The function falls into sleep with the duration given between condition checks. The function does not run any job actually and just repeatedly checks predicate's return value. When the predicate returns true the function finishes.
Summary:
- Run jobs in goroutines : N/A
- Wait all jobs finish : N/A
- Run order : N/A
Diagram:
NO +------(SLEEP)------+ | | V | YES ----(CONDITION MET?)--+----->
func (*TaskList[Pipe]) JobWaitForTerminator ¶
func (*TaskList[Pipe]) JobWhile ¶
func (t *TaskList[Pipe]) JobWhile(predicate JobPredicate, job Job) Job
JobWhile repeats running the job while the condition is met.
Summary:
- Run jobs in goroutines : NO
- Wait all jobs finish : YES
- Run order : SINGLE
Diagram:
YES +-------[JOB]<------+ | | V | NO ----(CONDITION MET?)--+---->
func (*TaskList[Pipe]) NewResultMask ¶
func (t *TaskList[Pipe]) NewResultMask(mask Result) ResultMask
NewResultMask constructs new instance from the mask given.
func (*TaskList[Pipe]) Predicate ¶
func (t *TaskList[Pipe]) Predicate(fn TaskListPredicateFn[Pipe]) JobPredicate
TaskList.Predicate Creates a new floc predicate out of the given conditions.
func (*TaskList[Pipe]) PredicateAnd ¶
func (t *TaskList[Pipe]) PredicateAnd(predicates ...JobPredicate) JobPredicate
PredicateAnd returns a predicate which chains multiple predicates into a condition with AND logic. The result predicate finishes calculation of the condition as fast as the result is known. The function panics if the number of predicates is less than 2.
The result predicate tests the condition as follows.
[PRED_1] AND ... AND [PRED_N]
func (*TaskList[Pipe]) PredicateNot ¶
func (t *TaskList[Pipe]) PredicateNot(predicate JobPredicate) JobPredicate
PredicateNot returns the negated value of the predicate.
The result predicate tests the condition as follows.
NOT [PRED]
func (*TaskList[Pipe]) PredicateOr ¶
func (t *TaskList[Pipe]) PredicateOr(predicates ...JobPredicate) JobPredicate
PredicateOr returns a predicate which chains multiple predicates into a condition with OR logic. The result predicate finishes calculation of the condition as fast as the result is known.
The result predicate tests the condition as follows.
[PRED_1] OR ... OR [PRED_N]
func (*TaskList[Pipe]) PredicateXor ¶
func (t *TaskList[Pipe]) PredicateXor(predicates ...JobPredicate) JobPredicate
Xor returns a predicate which chains multiple predicates into a condition with XOR logic. The result predicate finishes calculation of the condition as fast as the result is known.
The result predicate tests the condition as follows.
(([PRED_1] XOR [PRED_2]) ... XOR [PRED_N])
func (*TaskList[Pipe]) SetCliContext ¶
func (*TaskList[Pipe]) SetDelimiter ¶
func (*TaskList[Pipe]) ShouldDisable ¶ added in v4.17.0
func (*TaskList[Pipe]) ShouldRunAfter ¶
func (t *TaskList[Pipe]) ShouldRunAfter(fn TaskListFn[Pipe]) *TaskList[Pipe]
func (*TaskList[Pipe]) ShouldRunBefore ¶
func (t *TaskList[Pipe]) ShouldRunBefore(fn TaskListFn[Pipe]) *TaskList[Pipe]
func (*TaskList[Pipe]) ShouldSkip ¶ added in v4.17.0
func (*TaskList[Pipe]) Validate ¶
func (t *TaskList[Pipe]) Validate(data TaskListData) error
type TaskListData ¶
type TaskListData interface { any }
type TaskListFn ¶
type TaskListFn[Pipe TaskListData] func(*TaskList[Pipe]) error
type TaskListJobFn ¶
type TaskListJobFn[Pipe TaskListData] func(*TaskList[Pipe]) Job
type TaskListOptions ¶ added in v4.17.0
type TaskListOptions[Pipe TaskListData] struct { Skip TaskListPredicateFn[Pipe] Disable TaskListPredicateFn[Pipe] }
type TaskListPredicateFn ¶
type TaskListPredicateFn[Pipe TaskListData] func(*TaskList[Pipe]) bool
type TaskOptions ¶
type TaskOptions[Pipe TaskListData] struct { Skip TaskPredicateFn[Pipe] Disable TaskPredicateFn[Pipe] }
type TaskPredicateFn ¶
type TaskPredicateFn[Pipe TaskListData] func(t *Task[Pipe]) bool