in backend/plugins/bamboo/impl/impl.go [120:189]
func (p Bamboo) PrepareTaskData(taskCtx plugin.TaskContext, options map[string]interface{}) (interface{}, errors.Error) {
logger := taskCtx.GetLogger()
logger.Debug("%v", options)
op, err := tasks.DecodeAndValidateTaskOptions(options)
if err != nil {
return nil, err
}
connectionHelper := helper.NewConnectionHelper(
taskCtx,
nil,
p.Name(),
)
connection := &models.BambooConnection{}
err = connectionHelper.FirstById(connection, op.ConnectionId)
if err != nil {
return nil, errors.Default.Wrap(err, "unable to get Bamboo connection by the given connection ID")
}
apiClient, err := tasks.NewBambooApiClient(taskCtx, connection)
if err != nil {
return nil, errors.Default.Wrap(err, "unable to get Bamboo API client instance")
}
if op.PlanKey != "" {
var scope *models.BambooPlan
// support v100 & advance mode
// If we still cannot find the record in db, we have to request from remote server and save it to db
db := taskCtx.GetDal()
err = db.First(&scope, dal.Where("connection_id = ? AND plan_key = ?", op.ConnectionId, op.PlanKey))
if err != nil {
return nil, err
}
op.ScopeConfigId = scope.ScopeConfigId
if err != nil {
return nil, errors.Default.Wrap(err, fmt.Sprintf("fail to find plan: %s", op.PlanKey))
}
}
if op.BambooScopeConfig == nil && op.ScopeConfigId != 0 {
var scopeConfig models.BambooScopeConfig
db := taskCtx.GetDal()
err = db.First(&scopeConfig, dal.Where("id = ?", op.ScopeConfigId))
if err != nil {
if db.IsErrorNotFound(err) {
return nil, errors.Default.Wrap(err, fmt.Sprintf("can not find scopeConfig by scopeConfigId [%d]", op.ScopeConfigId))
}
return nil, errors.Default.Wrap(err, fmt.Sprintf("fail to find scopeConfig by scopeConfigId [%d]", op.ScopeConfigId))
}
op.BambooScopeConfig = &scopeConfig
}
if op.BambooScopeConfig == nil && op.ScopeConfigId == 0 {
op.BambooScopeConfig = new(models.BambooScopeConfig)
}
regexEnricher := helper.NewRegexEnricher()
if err := regexEnricher.TryAdd(devops.DEPLOYMENT, op.DeploymentPattern); err != nil {
return nil, errors.BadInput.Wrap(err, "invalid value for `deploymentPattern`")
}
if err := regexEnricher.TryAdd(devops.PRODUCTION, op.ProductionPattern); err != nil {
return nil, errors.BadInput.Wrap(err, "invalid value for `productionPattern`")
}
if err := regexEnricher.TryAdd(models.ENV_NAME_PATTERN, op.EnvNamePattern); err != nil {
return nil, errors.BadInput.Wrap(err, "invalid value for `envNamePattern`")
}
return &tasks.BambooTaskData{
Options: op,
ApiClient: apiClient,
RegexEnricher: regexEnricher,
}, nil
}