github.com/marinho/drone@v0.2.1-0.20140504195434-d3ba962e89a7/pkg/queue/build_runner.go (about)

     1  package queue
     2  
     3  import (
     4  	"io"
     5  	"time"
     6  
     7  	"github.com/drone/drone/pkg/build"
     8  	"github.com/drone/drone/pkg/build/docker"
     9  	"github.com/drone/drone/pkg/build/repo"
    10  	"github.com/drone/drone/pkg/build/script"
    11  )
    12  
    13  type BuildRunner interface {
    14  	Run(buildScript *script.Build, repo *repo.Repo, key []byte, privileged bool, buildOutput io.Writer) (success bool, err error)
    15  }
    16  
    17  type buildRunner struct {
    18  	dockerClient *docker.Client
    19  	timeout      time.Duration
    20  }
    21  
    22  func NewBuildRunner(dockerClient *docker.Client, timeout time.Duration) BuildRunner {
    23  	return &buildRunner{
    24  		dockerClient: dockerClient,
    25  		timeout:      timeout,
    26  	}
    27  }
    28  
    29  func (runner *buildRunner) Run(buildScript *script.Build, repo *repo.Repo, key []byte, privileged bool, buildOutput io.Writer) (bool, error) {
    30  	builder := build.New(runner.dockerClient)
    31  	builder.Build = buildScript
    32  	builder.Repo = repo
    33  	builder.Key = key
    34  	builder.Privileged = privileged
    35  	builder.Stdout = buildOutput
    36  	builder.Timeout = runner.timeout
    37  
    38  	err := builder.Run()
    39  
    40  	return builder.BuildState == nil || builder.BuildState.ExitCode != 0, err
    41  }