in cli/main.go [231:322]
func main() {
addFlags(os.Args[1:])
flag.Parse()
if len(flag.Args()) == 0 {
log.Fatal("Not enough args, first arg needs to be the path to a workflow.")
}
if *format {
for _, path := range flag.Args() {
fmt.Printf("[Daisy] Formating workflow file %q\n", path)
if err := fmtWorkflow(path); err != nil {
fmt.Print(err)
}
}
return
}
ctx := context.Background()
var ws []*daisy.Workflow
varMap := populateVars(*variables)
for _, path := range flag.Args() {
w, err := parseWorkflow(ctx, path, varMap, *project, *zone, *gcsPath, *oauth, *defaultTimeout, *ce, *gcsLogsDisabled, *cloudLogsDisabled, *stdoutLogsDisabled, *skipCachingImages)
if err != nil {
log.Fatalf("error parsing workflow %q: %v", path, err)
}
ws = append(ws, w)
}
errors := make(chan error, len(ws))
var wg sync.WaitGroup
for _, w := range ws {
c := make(chan os.Signal, 1)
signal.Notify(c, os.Interrupt)
go func(w *daisy.Workflow) {
select {
case <-c:
fmt.Printf("\nCtrl-C caught, sending cancel signal to %q...\n", w.Name)
w.CancelWorkflow()
errors <- fmt.Errorf("workflow %q was canceled", w.Name)
case <-w.Cancel:
}
}(w)
if *print {
fmt.Printf("[Daisy] Printing workflow %q\n", w.Name)
w.Print(ctx)
continue
}
if *validate {
fmt.Printf("[Daisy] Validating workflow %q\n", w.Name)
if err := w.Validate(ctx); err != nil {
fmt.Fprintf(os.Stderr, "[Daisy] Error validating workflow %q: %v\n", w.Name, err)
}
continue
}
wg.Add(1)
go func(w *daisy.Workflow) {
defer wg.Done()
if *printPerf {
defer printPerfProfile(w)
}
fmt.Printf("[Daisy] Running workflow %q (id=%s)\n", w.Name, w.ID())
if err := w.Run(ctx); err != nil {
errors <- fmt.Errorf("%s: %v", w.Name, err)
return
}
fmt.Printf("[Daisy] Workflow %q finished\n", w.Name)
}(w)
}
wg.Wait()
select {
case err := <-errors:
fmt.Fprintln(os.Stderr, "\n[Daisy] Errors in one or more workflows:")
fmt.Fprintln(os.Stderr, " ", err)
for {
select {
case err := <-errors:
fmt.Fprintln(os.Stderr, " ", err)
continue
default:
os.Exit(1)
}
}
default:
if !*print && !*validate {
fmt.Println("[Daisy] All workflows completed successfully.")
}
}
}