package builders import ( "context" "errors" "fmt" "os" "os/exec" "go.uber.org/zap" ) type DockerBuild struct { logger *zap.Logger } func NewDockerBuild(logger *zap.Logger) *Go { return &Go{logger: logger} } type DockerRunCommand func(ctx context.Context, victimPath string) error func (g *DockerBuild) Build(ctx context.Context, modulePath, entryPath string) (DockerRunCommand, error) { g.logger.Debug("Building docker image", zap.String("actiondir", modulePath), zap.String("entry", entryPath)) if _, err := os.Stat(fmt.Sprintf("%s/%s", modulePath, entryPath)); os.IsNotExist(err) { return nil, errors.New("could not find entry") } g.logger.Debug("Go binary built!") return func(ctx context.Context, victimPath string) error { g.logger.Debug("Executing script", zap.String("victim", victimPath)) cmd := exec.CommandContext( ctx, "/bin/bash", "-c", fmt.Sprintf("(cd %s; docker build)", modulePath), ) return cmd.Run() }, nil }