đź“‹ Add user-friendly tasks to your terminal
Tip
All output is Github Action friendly! You can view the output of each example here
go get github.com/fumeapp/taskin
Simplest way to line up and fire off tasks
taskin/examples/simple/main.go
Lines 11 to 33 in 3cd766c
tasks := taskin.New(taskin.Tasks{ | |
{ | |
Title: "Task 1", | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 3; i++ { | |
t.Title = fmt.Sprintf("Task 1: [%d/3] seconds have passed", i+1) | |
time.Sleep(500 * time.Millisecond) | |
} | |
return nil | |
}, | |
}, | |
{ | |
Title: "Task 2", | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 3; i++ { | |
t.Title = fmt.Sprintf("Task 2: [%d/3] seconds have passed", i+1) | |
time.Sleep(500 * time.Millisecond) | |
} | |
return fmt.Errorf("task 2 failed") | |
}, | |
}, | |
}, taskin.Defaults) | |
err := tasks.Run() |
Using a progress bar for a task
taskin/examples/progress/main.go
Lines 11 to 24 in 06b4d11
tasks := taskin.New(taskin.Tasks{ | |
{ | |
Title: "Progress", | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 5; i++ { | |
t.Progress(i+1, 5) | |
t.Title = fmt.Sprintf("Progress [%d/%d]", i+1, 5) | |
time.Sleep(1 * time.Second) | |
} | |
return nil | |
}, | |
}, | |
}, taskin.Defaults) | |
err := tasks.Run() |
Customize colors, spinner, and progress bar
taskin/examples/custom/main.go
Lines 13 to 54 in 3cd766c
tasks := taskin.New(taskin.Tasks{ | |
{ | |
Title: "Task 1", | |
// sleep for 3 seconds then return nil | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 2; i++ { | |
t.Title = fmt.Sprintf("Task 1 - [%d/%d]", i+1, 2) | |
time.Sleep(1 * time.Second) | |
} | |
return nil | |
}, | |
}, | |
{ | |
Title: "Task 2 Progress", | |
// sleep for 3 seconds then return nil | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 5; i++ { | |
t.Progress(i+1, 5) | |
t.Title = fmt.Sprintf("Task 2 - [%d/%d]", i+1, 5) | |
time.Sleep(1 * time.Second) | |
} | |
return nil | |
}, | |
}, | |
{ | |
Title: "Task 3", | |
// sleep for 3 seconds then return nil | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 2; i++ { | |
t.Title = fmt.Sprintf("Task 3 - [%d/%d]", i+1, 2) | |
time.Sleep(1 * time.Second) | |
} | |
return nil | |
}, | |
}, | |
}, taskin.Config{ | |
Spinner: spinner.Moon, | |
ProgressOptions: []progress.Option{ | |
progress.WithScaledGradient("#6667AB", "#34D399"), | |
}, | |
}) | |
err := tasks.Run() |
Nest tasks inside tasks
Lines 23 to 34 in 3cd766c
Title: "Pluck the Chickens", | |
Tasks: taskin.Tasks{ | |
{ | |
Title: "Pluck the silkies", | |
Task: func(t *taskin.Task) error { | |
for i := 0; i < 3; i++ { | |
t.Title = fmt.Sprintf(" [%d/3] silkies plucked", i+1) | |
time.Sleep(500 * time.Millisecond) | |
} | |
return nil | |
}, | |
}, |