139 lines
3.4 KiB
Go
139 lines
3.4 KiB
Go
package builder
|
|
|
|
import (
|
|
"crypto/sha1"
|
|
"fmt"
|
|
"path/filepath"
|
|
|
|
"github.com/concourse/concourse/atc"
|
|
"github.com/concourse/concourse/atc/creds"
|
|
"github.com/concourse/concourse/atc/db"
|
|
"github.com/concourse/concourse/atc/exec"
|
|
"github.com/concourse/concourse/atc/resource"
|
|
"github.com/concourse/concourse/atc/worker"
|
|
)
|
|
|
|
type stepFactory struct {
|
|
pool worker.Pool
|
|
client worker.Client
|
|
resourceFetcher resource.Fetcher
|
|
resourceCacheFactory db.ResourceCacheFactory
|
|
resourceConfigFactory db.ResourceConfigFactory
|
|
secretManager creds.Secrets
|
|
defaultLimits atc.ContainerLimits
|
|
strategy worker.ContainerPlacementStrategy
|
|
resourceFactory resource.ResourceFactory
|
|
}
|
|
|
|
func NewStepFactory(
|
|
pool worker.Pool,
|
|
client worker.Client,
|
|
resourceFetcher resource.Fetcher,
|
|
resourceCacheFactory db.ResourceCacheFactory,
|
|
resourceConfigFactory db.ResourceConfigFactory,
|
|
secretManager creds.Secrets,
|
|
defaultLimits atc.ContainerLimits,
|
|
strategy worker.ContainerPlacementStrategy,
|
|
resourceFactory resource.ResourceFactory,
|
|
) *stepFactory {
|
|
return &stepFactory{
|
|
pool: pool,
|
|
client: client,
|
|
resourceFetcher: resourceFetcher,
|
|
resourceCacheFactory: resourceCacheFactory,
|
|
resourceConfigFactory: resourceConfigFactory,
|
|
secretManager: secretManager,
|
|
defaultLimits: defaultLimits,
|
|
strategy: strategy,
|
|
resourceFactory: resourceFactory,
|
|
}
|
|
}
|
|
|
|
func (factory *stepFactory) GetStep(
|
|
plan atc.Plan,
|
|
stepMetadata exec.StepMetadata,
|
|
containerMetadata db.ContainerMetadata,
|
|
delegate exec.GetDelegate,
|
|
) exec.Step {
|
|
containerMetadata.WorkingDirectory = resource.ResourcesDir("get")
|
|
|
|
getStep := exec.NewGetStep(
|
|
plan.ID,
|
|
*plan.Get,
|
|
stepMetadata,
|
|
containerMetadata,
|
|
factory.secretManager,
|
|
factory.resourceFetcher,
|
|
factory.resourceCacheFactory,
|
|
factory.strategy,
|
|
factory.pool,
|
|
delegate,
|
|
)
|
|
|
|
return exec.LogError(getStep, delegate)
|
|
}
|
|
|
|
func (factory *stepFactory) PutStep(
|
|
plan atc.Plan,
|
|
stepMetadata exec.StepMetadata,
|
|
containerMetadata db.ContainerMetadata,
|
|
delegate exec.PutDelegate,
|
|
) exec.Step {
|
|
containerMetadata.WorkingDirectory = resource.ResourcesDir("put")
|
|
|
|
putStep := exec.NewPutStep(
|
|
plan.ID,
|
|
*plan.Put,
|
|
stepMetadata,
|
|
containerMetadata,
|
|
factory.secretManager,
|
|
factory.resourceFactory,
|
|
factory.resourceConfigFactory,
|
|
factory.strategy,
|
|
factory.pool,
|
|
delegate,
|
|
)
|
|
|
|
return exec.LogError(putStep, delegate)
|
|
}
|
|
|
|
func (factory *stepFactory) TaskStep(
|
|
plan atc.Plan,
|
|
stepMetadata exec.StepMetadata,
|
|
containerMetadata db.ContainerMetadata,
|
|
delegate exec.TaskDelegate,
|
|
) exec.Step {
|
|
sum := sha1.Sum([]byte(plan.Task.Name))
|
|
containerMetadata.WorkingDirectory = filepath.Join("/tmp", "build", fmt.Sprintf("%x", sum[:4]))
|
|
|
|
taskStep := exec.NewTaskStep(
|
|
plan.ID,
|
|
*plan.Task,
|
|
factory.defaultLimits,
|
|
stepMetadata,
|
|
containerMetadata,
|
|
factory.secretManager,
|
|
factory.strategy,
|
|
factory.pool,
|
|
delegate,
|
|
)
|
|
|
|
return exec.LogError(taskStep, delegate)
|
|
}
|
|
|
|
func (factory *stepFactory) ArtifactInputStep(
|
|
plan atc.Plan,
|
|
build db.Build,
|
|
delegate exec.BuildStepDelegate,
|
|
) exec.Step {
|
|
return exec.NewArtifactInputStep(plan, build, factory.client, delegate)
|
|
}
|
|
|
|
func (factory *stepFactory) ArtifactOutputStep(
|
|
plan atc.Plan,
|
|
build db.Build,
|
|
delegate exec.BuildStepDelegate,
|
|
) exec.Step {
|
|
return exec.NewArtifactOutputStep(plan, build, factory.client, delegate)
|
|
}
|