mukan-ignite/ignite/pkg/cmdrunner/step/step.go
Mukan Erkin Törük 26b204bd04
Some checks are pending
Docs Deploy / build_and_deploy (push) Waiting to run
Generate Docs / cli (push) Waiting to run
Generate Config Doc / cli (push) Waiting to run
Go formatting / go-formatting (push) Waiting to run
Check links / markdown-link-check (push) Waiting to run
Integration / pre-test (push) Waiting to run
Integration / test on (push) Blocked by required conditions
Integration / status (push) Blocked by required conditions
Lint / Lint Go code (push) Waiting to run
Test / test (ubuntu-latest) (push) Waiting to run
feat: fork Ignite CLI v29 as Mukan Ignite — remove cosmos-sdk restrictions
2026-05-11 03:31:37 +03:00

118 lines
1.8 KiB
Go

package step
import (
"io"
)
type Step struct {
Exec Execution
PreExec func() error
InExec func() error
PostExecs []func(error) error
Stdout io.Writer
Stderr io.Writer
Stdin io.Reader
Workdir string
Env []string
WriteData []byte
}
type Option func(*Step)
type Options []Option
func NewOptions() Options {
return Options{}
}
func (o Options) Add(options ...Option) Options {
return append(o, options...)
}
func New(options ...Option) *Step {
s := &Step{
PreExec: func() error { return nil },
InExec: func() error { return nil },
PostExecs: make([]func(error) error, 0),
}
for _, o := range options {
o(s)
}
return s
}
type Execution struct {
Command string
Args []string
}
func Exec(command string, args ...string) Option {
return func(s *Step) {
s.Exec = Execution{command, args}
}
}
func PreExec(hook func() error) Option {
return func(s *Step) {
s.PreExec = hook
}
}
func InExec(hook func() error) Option {
return func(s *Step) {
s.InExec = hook
}
}
func PostExec(hook func(exitErr error) error) Option { // *os.ExitError
return func(s *Step) {
s.PostExecs = append(s.PostExecs, hook)
}
}
func Stdout(w io.Writer) Option {
return func(s *Step) {
s.Stdout = w
}
}
func Stderr(w io.Writer) Option {
return func(s *Step) {
s.Stderr = w
}
}
func Stdin(r io.Reader) Option {
return func(s *Step) {
s.Stdin = r
}
}
func Workdir(path string) Option {
return func(s *Step) {
s.Workdir = path
}
}
func Env(e ...string) Option {
return func(s *Step) {
s.Env = e
}
}
func Write(data []byte) Option {
return func(s *Step) {
s.WriteData = data
}
}
type Steps []*Step
func NewSteps(steps ...*Step) Steps {
return steps
}
func (s *Steps) Add(steps ...*Step) Steps {
*s = append(*s, steps...)
return *s
}