Skip to content

feat: skip bulk build source change #4357

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Dec 15, 2023
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
17 changes: 10 additions & 7 deletions pkg/bean/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -187,10 +187,11 @@ const (
)

const (
NORMAL PipelineType = "NORMAL"
LINKED PipelineType = "LINKED"
EXTERNAL PipelineType = "EXTERNAL"
CI_JOB PipelineType = "CI_JOB"
NORMAL PipelineType = "NORMAL"
LINKED PipelineType = "LINKED"
EXTERNAL PipelineType = "EXTERNAL"
CI_JOB PipelineType = "CI_JOB"
LINKED_CD PipelineType = "LINKED_CD"
)

const (
Expand Down Expand Up @@ -220,6 +221,7 @@ const (
CI_PATCH_SUCCESS CiPatchStatus = "Succeeded"
CI_PATCH_FAILED CiPatchStatus = "Failed"
CI_PATCH_NOT_AUTHORIZED CiPatchStatus = "Not authorised"
CI_PATCH_SKIP CiPatchStatus = "Skipped"
)

type CiPatchMessage string
Expand All @@ -229,6 +231,7 @@ const (
CI_PATCH_MULTI_GIT_ERROR CiPatchMessage = "Build pipeline is connected to multiple git repositories"
CI_PATCH_REGEX_ERROR CiPatchMessage = "Provided branch does not match regex "
CI_BRANCH_TYPE_ERROR CiPatchMessage = "Branch cannot be changed for pipeline as source type is “Pull request or Tag”"
CI_PATCH_SKIP_MESSAGE CiPatchMessage = "Skipped for pipeline as source type is "
)

func (a PatchAction) String() string {
Expand Down Expand Up @@ -266,9 +269,9 @@ type CiMaterialBulkPatchResponse struct {
}

type CiMaterialPatchResponse struct {
AppId int `json:"appId"`
Status CiPatchStatus `json:"status"`
Message CiPatchMessage `json:"message"`
AppId int `json:"appId"`
Status CiPatchStatus `json:"status"`
Message string `json:"message"`
}

type CiPatchRequest struct {
Expand Down
23 changes: 22 additions & 1 deletion pkg/pipeline/CiCdPipelineOrchestrator.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,16 @@ func (impl CiCdPipelineOrchestratorImpl) PatchCiMaterialSourceValue(patchRequest
impl.logger.Errorw("Error in getting UniquePipelineForAppIdAndEnvironmentId", "appId", patchRequest.AppId, "envId", patchRequest.EnvironmentId, "err", err)
return nil, err
}

appWorkflowMapping, err := impl.appWorkflowRepository.GetParentDetailsByPipelineId(pipeline.Id)
if err != nil {
impl.logger.Errorw("failed to get parent component details",
"componentId", pipeline.Id,
"err", err)
return nil, err
}
if appWorkflowMapping.ParentType == appWorkflow.WEBHOOK {
return nil, errors.New(string(bean.CI_PATCH_SKIP_MESSAGE) + "“Webhook”")
}
ciPipelineMaterial, err := impl.findUniqueCiPipelineMaterial(pipeline.CiPipelineId)
if err != nil {
impl.logger.Errorw("Error in getting UniqueCiPipelineMaterial", "CiPipelineId", pipeline.CiPipelineId, "err", err)
Expand Down Expand Up @@ -243,6 +252,9 @@ func (impl CiCdPipelineOrchestratorImpl) validateCiPipelineMaterial(ciPipelineMa
return errors.New(string(bean.CI_BRANCH_TYPE_ERROR))
}

if ciPipelineMaterial.CiPipeline.ParentCiPipeline != 0 {
return errors.New(string(bean.CI_PATCH_SKIP_MESSAGE) + impl.getSkipMessage(ciPipelineMaterial.CiPipeline))
}
if ciPipelineMaterial.Regex != "" {
// Checking Trigger Access for Regex branch
if ok, err := checkAppSpecificAccess(token, casbin.ActionTrigger, appId); !ok {
Expand All @@ -268,6 +280,15 @@ func (impl CiCdPipelineOrchestratorImpl) validateCiPipelineMaterial(ciPipelineMa
return nil
}

func (impl CiCdPipelineOrchestratorImpl) getSkipMessage(ciPipeline *pipelineConfig.CiPipeline) string {
switch ciPipeline.PipelineType {
case string(bean.LINKED_CD):
return "“Sync with Environment”"
default:
return "“Linked Build Pipeline”"
}
}

func (impl CiCdPipelineOrchestratorImpl) findUniquePipelineForAppIdAndEnvironmentId(appId, environmentId int) (*pipelineConfig.Pipeline, error) {
pipeline, err := impl.pipelineRepository.FindActiveByAppIdAndEnvironmentId(appId, environmentId)
if err != nil {
Expand Down
7 changes: 5 additions & 2 deletions pkg/pipeline/PipelineBuilder.go
Original file line number Diff line number Diff line change
Expand Up @@ -196,14 +196,17 @@ func getPatchStatus(err error) bean.CiPatchStatus {
if err.Error() == string(bean.CI_PATCH_NOT_AUTHORIZED_MESSAGE) {
return bean.CI_PATCH_NOT_AUTHORIZED
}
if strings.Contains(err.Error(), string(bean.CI_PATCH_SKIP_MESSAGE)) {
return bean.CI_PATCH_SKIP
}
return bean.CI_PATCH_FAILED
}
return bean.CI_PATCH_SUCCESS
}

func getPatchMessage(err error) bean.CiPatchMessage {
func getPatchMessage(err error) string {
if err != nil {
return bean.CiPatchMessage(err.Error())
return err.Error()
}
return ""
}
Expand Down