Skip to content

Commit 19519af

Browse files
committed
Merge branch 'develop' of github.com:devtron-labs/devtron into cdworkflow-runner-read
2 parents cc7470e + 6b42cf6 commit 19519af

File tree

13 files changed

+252
-37
lines changed

13 files changed

+252
-37
lines changed

cmd/external-app/wire_gen.go

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

internal/sql/repository/CiArtifactRepository.go

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,8 @@ type CiArtifactRepository interface {
139139
// MigrateToWebHookDataSourceType is used for backward compatibility. It'll migrate the deprecated DataSource type
140140
MigrateToWebHookDataSourceType(id int) error
141141
UpdateLatestTimestamp(artifactIds []int) error
142+
143+
Update(ciArtifact *CiArtifact) error
142144
}
143145

144146
type CiArtifactRepositoryImpl struct {
@@ -858,3 +860,12 @@ func (impl CiArtifactRepositoryImpl) FindCiArtifactByImagePaths(images []string)
858860
}
859861
return ciArtifacts, nil
860862
}
863+
864+
func (impl CiArtifactRepositoryImpl) Update(ciArtifact *CiArtifact) error {
865+
err := impl.dbConnection.Update(ciArtifact)
866+
if err != nil {
867+
impl.logger.Errorw("error in updating ciArtifact", "ciArtifact", ciArtifact, "err", err)
868+
return err
869+
}
870+
return nil
871+
}

pkg/eventProcessor/bean/workflowEventBean.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ type CiCompleteEvent struct {
8282
ImageDetailsFromCR json.RawMessage `json:"imageDetailsFromCR"`
8383
PluginRegistryArtifactDetails map[string][]string `json:"PluginRegistryArtifactDetails"`
8484
PluginArtifactStage string `json:"pluginArtifactStage"`
85+
IsScanEnabled bool `json:"isScanEnabled"`
8586
pluginImageDetails *registry.ImageDetailsFromCR
8687
PluginArtifacts *PluginArtifacts `json:"pluginArtifacts"`
8788
}

pkg/eventProcessor/in/WorkflowEventProcessorService.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,7 @@ func (impl *WorkflowEventProcessorImpl) BuildCiArtifactRequest(event bean.CiComp
685685
IsArtifactUploaded: event.IsArtifactUploaded,
686686
PluginRegistryArtifactDetails: pluginArtifacts,
687687
PluginArtifactStage: event.PluginArtifactStage,
688+
IsScanEnabled: event.IsScanEnabled,
688689
}
689690
// if DataSource is empty, repository.WEBHOOK is considered as default
690691
if request.DataSource == "" {

pkg/pipeline/PipelineStageService.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@ type PipelineStageService interface {
5050
// , there was a bug(https://github.com/devtron-labs/devtron/issues/3826) where we were not deleting pipeline stage entry even after deleting all the pipelineStageSteps
5151
// , this will delete those pipelineStage entry
5252
DeletePipelineStageIfReq(stageReq *bean.PipelineStageDto, userId int32) (error, bool)
53+
IsScanPluginConfiguredAtPipelineStage(pipelineId int, pipelineStage repository.PipelineStageType, pluginName string) (bool, error)
5354
}
5455

5556
func NewPipelineStageService(logger *zap.SugaredLogger,
@@ -2168,3 +2169,20 @@ func (impl *PipelineStageServiceImpl) extractAndMapScopedVariables(stageReq *bea
21682169
return impl.scopedVariableManager.ExtractAndMapVariables(string(requestJson), stageReq.Id, repository3.EntityTypePipelineStage, userId, tx)
21692170

21702171
}
2172+
2173+
func (impl *PipelineStageServiceImpl) IsScanPluginConfiguredAtPipelineStage(pipelineId int, pipelineStage repository.PipelineStageType, pluginName string) (bool, error) {
2174+
plugin, err := impl.globalPluginRepository.GetPluginByName(pluginName)
2175+
if err != nil {
2176+
impl.logger.Errorw("error in getting image scanning plugin, Vulnerability Scanning", "pipelineId", pipelineId, "pipelineStage", pipelineStage, "err", err)
2177+
return false, err
2178+
}
2179+
if len(plugin) == 0 {
2180+
return false, nil
2181+
}
2182+
isScanPluginConfigured, err := impl.pipelineStageRepository.CheckIfPluginExistsInPipelineStage(pipelineId, pipelineStage, plugin[0].Id)
2183+
if err != nil {
2184+
impl.logger.Errorw("error in getting ci pipeline plugin", "err", err, "pipelineId", pipelineId, "pluginId", plugin[0].Id)
2185+
return false, err
2186+
}
2187+
return isScanPluginConfigured, nil
2188+
}

pkg/pipeline/repository/PipelineStageRepository.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,22 @@ const (
5353
PIPELINE_STAGE_STEP_VARIABLE_FORMAT_TYPE_DATE PipelineStageStepVariableFormatType = "DATE"
5454
)
5555

56+
func (r PipelineStageType) ToString() string {
57+
return string(r)
58+
}
59+
func (r PipelineStageType) IsStageTypePreCi() bool {
60+
return r == PIPELINE_STAGE_TYPE_PRE_CI
61+
}
62+
func (r PipelineStageType) IsStageTypePreCd() bool {
63+
return r == PIPELINE_STAGE_TYPE_PRE_CD
64+
}
65+
func (r PipelineStageType) IsStageTypePostCi() bool {
66+
return r == PIPELINE_STAGE_TYPE_POST_CI
67+
}
68+
func (r PipelineStageType) IsStageTypePostCd() bool {
69+
return r == PIPELINE_STAGE_TYPE_POST_CD
70+
}
71+
5672
type PipelineStage struct {
5773
tableName struct{} `sql:"pipeline_stage" pg:",discard_unknown_columns"`
5874
Id int `sql:"id,pk"`
@@ -184,6 +200,7 @@ type PipelineStageRepository interface {
184200
MarkStepsDeletedByStageId(stageId int) error
185201
MarkStepsDeletedExcludingActiveStepsInUpdateReq(activeStepIdsPresentInReq []int, stageId int) error
186202
GetActiveStepsByRefPluginId(refPluginId int) ([]*PipelineStageStep, error)
203+
CheckIfPluginExistsInPipelineStage(pipelineId int, stageType PipelineStageType, pluginId int) (bool, error)
187204

188205
CreatePipelineScript(pipelineScript *PluginPipelineScript, tx *pg.Tx) (*PluginPipelineScript, error)
189206
UpdatePipelineScript(pipelineScript *PluginPipelineScript) (*PluginPipelineScript, error)
@@ -873,3 +890,26 @@ func (impl *PipelineStageRepositoryImpl) MarkConditionsDeletedExcludingActiveVar
873890
}
874891
return nil
875892
}
893+
894+
func (impl *PipelineStageRepositoryImpl) CheckIfPluginExistsInPipelineStage(pipelineId int, stageType PipelineStageType, pluginId int) (bool, error) {
895+
var step PipelineStageStep
896+
query := impl.dbConnection.Model(&step).
897+
Column("pipeline_stage_step.*").
898+
Join("INNER JOIN pipeline_stage ps on ps.id = pipeline_stage_step.pipeline_stage_id").
899+
Where("pipeline_stage_step.ref_plugin_id = ?", pluginId).
900+
Where("ps.type = ?", stageType).
901+
Where("pipeline_stage_step.deleted=?", false).
902+
Where("ps.deleted= ?", false)
903+
904+
if stageType.IsStageTypePostCi() || stageType.IsStageTypePreCi() {
905+
query.Where("ps.ci_pipeline_id= ?", pipelineId)
906+
} else if stageType.IsStageTypePostCd() || stageType.IsStageTypePreCd() {
907+
query.Where("ps.cd_pipeline_id= ?", pipelineId)
908+
}
909+
exists, err := query.Exists()
910+
if err != nil {
911+
impl.logger.Errorw("error in getting plugin stage step by pipelineId, stageType nad plugin id", "pipelineId", pipelineId, "stageType", stageType.ToString(), "pluginId", pluginId, "err", err)
912+
return false, err
913+
}
914+
return exists, nil
915+
}

pkg/policyGovernance/security/imageScanning/ImageScanService.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
bean3 "github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning/bean"
2525
repository3 "github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning/repository"
2626
securityBean "github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning/repository/bean"
27+
serverBean "github.com/devtron-labs/devtron/pkg/server/bean"
2728
"go.opentelemetry.io/otel"
2829
"time"
2930

@@ -43,6 +44,7 @@ type ImageScanService interface {
4344
FetchMinScanResultByAppIdAndEnvId(request *bean3.ImageScanRequest) (*bean3.ImageScanExecutionDetail, error)
4445
VulnerabilityExposure(request *repository3.VulnerabilityRequest) (*repository3.VulnerabilityExposureListingResponse, error)
4546
GetArtifactVulnerabilityStatus(ctx context.Context, request *bean2.VulnerabilityCheckRequest) (bool, error)
47+
IsImageScanExecutionCompleted(image, imageDigest string) (bool, error)
4648
}
4749

4850
type ImageScanServiceImpl struct {
@@ -644,3 +646,19 @@ func (impl ImageScanServiceImpl) updateCount(severity securityBean.Severity, cri
644646
}
645647
return criticalCount, highCount, moderateCount, lowCount, unkownCount
646648
}
649+
650+
func (impl ImageScanServiceImpl) IsImageScanExecutionCompleted(image, imageDigest string) (bool, error) {
651+
var isScanningCompleted bool
652+
allScanHistoryMappings, err := impl.scanToolExecutionHistoryMappingRepository.FetchScanHistoryMappingsUsingImageAndImageDigest(image, imageDigest)
653+
if err != nil {
654+
impl.Logger.Errorw("error in fetching all scan execution history mapping", "image", image, "imageDigest", imageDigest, "err", err)
655+
return false, err
656+
}
657+
658+
for _, scanHistoryMapping := range allScanHistoryMappings {
659+
if scanHistoryMapping.State == serverBean.ScanExecutionProcessStateCompleted {
660+
isScanningCompleted = true
661+
}
662+
}
663+
return isScanningCompleted, nil
664+
}

pkg/policyGovernance/security/imageScanning/repository/ScanToolExecutionHistoryMapping.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ type ScanToolExecutionHistoryMappingRepository interface {
4545
GetAllScanHistoriesByState(state serverBean.ScanExecutionProcessState) ([]*ScanToolExecutionHistoryMapping, error)
4646
GetAllScanHistoriesByExecutionHistoryIdAndStates(executionHistoryId int, states []serverBean.ScanExecutionProcessState) ([]*ScanToolExecutionHistoryMapping, error)
4747
GetAllScanHistoriesByExecutionHistoryIds(ids []int) ([]*ScanToolExecutionHistoryMapping, error)
48+
FetchScanHistoryMappingsUsingImageAndImageDigest(image, imageDigest string) ([]*ScanToolExecutionHistoryMapping, error)
4849
}
4950

5051
type ScanToolExecutionHistoryMappingRepositoryImpl struct {
@@ -142,3 +143,18 @@ func (repo *ScanToolExecutionHistoryMappingRepositoryImpl) GetAllScanHistoriesBy
142143
}
143144
return models, nil
144145
}
146+
147+
func (repo *ScanToolExecutionHistoryMappingRepositoryImpl) FetchScanHistoryMappingsUsingImageAndImageDigest(image, imageDigest string) ([]*ScanToolExecutionHistoryMapping, error) {
148+
var models []*ScanToolExecutionHistoryMapping
149+
err := repo.dbConnection.Model(&models).
150+
Column("scan_tool_execution_history_mapping.*").
151+
Join("INNER JOIN image_scan_execution_history iseh on iseh.id=scan_tool_execution_history_mapping.image_scan_execution_history_id").
152+
Where("iseh.image = ?", image).
153+
Where("iseh.image_hash = ?", imageDigest).
154+
Select()
155+
if err != nil {
156+
repo.logger.Errorw("error in getting ScanToolExecutionHistoryMapping using image and image hash", "err", err)
157+
return nil, err
158+
}
159+
return models, nil
160+
}

pkg/workflow/dag/WorkflowDagExecutor.go

Lines changed: 84 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,17 @@ import (
4444
"github.com/devtron-labs/devtron/pkg/deployment/trigger/devtronApps/userDeploymentRequest/service"
4545
eventProcessorBean "github.com/devtron-labs/devtron/pkg/eventProcessor/bean"
4646
"github.com/devtron-labs/devtron/pkg/pipeline"
47+
constants2 "github.com/devtron-labs/devtron/pkg/pipeline/constants"
4748
"github.com/devtron-labs/devtron/pkg/pipeline/executors"
4849
repository2 "github.com/devtron-labs/devtron/pkg/plugin/repository"
50+
"github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning"
51+
repository3 "github.com/devtron-labs/devtron/pkg/policyGovernance/security/imageScanning/repository"
4952
"github.com/devtron-labs/devtron/pkg/sql"
5053
"github.com/devtron-labs/devtron/pkg/workflow/cd"
5154
bean4 "github.com/devtron-labs/devtron/pkg/workflow/cd/bean"
55+
"github.com/devtron-labs/devtron/pkg/workflow/dag/adaptor"
5256
bean2 "github.com/devtron-labs/devtron/pkg/workflow/dag/bean"
57+
"github.com/devtron-labs/devtron/pkg/workflow/dag/helper"
5358
error2 "github.com/devtron-labs/devtron/util/error"
5459
util2 "github.com/devtron-labs/devtron/util/event"
5560
"strings"
@@ -124,6 +129,8 @@ type WorkflowDagExecutorImpl struct {
124129
commonArtifactService artifacts.CommonArtifactService
125130
deploymentConfigService common2.DeploymentConfigService
126131
asyncRunnable *async.Runnable
132+
scanHistoryRepository repository3.ImageScanHistoryRepository
133+
imageScanService imageScanning.ImageScanService
127134
}
128135

129136
func NewWorkflowDagExecutorImpl(Logger *zap.SugaredLogger, pipelineRepository pipelineConfig.PipelineRepository,
@@ -147,7 +154,10 @@ func NewWorkflowDagExecutorImpl(Logger *zap.SugaredLogger, pipelineRepository pi
147154
manifestCreationService manifest.ManifestCreationService,
148155
commonArtifactService artifacts.CommonArtifactService,
149156
deploymentConfigService common2.DeploymentConfigService,
150-
asyncRunnable *async.Runnable) *WorkflowDagExecutorImpl {
157+
asyncRunnable *async.Runnable,
158+
scanHistoryRepository repository3.ImageScanHistoryRepository,
159+
imageScanService imageScanning.ImageScanService,
160+
) *WorkflowDagExecutorImpl {
151161
wde := &WorkflowDagExecutorImpl{logger: Logger,
152162
pipelineRepository: pipelineRepository,
153163
cdWorkflowRepository: cdWorkflowRepository,
@@ -171,6 +181,8 @@ func NewWorkflowDagExecutorImpl(Logger *zap.SugaredLogger, pipelineRepository pi
171181
commonArtifactService: commonArtifactService,
172182
deploymentConfigService: deploymentConfigService,
173183
asyncRunnable: asyncRunnable,
184+
scanHistoryRepository: scanHistoryRepository,
185+
imageScanService: imageScanService,
174186
}
175187
config, err := types.GetCdConfig()
176188
if err != nil {
@@ -558,6 +570,22 @@ func (impl *WorkflowDagExecutorImpl) HandlePreStageSuccessEvent(triggerContext t
558570
if err != nil {
559571
return err
560572
}
573+
scanEnabled, scanned := ciArtifact.ScanEnabled, ciArtifact.Scanned
574+
isScanPluginConfigured, isScanningDoneViaPlugin, err := impl.isArtifactScannedByPluginForPipeline(ciArtifact, cdStageCompleteEvent.CdPipelineId, repository4.PIPELINE_STAGE_TYPE_PRE_CD, bean2.ImageScanningPluginToCheckInPipelineStageStep)
575+
if err != nil {
576+
impl.logger.Errorw("error in checking if artifact scanned by plugin for a pipeline or not", "ciArtifact", ciArtifact, "err", err)
577+
return err
578+
}
579+
helper.UpdateScanStatusInCiArtifact(ciArtifact, isScanPluginConfigured, isScanningDoneViaPlugin)
580+
581+
// if ciArtifact scanEnabled and scanned state changed from above func then update ciArtifact
582+
if scanEnabled != ciArtifact.ScanEnabled || scanned != ciArtifact.Scanned {
583+
err = impl.ciArtifactRepository.Update(ciArtifact)
584+
if err != nil {
585+
impl.logger.Errorw("error in updating ci artifact after handling scan event for this artifact", "ciArtifact", ciArtifact, "err", err)
586+
return err
587+
}
588+
}
561589
// Migration of deprecated DataSource Type
562590
if ciArtifact.IsMigrationRequired() {
563591
migrationErr := impl.ciArtifactRepository.MigrateToWebHookDataSourceType(ciArtifact.Id)
@@ -651,6 +679,22 @@ func (impl *WorkflowDagExecutorImpl) HandlePostStageSuccessEvent(triggerContext
651679
impl.logger.Errorw("error in finding artifact by cd workflow id", "err", err, "cdWorkflowId", cdWorkflowId)
652680
return err
653681
}
682+
scanEnabled, scanned := ciArtifact.ScanEnabled, ciArtifact.Scanned
683+
isScanPluginConfigured, isScanningDoneViaPlugin, err := impl.isArtifactScannedByPluginForPipeline(ciArtifact, cdPipelineId, repository4.PIPELINE_STAGE_TYPE_POST_CD, bean2.ImageScanningPluginToCheckInPipelineStageStep)
684+
if err != nil {
685+
impl.logger.Errorw("error in checking if artifact scanned by plugin for a pipeline or not", "ciArtifact", ciArtifact, "err", err)
686+
return err
687+
}
688+
helper.UpdateScanStatusInCiArtifact(ciArtifact, isScanPluginConfigured, isScanningDoneViaPlugin)
689+
690+
// if ciArtifact scanEnabled and scanned state changed from above func then update ciArtifact
691+
if scanEnabled != ciArtifact.ScanEnabled || scanned != ciArtifact.Scanned {
692+
err = impl.ciArtifactRepository.Update(ciArtifact)
693+
if err != nil {
694+
impl.logger.Errorw("error in updating ci artifact after handling scan event for this artifact", "ciArtifact", ciArtifact, "err", err)
695+
return err
696+
}
697+
}
654698
if len(pluginRegistryImageDetails) > 0 {
655699
PostCDArtifacts, err := impl.commonArtifactService.SavePluginArtifacts(ciArtifact, pluginRegistryImageDetails, cdPipelineId, repository.POST_CD, triggeredBy)
656700
if err != nil {
@@ -710,6 +754,24 @@ func (impl *WorkflowDagExecutorImpl) UpdateCiWorkflowForCiSuccess(request *bean2
710754
return nil
711755
}
712756

757+
func (impl *WorkflowDagExecutorImpl) isArtifactScannedByPluginForPipeline(ciArtifact *repository.CiArtifact, pipelineId int,
758+
pipelineStage repository4.PipelineStageType, pluginName string) (bool, bool, error) {
759+
var isScanningDone bool
760+
isScanPluginConfigured, err := impl.pipelineStageService.IsScanPluginConfiguredAtPipelineStage(pipelineId, pipelineStage, pluginName)
761+
if err != nil {
762+
impl.logger.Errorw("error in fetching if a scan plugin is configured or not in a pipeline", "pipelineStage", pipelineStage, "ciArtifact", ciArtifact)
763+
return false, false, err
764+
}
765+
if isScanPluginConfigured {
766+
isScanningDone, err = impl.imageScanService.IsImageScanExecutionCompleted(ciArtifact.Image, ciArtifact.ImageDigest)
767+
if err != nil {
768+
impl.logger.Errorw("error in checking if image scanning is completed or not", "image", ciArtifact.Image, "imageDigest", ciArtifact.ImageDigest)
769+
return false, false, err
770+
}
771+
}
772+
return isScanPluginConfigured, isScanningDone, nil
773+
}
774+
713775
func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *bean2.CiArtifactWebhookRequest, imagePushedAt time.Time) (id int, err error) {
714776
impl.logger.Infow("webhook for artifact save", "req", request)
715777
pipelineModal, err := impl.ciPipelineRepository.FindByCiAndAppDetailsById(ciPipelineId)
@@ -720,48 +782,36 @@ func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext trigger
720782
if request.PipelineName == "" {
721783
request.PipelineName = pipelineModal.Name
722784
}
723-
materialJson, err := request.MaterialInfo.MarshalJSON()
724-
if err != nil {
725-
impl.logger.Errorw("unable to marshal material metadata", "err", err)
726-
return 0, err
727-
}
728-
dst := new(bytes.Buffer)
729-
err = json.Compact(dst, materialJson)
785+
materialJson, err := helper.GetMaterialInfoJson(request.MaterialInfo)
730786
if err != nil {
787+
impl.logger.Errorw("unable to get materialJson", "materialInfo", request.MaterialInfo, "err", err)
731788
return 0, err
732789
}
733-
materialJson = dst.Bytes()
734790
createdOn := time.Now()
735791
updatedOn := time.Now()
736792
if !imagePushedAt.IsZero() {
737793
createdOn = imagePushedAt
738794
}
739-
buildArtifact := &repository.CiArtifact{
740-
Image: request.Image,
741-
ImageDigest: request.ImageDigest,
742-
MaterialInfo: string(materialJson),
743-
DataSource: request.DataSource,
744-
PipelineId: pipelineModal.Id,
745-
WorkflowId: request.WorkflowId,
746-
ScanEnabled: pipelineModal.ScanEnabled,
747-
IsArtifactUploaded: request.IsArtifactUploaded, // for backward compatibility
748-
Scanned: false,
749-
AuditLog: sql.AuditLog{CreatedBy: request.UserId, UpdatedBy: request.UserId, CreatedOn: createdOn, UpdatedOn: updatedOn},
750-
}
751-
plugin, err := impl.globalPluginRepository.GetPluginByName(bean3.VULNERABILITY_SCANNING_PLUGIN)
752-
if err != nil || len(plugin) == 0 {
753-
impl.logger.Errorw("error in getting image scanning plugin", "err", err)
754-
return 0, err
755-
}
756-
isScanPluginConfigured, err := impl.pipelineStageRepository.CheckPluginExistsInCiPipeline(pipelineModal.Id, string(repository4.PIPELINE_STAGE_TYPE_POST_CI), plugin[0].Id)
757-
if err != nil {
758-
impl.logger.Errorw("error in getting ci pipelineModal plugin", "err", err, "pipelineId", pipelineModal.Id, "pluginId", plugin[0].Id)
759-
return 0, err
795+
buildArtifact := adaptor.GetBuildArtifact(request, pipelineModal.Id, materialJson, createdOn, updatedOn)
796+
797+
// image scanning plugin can only be applied in Post-ci, scanning in pre-ci doesn't make sense
798+
pipelineStage := repository4.PIPELINE_STAGE_TYPE_POST_CI
799+
if pipelineModal.PipelineType == constants2.CI_JOB.ToString() {
800+
pipelineStage = repository4.PIPELINE_STAGE_TYPE_PRE_CI
760801
}
761-
if pipelineModal.ScanEnabled || isScanPluginConfigured {
802+
// this flag comes from ci-runner when scanning is enabled from ciPipeline modal
803+
if request.IsScanEnabled {
762804
buildArtifact.Scanned = true
763805
buildArtifact.ScanEnabled = true
806+
} else {
807+
isScanPluginConfigured, isScanningDoneViaPlugin, err := impl.isArtifactScannedByPluginForPipeline(buildArtifact, pipelineModal.Id, pipelineStage, bean2.ImageScanningPluginToCheckInPipelineStageStep)
808+
if err != nil {
809+
impl.logger.Errorw("error in checking if artifact scanned by plugin for a pipeline or not", "ciArtifact", buildArtifact, "err", err)
810+
return 0, err
811+
}
812+
helper.UpdateScanStatusInCiArtifact(buildArtifact, isScanPluginConfigured, isScanningDoneViaPlugin)
764813
}
814+
765815
if err = impl.ciArtifactRepository.Save(buildArtifact); err != nil {
766816
impl.logger.Errorw("error in saving material", "err", err)
767817
return 0, err
@@ -815,12 +865,12 @@ func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext trigger
815865
PipelineId: ci.Id,
816866
ParentCiArtifact: buildArtifact.Id,
817867
IsArtifactUploaded: request.IsArtifactUploaded, // for backward compatibility
818-
ScanEnabled: ci.ScanEnabled,
868+
ScanEnabled: buildArtifact.ScanEnabled,
819869
Scanned: false,
820870
AuditLog: sql.AuditLog{CreatedBy: request.UserId, UpdatedBy: request.UserId, CreatedOn: time.Now(), UpdatedOn: time.Now()},
821871
}
822-
if ci.ScanEnabled {
823-
ciArtifact.Scanned = true
872+
if buildArtifact.ScanEnabled {
873+
ciArtifact.Scanned = buildArtifact.Scanned
824874
}
825875
ciArtifactArr = append(ciArtifactArr, ciArtifact)
826876
}

0 commit comments

Comments
 (0)