@@ -20,6 +20,7 @@ package appWorkflow
2020import (
2121 "errors"
2222 "fmt"
23+ util2 "github.com/devtron-labs/devtron/util"
2324 "time"
2425
2526 mapset "github.com/deckarep/golang-set"
@@ -59,7 +60,7 @@ type AppWorkflowService interface {
5960 FindAppWorkflowMappingByComponent (id int , compType string ) ([]* appWorkflow.AppWorkflowMapping , error )
6061 CheckCdPipelineByCiPipelineId (id int ) bool
6162 FindAppWorkflowByName (name string , appId int ) (AppWorkflowDto , error )
62-
63+ IsWorkflowNameFound ( workflowName string , appId int ) ( bool , error )
6364 FindAllWorkflowsComponentDetails (appId int ) (* AllAppWorkflowComponentDetails , error )
6465 FindAppWorkflowsByEnvironmentId (request resourceGroup2.ResourceGroupingRequest , token string ) ([]* AppWorkflowDto , error )
6566 FindAllWorkflowsForApps (request WorkflowNamesRequest ) (* WorkflowNamesResponse , error )
@@ -178,7 +179,10 @@ func (impl AppWorkflowServiceImpl) CreateAppWorkflow(req AppWorkflowDto) (AppWor
178179 var wf * appWorkflow.AppWorkflow
179180 var savedAppWf * appWorkflow.AppWorkflow
180181 var err error
181-
182+ ok , err := impl .IsWorkflowNameFound (req .Name , req .AppId )
183+ if err != nil {
184+ return req , err
185+ }
182186 if req .Id != 0 {
183187 wf = & appWorkflow.AppWorkflow {
184188 Id : req .Id ,
@@ -189,19 +193,20 @@ func (impl AppWorkflowServiceImpl) CreateAppWorkflow(req AppWorkflowDto) (AppWor
189193 UpdatedBy : req .UserId ,
190194 },
191195 }
192- savedAppWf , err = impl .appWorkflowRepository .UpdateAppWorkflow (wf )
193- } else {
194- workflow , err := impl .appWorkflowRepository .FindByNameAndAppId (req .Name , req .AppId )
195- if err != nil && err != pg .ErrNoRows {
196- impl .Logger .Errorw ("error in finding workflow by app id and name" , "name" , req .Name , "appId" , req .AppId )
197- return req , err
198- }
199- if workflow .Id != 0 {
196+ // if workflow name already exists then we will not allow update workflow name with same name
197+ if ok {
200198 impl .Logger .Errorw ("workflow with this name already exist" , "err" , err )
201199 return req , errors .New (bean2 .WORKFLOW_EXIST_ERROR )
202200 }
201+ savedAppWf , err = impl .appWorkflowRepository .UpdateAppWorkflow (wf )
202+ } else {
203+ workflowName := req .Name
204+ // if workflow already exists then we will assign a new name to the workflow
205+ if ok {
206+ workflowName = util2 .GenerateNewWorkflowName (workflowName )
207+ }
203208 wf := & appWorkflow.AppWorkflow {
204- Name : req . Name ,
209+ Name : workflowName ,
205210 AppId : req .AppId ,
206211 Active : true ,
207212 AuditLog : sql.AuditLog {
@@ -911,3 +916,15 @@ func getMappingsFromIds(identifierToNodeMapping map[PipelineIdentifier]*AppWorkf
911916 }
912917 return result
913918}
919+
920+ func (impl AppWorkflowServiceImpl ) IsWorkflowNameFound (workflowName string , appId int ) (bool , error ) {
921+ workflow , err := impl .appWorkflowRepository .FindByNameAndAppId (workflowName , appId )
922+ if err != nil && ! errors .Is (err , pg .ErrNoRows ) && ! errors .Is (err , pg .ErrMultiRows ) {
923+ impl .Logger .Errorw ("error in finding workflow by app id and name" , "name" , workflowName , "appId" , appId )
924+ return false , err
925+ }
926+ if workflow .Id != 0 {
927+ return true , nil
928+ }
929+ return false , nil
930+ }
0 commit comments