func (s jobService) getBuildInputs(logger lager.Logger, build db.Build, buildPrep db.BuildPreparation, versions *algorithm.VersionsDB) ([]db.BuildInput, db.BuildPreparation, string, error) { buildInputs := config.JobInputs(s.JobConfig) if versions == nil { for _, input := range buildInputs { buildPrep.Inputs[input.Name] = db.BuildPreparationStatusUnknown } err := s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-inputs", err } for _, input := range buildInputs { scanLog := logger.Session("scan", lager.Data{ "input": input.Name, "resource": input.Resource, }) buildPrep = s.cloneBuildPrep(buildPrep) buildPrep.Inputs[input.Name] = db.BuildPreparationStatusBlocking err := s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-blocking-input", err } err = s.Scanner.Scan(scanLog, input.Resource) if err != nil { return nil, buildPrep, "failed-to-scan", err } buildPrep = s.cloneBuildPrep(buildPrep) buildPrep.Inputs[input.Name] = db.BuildPreparationStatusNotBlocking err = s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-not-blocking-input", err } scanLog.Info("done") } loadStart := time.Now() vLog := logger.Session("loading-versions") vLog.Info("start") versions, err = s.DB.LoadVersionsDB() if err != nil { vLog.Error("failed", err) return nil, buildPrep, "failed-to-load-versions-db", err } vLog.Info("done", lager.Data{"took": time.Since(loadStart).String()}) } else { for _, input := range buildInputs { buildPrep.Inputs[input.Name] = db.BuildPreparationStatusNotBlocking } err := s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-discovered-inputs", err } } buildPrep.InputsSatisfied = db.BuildPreparationStatusBlocking err := s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-discovered-inputs", err } inputs, message, err := s.determineInputs(versions, buildInputs, build) if err != nil || message != "" { return nil, buildPrep, message, err } buildPrep.InputsSatisfied = db.BuildPreparationStatusNotBlocking err = s.DB.UpdateBuildPreparation(buildPrep) if err != nil { return nil, buildPrep, "failed-to-update-build-prep-with-inputs-satisfied", err } return inputs, buildPrep, "", nil }