Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 18 additions & 38 deletions pkg/appClone/AppCloneService.go
Original file line number Diff line number Diff line change
Expand Up @@ -162,7 +162,7 @@ func (impl *AppCloneServiceImpl) CloneApp(createReq *bean.CreateAppDTO, context
return nil, err
}

_, err = impl.CreateCiTemplate(cloneReq.RefAppId, newAppId, userId)
_, err = impl.CreateCiTemplate(cloneReq.RefAppId, newAppId, userId, gitMaerialMap)
if err != nil {
impl.logger.Errorw("error in cloning docker template", "ref", cloneReq.RefAppId, "new", newAppId, "err", err)
return nil, err
Expand Down Expand Up @@ -264,54 +264,34 @@ func (impl *AppCloneServiceImpl) CloneGitRepo(oldAppId, newAppId int, userId int
return createMaterial, gitMaterialsMap, err
}

func (impl *AppCloneServiceImpl) CreateCiTemplate(oldAppId, newAppId int, userId int32) (*bean.PipelineCreateResponse, error) {
func (impl *AppCloneServiceImpl) CreateCiTemplate(oldAppId, newAppId int, userId int32, gitMaterialMap map[int]int) (*bean.PipelineCreateResponse, error) {
refCiConf, err := impl.pipelineBuilder.GetCiPipeline(oldAppId)
if err != nil {
return nil, err
}
gitMaterials, err := impl.materialRepository.FindByAppId(newAppId)
if err != nil {
impl.logger.Errorw("error in fetching git materials", "appID", newAppId, "err", err)
return nil, err
}
if len(gitMaterials) == 0 {
if gitMaterialMap == nil || len(gitMaterialMap) == 0 {
return nil, fmt.Errorf("no git for %d", newAppId)
}
dockerfileGitMaterial := 0
if len(gitMaterials) == 1 {
dockerfileGitMaterial = gitMaterials[0].Id
} else {
refGitmaterial, err := impl.materialRepository.FindById(refCiConf.CiBuildConfig.GitMaterialId)
if err != nil {
impl.logger.Errorw("error in fetching ref git material", "id", refCiConf.CiBuildConfig.GitMaterialId, "err", err)
return nil, err
}
//first repo with same checkout path
if dockerfileGitMaterial == 0 {
for _, gitMaterial := range gitMaterials {
if gitMaterial.CheckoutPath == refGitmaterial.CheckoutPath {
dockerfileGitMaterial = gitMaterial.Id
break
}
}
}
// first repo with same url
if dockerfileGitMaterial == 0 {
for _, gitMaterial := range gitMaterials {
if gitMaterial.Url == refGitmaterial.Url {
dockerfileGitMaterial = gitMaterial.Id
break
}
}
}
//take first
if dockerfileGitMaterial == 0 {
dockerfileGitMaterial = gitMaterials[0].Id

//gitMaterialMap contains the mappings for old app git-material-id -> new app git-material-id
dockerfileGitMaterial := gitMaterialMap[refCiConf.CiBuildConfig.GitMaterialId]
buildContextGitMaterial := gitMaterialMap[refCiConf.CiBuildConfig.BuildContextGitMaterialId]
//this might be possible if build-configuration is not set in the old app.
if dockerfileGitMaterial == 0 {
//set the dockerfileGitMaterial to first material in the map
for _, newAppMaterialId := range gitMaterialMap {
dockerfileGitMaterial = newAppMaterialId
break
}
}
//if buildContextGitMaterial not found set to build context repo to dockerfile git repo
if buildContextGitMaterial == 0 {
buildContextGitMaterial = dockerfileGitMaterial
}

ciBuildConfig := refCiConf.CiBuildConfig
ciBuildConfig.GitMaterialId = dockerfileGitMaterial
ciBuildConfig.BuildContextGitMaterialId = buildContextGitMaterial
ciConfRequest := &bean.CiConfigRequest{
Id: 0,
AppId: newAppId,
Expand Down
2 changes: 1 addition & 1 deletion pkg/pipeline/PipelineBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -457,7 +457,7 @@ func (impl PipelineBuilderImpl) GetMaterialsForAppId(appId int) []*bean.GitMater
//check if git material is deletable or not
if ciTemplateBean != nil {
ciTemplate := ciTemplateBean.CiTemplate
if ciTemplate != nil && ciTemplate.GitMaterialId == material.Id {
if ciTemplate != nil && (ciTemplate.GitMaterialId == material.Id || ciTemplate.BuildContextGitMaterialId == material.Id) {
gitMaterial.IsUsedInCiConfig = true
}
}
Expand Down