github.com/ssube/gitlab-ci-multi-runner@v1.2.1-0.20160607142738-b8d1285632e6/common/executor.go (about) 1 package common 2 3 import ( 4 log "github.com/Sirupsen/logrus" 5 ) 6 7 type ExecutorData interface{} 8 9 type ExecutorCommand struct { 10 Script string 11 Predefined bool 12 Abort chan interface{} 13 } 14 15 type Executor interface { 16 Prepare(globalConfig *Config, config *RunnerConfig, build *Build) error 17 ShellScript() *ShellScript 18 Run(cmd ExecutorCommand) error 19 Finish(err error) 20 Cleanup() 21 } 22 23 type ExecutorProvider interface { 24 CanCreate() bool 25 Create() Executor 26 Acquire(config *RunnerConfig) (ExecutorData, error) 27 Release(config *RunnerConfig, data ExecutorData) error 28 GetFeatures(features *FeaturesInfo) 29 } 30 31 var executors map[string]ExecutorProvider 32 33 func RegisterExecutor(executor string, provider ExecutorProvider) { 34 log.Debugln("Registering", executor, "executor...") 35 36 if executors == nil { 37 executors = make(map[string]ExecutorProvider) 38 } 39 if _, ok := executors[executor]; ok { 40 panic("Executor already exist: " + executor) 41 } 42 executors[executor] = provider 43 } 44 45 func GetExecutor(executor string) ExecutorProvider { 46 if executors == nil { 47 return nil 48 } 49 50 provider, _ := executors[executor] 51 return provider 52 } 53 54 func GetExecutors() []string { 55 names := []string{} 56 if executors != nil { 57 for name := range executors { 58 names = append(names, name) 59 } 60 } 61 return names 62 } 63 64 func NewExecutor(executor string) Executor { 65 provider := GetExecutor(executor) 66 if provider != nil { 67 return provider.Create() 68 } 69 70 return nil 71 }