add byg
This commit is contained in:
commit
81bf4841b8
69
byg.go
Normal file
69
byg.go
Normal file
@ -0,0 +1,69 @@
|
||||
package byg
|
||||
|
||||
import (
|
||||
"context"
|
||||
"sync"
|
||||
|
||||
"golang.org/x/sync/errgroup"
|
||||
)
|
||||
|
||||
type buildStep struct {
|
||||
name string
|
||||
tasks []StepExecuteFunc
|
||||
}
|
||||
|
||||
type Builder struct {
|
||||
steps []*buildStep
|
||||
addmu sync.RWMutex
|
||||
}
|
||||
|
||||
func New() *Builder {
|
||||
return &Builder{
|
||||
steps: make([]*buildStep, 0),
|
||||
}
|
||||
}
|
||||
|
||||
type Context struct{}
|
||||
type StepExecuteFunc func(ctx Context) error
|
||||
type Step struct {
|
||||
Execute StepExecuteFunc
|
||||
}
|
||||
|
||||
func (bb *Builder) Step(name string, steps ...Step) *Builder {
|
||||
bb.addmu.Lock()
|
||||
defer bb.addmu.Unlock()
|
||||
|
||||
bs := &buildStep{
|
||||
name: name,
|
||||
tasks: make([]StepExecuteFunc, 0),
|
||||
}
|
||||
|
||||
for _, st := range steps {
|
||||
bs.tasks = append(bs.tasks, st.Execute)
|
||||
}
|
||||
|
||||
bb.steps = append(bb.steps, bs)
|
||||
|
||||
return bb
|
||||
}
|
||||
|
||||
func (bb *Builder) Execute(ctx context.Context) error {
|
||||
bb.addmu.Lock()
|
||||
defer bb.addmu.Unlock()
|
||||
|
||||
for _, step := range bb.steps {
|
||||
errgroup, _ := errgroup.WithContext(ctx)
|
||||
|
||||
for _, task := range step.tasks {
|
||||
errgroup.Go(func() error {
|
||||
return task(Context{})
|
||||
})
|
||||
}
|
||||
|
||||
if err := errgroup.Wait(); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
34
examples/test.go
Normal file
34
examples/test.go
Normal file
@ -0,0 +1,34 @@
|
||||
package examples
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
|
||||
"git.front.kjuulh.io/kjuulh/byg"
|
||||
)
|
||||
|
||||
func Test(t *testing.T) {
|
||||
byg.New().
|
||||
Step(
|
||||
"fetch resources",
|
||||
byg.Step{
|
||||
Execute: func(ctx byg.Context) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
byg.Step{
|
||||
Execute: func(ctx byg.Context) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
).
|
||||
Step(
|
||||
"build stuff",
|
||||
byg.Step{
|
||||
Execute: func(ctx byg.Context) error {
|
||||
return nil
|
||||
},
|
||||
},
|
||||
).Execute(context.Background())
|
||||
|
||||
}
|
5
go.mod
Normal file
5
go.mod
Normal file
@ -0,0 +1,5 @@
|
||||
module git.front.kjuulh.io/kjuulh/byg
|
||||
|
||||
go 1.19
|
||||
|
||||
require golang.org/x/sync v0.1.0
|
Loading…
Reference in New Issue
Block a user