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
3 changes: 2 additions & 1 deletion client/cron/CiTriggerCron.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"fmt"
"github.com/caarlos0/env"
repository2 "github.com/devtron-labs/devtron/internal/sql/repository"
bean2 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
"github.com/devtron-labs/devtron/pkg/bean"
pipelineConfigBean "github.com/devtron-labs/devtron/pkg/build/pipeline/bean"
"github.com/devtron-labs/devtron/pkg/pipeline"
Expand Down Expand Up @@ -98,7 +99,7 @@ func (impl *CiTriggerCronImpl) TriggerCiCron() {
ciTriggerRequest := bean.CiTriggerRequest{
PipelineId: ciPipelineId,
CiPipelineMaterial: ciPipelineMaterials,
TriggeredBy: 1,
TriggeredBy: bean2.SYSTEM_USER_ID,
InvalidateCache: false,
PipelineType: string(pipelineConfigBean.CI_JOB),
}
Expand Down
4 changes: 0 additions & 4 deletions internal/sql/repository/app/AppRepository.go
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,6 @@ func (app *App) IsEmpty() bool {
return app.Id == 0
}

const (
SYSTEM_USER_ID = 1
)

func (app *App) IsAppJobOrExternalType() bool {
return len(app.DisplayName) > 0
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/build/git/gitWebhook/GitWebhookService.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import (
"github.com/devtron-labs/devtron/client/gitSensor"
"github.com/devtron-labs/devtron/internal/sql/constants"
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
bean2 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
"github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/build/git/gitWebhook/repository"
"github.com/devtron-labs/devtron/pkg/pipeline"
Expand Down Expand Up @@ -71,7 +72,7 @@ func (impl *GitWebhookServiceImpl) HandleGitWebhook(gitWebhookRequest gitSensor.

resp, err := impl.ciHandler.HandleCIWebhook(bean.GitCiTriggerRequest{
CiPipelineMaterial: ciPipelineMaterial,
TriggeredBy: 1, // Automatic trigger, userId is 1
TriggeredBy: bean2.SYSTEM_USER_ID, // Automatic trigger, system user
ExtraEnvironmentVariables: gitWebhookRequest.ExtraEnvironmentVariables,
})
if err != nil {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ import (
"github.com/devtron-labs/devtron/internal/util"
bean6 "github.com/devtron-labs/devtron/pkg/app/bean"
attributesBean "github.com/devtron-labs/devtron/pkg/attributes/bean"
bean7 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
bean4 "github.com/devtron-labs/devtron/pkg/bean"
"github.com/devtron-labs/devtron/pkg/bean/common"
repository4 "github.com/devtron-labs/devtron/pkg/cluster/environment/repository"
Expand Down Expand Up @@ -177,7 +178,7 @@ func (impl *TriggerServiceImpl) TriggerPreStage(request bean.TriggerRequest) (*b
return manifestPushTemplate, nil
}

func (impl *TriggerServiceImpl) TriggerAutoCDOnPreStageSuccess(triggerContext bean.TriggerContext, cdPipelineId, ciArtifactId, workflowId int, triggerdBy int32) error {
func (impl *TriggerServiceImpl) TriggerAutoCDOnPreStageSuccess(triggerContext bean.TriggerContext, cdPipelineId, ciArtifactId, workflowId int) error {
pipeline, err := impl.pipelineRepository.FindById(cdPipelineId)
if err != nil {
return err
Expand All @@ -204,7 +205,7 @@ func (impl *TriggerServiceImpl) TriggerAutoCDOnPreStageSuccess(triggerContext be
CdWf: cdWorkflow,
Pipeline: pipeline,
Artifact: ciArtifact,
TriggeredBy: triggerdBy,
TriggeredBy: bean7.SYSTEM_USER_ID,
TriggerContext: triggerContext,
}

Expand Down
26 changes: 12 additions & 14 deletions pkg/deployment/trigger/devtronApps/TriggerService.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,7 @@ type TriggerService interface {
TriggerPostStage(request bean.TriggerRequest) (*bean4.ManifestPushTemplate, error)
TriggerPreStage(request bean.TriggerRequest) (*bean4.ManifestPushTemplate, error)

TriggerAutoCDOnPreStageSuccess(triggerContext bean.TriggerContext, cdPipelineId, ciArtifactId, workflowId int, triggerdBy int32) error
TriggerAutoCDOnPreStageSuccess(triggerContext bean.TriggerContext, cdPipelineId, ciArtifactId, workflowId int) error

TriggerStageForBulk(triggerRequest bean.TriggerRequest) error

Expand Down Expand Up @@ -646,7 +646,7 @@ func (impl *TriggerServiceImpl) TriggerAutomaticDeployment(request bean.TriggerR
WorkflowType: bean3.CD_WORKFLOW_TYPE_DEPLOY,
ExecutorType: cdWorkflow.WORKFLOW_EXECUTOR_TYPE_SYSTEM,
Status: cdWorkflow.WorkflowInitiated, // deployment Initiated for auto trigger
TriggeredBy: 1,
TriggeredBy: triggeredBy,
StartedOn: triggeredAt,
Namespace: impl.config.GetDefaultNamespace(),
CdWorkflowId: cdWf.Id,
Expand Down Expand Up @@ -677,13 +677,12 @@ func (impl *TriggerServiceImpl) TriggerAutomaticDeployment(request bean.TriggerR
impl.logger.Errorw("error in fetching environment deployment config by appId and envId", "appId", pipeline.AppId, "envId", pipeline.EnvironmentId, "err", err)
return err
}
// setting triggeredBy as 1(system user) since case of auto trigger
validationErr := impl.validateDeploymentTriggerRequest(ctx, adapter.NewValidateDeploymentTriggerObj(runner, pipeline, artifact.ImageDigest, envDeploymentConfig, 1, false))
validationErr := impl.validateDeploymentTriggerRequest(ctx, adapter.NewValidateDeploymentTriggerObj(runner, pipeline, artifact.ImageDigest, envDeploymentConfig, triggeredBy, false))
if validationErr != nil {
impl.logger.Errorw("validation error deployment request", "cdWfr", runner.Id, "err", validationErr)
return validationErr
}
releaseErr := impl.TriggerCD(ctx, artifact, cdWf.Id, savedWfr.Id, pipeline, envDeploymentConfig, triggeredAt)
releaseErr := impl.TriggerCD(ctx, artifact, cdWf.Id, savedWfr.Id, pipeline, envDeploymentConfig, triggeredAt, triggeredBy)
// if releaseErr found, then the mark current deployment Failed and return
if releaseErr != nil {
err := impl.cdWorkflowCommonService.MarkCurrentDeploymentFailed(runner, releaseErr, triggeredBy)
Expand All @@ -695,38 +694,38 @@ func (impl *TriggerServiceImpl) TriggerAutomaticDeployment(request bean.TriggerR
return nil
}

func (impl *TriggerServiceImpl) TriggerCD(ctx context.Context, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, triggeredAt time.Time) error {
func (impl *TriggerServiceImpl) TriggerCD(ctx context.Context, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, triggeredAt time.Time, triggeredBy int32) error {
impl.logger.Debugw("automatic pipeline trigger attempt async", "artifactId", artifact.Id)
err := impl.triggerReleaseAsync(ctx, artifact, cdWorkflowId, wfrId, pipeline, envDeploymentConfig, triggeredAt)
err := impl.triggerReleaseAsync(ctx, artifact, cdWorkflowId, wfrId, pipeline, envDeploymentConfig, triggeredAt, triggeredBy)
if err != nil {
impl.logger.Errorw("error in cd trigger", "err", err)
return err
}
return err
}

func (impl *TriggerServiceImpl) triggerReleaseAsync(ctx context.Context, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, triggeredAt time.Time) error {
err := impl.validateAndTrigger(ctx, pipeline, envDeploymentConfig, artifact, cdWorkflowId, wfrId, triggeredAt)
func (impl *TriggerServiceImpl) triggerReleaseAsync(ctx context.Context, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, triggeredAt time.Time, triggeredBy int32) error {
err := impl.validateAndTrigger(ctx, pipeline, envDeploymentConfig, artifact, cdWorkflowId, wfrId, triggeredAt, triggeredBy)
if err != nil {
impl.logger.Errorw("error in trigger for pipeline", "pipelineId", strconv.Itoa(pipeline.Id))
}
impl.logger.Debugw("trigger attempted for all pipeline ", "artifactId", artifact.Id)
return err
}

func (impl *TriggerServiceImpl) validateAndTrigger(ctx context.Context, p *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, triggeredAt time.Time) error {
func (impl *TriggerServiceImpl) validateAndTrigger(ctx context.Context, p *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, triggeredAt time.Time, triggeredBy int32) error {
//TODO: verify this logic
object := impl.enforcerUtil.GetAppRBACNameByAppId(p.AppId)
envApp := strings.Split(object, "/")
if len(envApp) != 2 {
impl.logger.Error("invalid req, app and env not found from rbac")
return errors.New("invalid req, app and env not found from rbac")
}
err := impl.releasePipeline(ctx, p, envDeploymentConfig, artifact, cdWorkflowId, wfrId, triggeredAt)
err := impl.releasePipeline(ctx, p, envDeploymentConfig, artifact, cdWorkflowId, wfrId, triggeredAt, triggeredBy)
return err
}

func (impl *TriggerServiceImpl) releasePipeline(ctx context.Context, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, triggeredAt time.Time) error {
func (impl *TriggerServiceImpl) releasePipeline(ctx context.Context, pipeline *pipelineConfig.Pipeline, envDeploymentConfig *bean9.DeploymentConfig, artifact *repository3.CiArtifact, cdWorkflowId, wfrId int, triggeredAt time.Time, triggeredBy int32) error {
startTime := time.Now()
defer func() {
impl.logger.Debugw("auto trigger release process completed", "timeTaken", time.Since(startTime), "cdPipelineId", pipeline.Id, "artifactId", artifact.Id, "wfrId", wfrId)
Expand All @@ -751,8 +750,7 @@ func (impl *TriggerServiceImpl) releasePipeline(ctx context.Context, pipeline *p

adapter.SetPipelineFieldsInOverrideRequest(request, pipeline, envDeploymentConfig)

// setting deployedBy as 1(system user) since case of auto trigger
id, _, err := impl.handleCDTriggerRelease(ctx, request, envDeploymentConfig, triggeredAt, 1)
id, _, err := impl.handleCDTriggerRelease(ctx, request, envDeploymentConfig, triggeredAt, triggeredBy)
if err != nil {
impl.logger.Errorw("error in auto cd pipeline trigger", "pipelineId", pipeline.Id, "artifactId", artifact.Id, "err", err)
} else {
Expand Down
2 changes: 1 addition & 1 deletion pkg/eventProcessor/in/WorkflowEventProcessorService.go
Original file line number Diff line number Diff line change
Expand Up @@ -316,7 +316,7 @@ func (impl *WorkflowEventProcessorImpl) SubscribeTriggerBulkAction() error {
CdWf: adapter.ConvertCdWorkflowDtoToDbObj(wf), //TODO: update object from db to dto
Artifact: artifact,
Pipeline: pipelineObj,
TriggeredBy: cdWorkflow.CreatedBy,
TriggeredBy: cdWorkflow.CreatedBy, //actual request sent by user who created initial workflow, and then nats event is sent
ApplyAuth: false,
TriggerContext: triggerContext,
}
Expand Down
3 changes: 2 additions & 1 deletion pkg/pipeline/CiHandler.go
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ import (
"github.com/devtron-labs/common-lib/utils/workFlow"
"github.com/devtron-labs/devtron/internal/sql/constants"
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
bean6 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
"github.com/devtron-labs/devtron/pkg/bean/common"
"github.com/devtron-labs/devtron/pkg/build/artifacts/imageTagging"
bean4 "github.com/devtron-labs/devtron/pkg/build/pipeline/bean"
Expand Down Expand Up @@ -222,7 +223,7 @@ func (impl *CiHandlerImpl) reTriggerCi(retryCount int, refCiWorkflow *pipelineCo
}

trigger := types.Trigger{}
trigger.BuildTriggerObject(refCiWorkflow, ciMaterials, 1, true, nil, "")
trigger.BuildTriggerObject(refCiWorkflow, ciMaterials, bean6.SYSTEM_USER_ID, true, nil, "")
_, err = impl.ciService.TriggerCiPipeline(trigger)

if err != nil {
Expand Down
15 changes: 8 additions & 7 deletions pkg/workflow/dag/WorkflowDagExecutor.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ import (
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow"
cdWorkflow2 "github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
"github.com/devtron-labs/devtron/pkg/app/status"
bean7 "github.com/devtron-labs/devtron/pkg/auth/user/bean"
"github.com/devtron-labs/devtron/pkg/build/artifacts"
bean5 "github.com/devtron-labs/devtron/pkg/build/pipeline/bean"
common2 "github.com/devtron-labs/devtron/pkg/deployment/common"
Expand Down Expand Up @@ -240,7 +241,7 @@ func (impl *WorkflowDagExecutorImpl) HandleCdStageReTrigger(runner *pipelineConf
CdWf: runner.CdWorkflow,
Pipeline: runner.CdWorkflow.Pipeline,
Artifact: runner.CdWorkflow.CiArtifact,
TriggeredBy: 1,
TriggeredBy: bean7.SYSTEM_USER_ID,
ApplyAuth: false,
RefCdWorkflowRunnerId: runner.Id,
TriggerContext: triggerBean.TriggerContext{
Expand Down Expand Up @@ -519,7 +520,6 @@ func (impl *WorkflowDagExecutorImpl) deleteCorruptedPipelineStage(pipelineStage
}

func (impl *WorkflowDagExecutorImpl) triggerIfAutoStageCdPipeline(request triggerBean.TriggerRequest) error {

preStage, err := impl.getPipelineStage(request.Pipeline.Id, repository4.PIPELINE_STAGE_TYPE_PRE_CD)
if err != nil {
return err
Expand All @@ -533,6 +533,8 @@ func (impl *WorkflowDagExecutorImpl) triggerIfAutoStageCdPipeline(request trigge
}

request.TriggerContext.Context = context.Background()
//for auto stage setting triggeredBy to system user no matter where the request came from
request.TriggeredBy = bean7.SYSTEM_USER_ID
if len(request.Pipeline.PreStageConfig) > 0 || (preStage != nil && !deleted) {
// pre stage exists
if request.Pipeline.PreTriggerType == pipelineConfig.TRIGGER_TYPE_AUTOMATIC {
Expand Down Expand Up @@ -613,7 +615,7 @@ func (impl *WorkflowDagExecutorImpl) HandlePreStageSuccessEvent(triggerContext t
} else {
ciArtifactId = cdStageCompleteEvent.CiArtifactDTO.Id
}
err = impl.cdTriggerService.TriggerAutoCDOnPreStageSuccess(triggerContext, cdStageCompleteEvent.CdPipelineId, ciArtifactId, cdStageCompleteEvent.WorkflowId, cdStageCompleteEvent.TriggeredBy)
err = impl.cdTriggerService.TriggerAutoCDOnPreStageSuccess(triggerContext, cdStageCompleteEvent.CdPipelineId, ciArtifactId, cdStageCompleteEvent.WorkflowId)
if err != nil {
impl.logger.Errorw("error in triggering cd on pre cd succcess", "err", err)
return err
Expand All @@ -637,11 +639,10 @@ func (impl *WorkflowDagExecutorImpl) HandleDeploymentSuccessEvent(triggerContext
return err
}

var triggeredByUser int32 = 1
//handle corrupt data (https://github.com/devtron-labs/devtron/issues/3826)
err, deleted := impl.deleteCorruptedPipelineStage(postStage, triggeredByUser)
err, deleted := impl.deleteCorruptedPipelineStage(postStage, bean7.SYSTEM_USER_ID)
if err != nil {
impl.logger.Errorw("error in deleteCorruptedPipelineStage ", "err", err, "preStage", postStage, "triggeredBy", triggeredByUser)
impl.logger.Errorw("error in deleteCorruptedPipelineStage ", "err", err, "preStage", postStage)
return err
}

Expand All @@ -653,7 +654,7 @@ func (impl *WorkflowDagExecutorImpl) HandleDeploymentSuccessEvent(triggerContext
triggerRequest := triggerBean.TriggerRequest{
CdWf: cdWorkflow,
Pipeline: pipelineOverride.Pipeline,
TriggeredBy: triggeredByUser,
TriggeredBy: bean7.SYSTEM_USER_ID,
TriggerContext: triggerContext,
RefCdWorkflowRunnerId: 0,
}
Expand Down
2 changes: 1 addition & 1 deletion wire_gen.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Loading