Beispiel #1
0
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
}