40 lines
960 B
Go
40 lines
960 B
Go
package queue
|
|
|
|
import (
|
|
"io"
|
|
"time"
|
|
|
|
"github.com/drone/drone/pkg/build"
|
|
"github.com/drone/drone/pkg/build/docker"
|
|
"github.com/drone/drone/pkg/build/repo"
|
|
"github.com/drone/drone/pkg/build/script"
|
|
)
|
|
|
|
type Runner interface {
|
|
Run(buildScript *script.Build, repo *repo.Repo, key []byte, buildOutput io.Writer) (success bool, err error)
|
|
}
|
|
|
|
type runner struct {
|
|
dockerClient *docker.Client
|
|
timeout time.Duration
|
|
}
|
|
|
|
func NewRunner(dockerClient *docker.Client, timeout time.Duration) Runner {
|
|
return &runner{
|
|
dockerClient: dockerClient,
|
|
timeout: timeout,
|
|
}
|
|
}
|
|
|
|
func (r *runner) Run(buildScript *script.Build, repo *repo.Repo, key []byte, buildOutput io.Writer) (bool, error) {
|
|
builder := build.New(r.dockerClient)
|
|
builder.Build = buildScript
|
|
builder.Repo = repo
|
|
builder.Key = key
|
|
builder.Stdout = buildOutput
|
|
builder.Timeout = r.timeout
|
|
|
|
err := builder.Run()
|
|
|
|
return builder.BuildState == nil || builder.BuildState.ExitCode != 0, err
|
|
}
|