diff --git a/pkg/bulkAction/BulkUpdateService.go b/pkg/bulkAction/BulkUpdateService.go index 8f22cdc2f8..0dfc9ebf2f 100644 --- a/pkg/bulkAction/BulkUpdateService.go +++ b/pkg/bulkAction/BulkUpdateService.go @@ -4,6 +4,7 @@ import ( "context" "encoding/base64" "encoding/json" + "errors" "fmt" pubsub "github.com/devtron-labs/common-lib/pubsub-lib" "github.com/devtron-labs/devtron/api/bean" @@ -1149,9 +1150,46 @@ func (impl BulkUpdateServiceImpl) BulkUnHibernate(request *BulkApplicationForEnv bulkOperationResponse.Response = response return bulkOperationResponse, nil } + func (impl BulkUpdateServiceImpl) BulkDeploy(request *BulkApplicationForEnvironmentPayload, emailId string, checkAuthBatch func(emailId string, appObject []string, envObject []string) (map[string]bool, map[string]bool)) (*BulkApplicationForEnvironmentResponse, error) { var pipelines []*pipelineConfig.Pipeline var err error + + if len(request.AppNamesIncludes) > 0 { + r, err := impl.appRepository.FindIdsByNames(request.AppNamesIncludes) + if err != nil { + impl.logger.Errorw("error in fetching Ids", "err", err) + return nil, err + } + for _, id := range r { + request.AppIdIncludes = append(request.AppIdIncludes, id) + } + } + if len(request.AppNamesExcludes) > 0 { + r, err := impl.appRepository.FindIdsByNames(request.AppNamesExcludes) + if err != nil { + impl.logger.Errorw("error in fetching Ids", "err", err) + return nil, err + } + for _, id := range r { + request.AppIdExcludes = append(request.AppIdExcludes, id) + } + } + if len(request.EnvName) > 0 { + r, err := impl.environmentRepository.FindByName(request.EnvName) + if err != nil { + impl.logger.Errorw("error in fetching env details", "err", err) + return nil, err + } + if request.EnvId != 0 && request.EnvId != r.Id { + return nil, errors.New("environment id and environment name is different select only one environment") + } else if request.EnvId == 0 { + request.EnvId = r.Id + } + } + if len(request.EnvName) == 0 && request.EnvId == 0 { + return nil, errors.New("please mention environment id or environment name") + } if len(request.AppIdIncludes) > 0 { pipelines, err = impl.pipelineRepository.FindActiveByInFilter(request.EnvId, request.AppIdIncludes) } else if len(request.AppIdExcludes) > 0 { diff --git a/pkg/bulkAction/bean.go b/pkg/bulkAction/bean.go index 3b8fbb1945..9d6aa262a8 100644 --- a/pkg/bulkAction/bean.go +++ b/pkg/bulkAction/bean.go @@ -82,11 +82,14 @@ type CmAndSecretBulkUpdateResponse struct { } type BulkApplicationForEnvironmentPayload struct { - AppIdIncludes []int `json:"appIdIncludes,omitempty"` - AppIdExcludes []int `json:"appIdExcludes,omitempty"` - EnvId int `json:"envId"` - UserId int32 `json:"-"` - InvalidateCache bool `json:"invalidateCache"` + AppIdIncludes []int `json:"appIdIncludes,omitempty"` + AppIdExcludes []int `json:"appIdExcludes,omitempty"` + EnvId int `json:"envId,omitempty"` + EnvName string `json:"envName,omitempty"` + AppNamesIncludes []string `json:"appNamesIncludes,omitempty"` + AppNamesExcludes []string `json:"appNamesExcludes,omitempty"` + UserId int32 `json:"-"` + InvalidateCache bool `json:"invalidateCache"` } type BulkApplicationForEnvironmentResponse struct {