1package exec 2 3import ( 4 "errors" 5 6 "github.com/concourse/concourse/atc" 7 "github.com/concourse/concourse/atc/runtime" 8) 9 10func NewVersionSourceFromPlan(getPlan *atc.GetPlan) VersionSource { 11 if getPlan.Version != nil { 12 return &StaticVersionSource{ 13 version: *getPlan.Version, 14 } 15 } else if getPlan.VersionFrom != nil { 16 return &PutStepVersionSource{ 17 planID: *getPlan.VersionFrom, 18 } 19 } else { 20 return &EmptyVersionSource{} 21 } 22} 23 24type VersionSource interface { 25 Version(RunState) (atc.Version, error) 26} 27 28type StaticVersionSource struct { 29 version atc.Version 30} 31 32func (p *StaticVersionSource) Version(RunState) (atc.Version, error) { 33 return p.version, nil 34} 35 36var ErrPutStepVersionMissing = errors.New("version is missing from put step") 37 38type PutStepVersionSource struct { 39 planID atc.PlanID 40} 41 42func (p *PutStepVersionSource) Version(state RunState) (atc.Version, error) { 43 var info runtime.VersionResult 44 if !state.Result(p.planID, &info) { 45 return atc.Version{}, ErrPutStepVersionMissing 46 } 47 48 return info.Version, nil 49} 50 51type EmptyVersionSource struct{} 52 53func (p *EmptyVersionSource) Version(RunState) (atc.Version, error) { 54 return atc.Version{}, nil 55} 56