Skip to content
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

optimise dockerfile #6226

Open
wants to merge 81 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
81 commits
Select commit Hold shift + click to select a range
3b7b718
optimise dockerfile
nishant-d Dec 27, 2024
10f39a3
build optimise
nishant-d Dec 27, 2024
bc34abf
handle the case when a cve is not found in our database to enforce po…
prakash100198 Dec 30, 2024
df4beab
removed casbin database creation call (#6238)
kartik-579 Dec 31, 2024
b64dca1
fix: graceful shutdown handling and logs flush (#6239)
Shivam-nagar23 Dec 31, 2024
33f0ad6
isProd in cluster
prkhrkat Dec 31, 2024
385432f
Merge pull request #6241 from devtron-labs/cluster-fix
prkhrkat Dec 31, 2024
2c3ea7d
common lib hash update and add pg failure queries flag
ayu-devtron Jan 2, 2025
69097b9
chore: merging user service with connection manager (#6225)
iamayushm Jan 2, 2025
de8652b
chore: Argocd repository secret creation service refactoring (#6229)
iamayushm Jan 2, 2025
2ddc994
Merge branch 'develop' into img-scan-bug-fixes
prakash100198 Jan 3, 2025
c168da4
fix app level cve add and it wasn't enforcing it at app level only
prakash100198 Jan 3, 2025
54e776a
soft delete previous policies so that consistent data is created in s…
prakash100198 Jan 5, 2025
703bf36
use ilike with regex matching in app name filter at cve search
prakash100198 Jan 5, 2025
15ccde9
bypass vulnerability check for rollback trigger
prakash100198 Jan 6, 2025
11b47d5
update common lib hash to use updated query processor function
ayu-devtron Jan 6, 2025
d60c186
main sync develop
vikramdevtron Jan 6, 2025
e93cadb
Merge pull request #6256 from devtron-labs/main-sync-develop-6jan
vikramdevtron Jan 6, 2025
0c2479c
update common lib hash
ayu-devtron Jan 6, 2025
0733fad
SeverityStringToEnum
prakash100198 Jan 6, 2025
ef09af6
FilterDeployInfoByScannedArtifactsDeployedInEnv
prakash100198 Jan 6, 2025
5e2dbeb
Merge branch 'develop' into img-scan-bug-fixes
prakash100198 Jan 6, 2025
8cffe77
wire
prakash100198 Jan 6, 2025
c8dfc37
some changes after self review
prakash100198 Jan 7, 2025
cb7f9ac
added schme json for cronjobs (#6260)
badal773 Jan 7, 2025
36d9331
code review comments + self review comments incorporation
prakash100198 Jan 7, 2025
dcb7a39
Merge branch 'develop' into img-scan-bug-fixes
prakash100198 Jan 7, 2025
390dea2
wip
kartik-579 Jan 8, 2025
12f01f2
wip
kartik-579 Jan 8, 2025
96a9a3b
update common-lib hash
ayu-devtron Jan 8, 2025
0baf4e7
created resourceTree service
kartik-579 Jan 8, 2025
fe30a55
resrouce tree service ent
kartik-579 Jan 8, 2025
44b3a0f
Added licenses
kartik-579 Jan 8, 2025
c2ba630
removed resource tree
kartik-579 Jan 8, 2025
24701e6
wip
kartik-579 Jan 8, 2025
de84a08
removed unused dependencies
kartik-579 Jan 8, 2025
233ec55
oss/ent
kartik-579 Jan 8, 2025
6ecdabf
wip
kartik-579 Jan 8, 2025
4226677
wip
kartik-579 Jan 8, 2025
1328df4
oss/ent
kartik-579 Jan 8, 2025
1f916e4
minor changes
kartik-579 Jan 8, 2025
eadaccf
updated log
kartik-579 Jan 8, 2025
a1ba8d7
added ent func
kartik-579 Jan 8, 2025
c4389f6
len check in soft delete policies
prakash100198 Jan 8, 2025
ffef7f9
added pointer in receiver
kartik-579 Jan 8, 2025
d414602
return statement
kartik-579 Jan 8, 2025
d7713a4
wip
kartik-579 Jan 8, 2025
1e32846
erview comments
kartik-579 Jan 10, 2025
940bc2f
review comments
kartik-579 Jan 10, 2025
c6f8cca
wip
kartik-579 Jan 10, 2025
c472b6e
wip
kartik-579 Jan 10, 2025
384a769
query update
kartik-579 Jan 10, 2025
b758948
Merge pull request #6262 from devtron-labs/helm-type-pipeline-app-status
kartik-579 Jan 10, 2025
9672e0f
Merge branch 'develop' of github.com:devtron-labs/devtron into pg-ena…
ayu-devtron Jan 10, 2025
e17ca74
put deleted check in FindLatestCdWorkflowRunnerArtifactMetadataForApp…
prakash100198 Jan 10, 2025
3008f93
fix
prakash100198 Jan 10, 2025
17284db
update oss hash
ayu-devtron Jan 10, 2025
36fb5ba
hash update
ayu-devtron Jan 10, 2025
366bf84
fix: dependabot dt25 (#6237)
RajeevRanjan27 Jan 11, 2025
aff3919
use common query monitoring bean
ayu-devtron Jan 11, 2025
922aecb
env_gen update
ayu-devtron Jan 11, 2025
800291f
update oss hash
ayu-devtron Jan 12, 2025
3005129
Merge branch 'develop' of github.com:devtron-labs/devtron into pg-ena…
ayu-devtron Jan 12, 2025
4c5c318
udpate oss hash
ayu-devtron Jan 12, 2025
a9cd284
update oss hash
ayu-devtron Jan 12, 2025
abd7531
Merge pull request #6243 from devtron-labs/pg-enable-metrics
ayu-devtron Jan 13, 2025
0bf67af
Merge branch 'develop' into img-scan-bug-fixes
prakash100198 Jan 13, 2025
a0ef645
Merge pull request #6259 from devtron-labs/img-scan-bug-fixes
prakash100198 Jan 13, 2025
1f3d001
main sync develop
vikramdevtron Jan 13, 2025
205b6ba
authenticator and common lib updated
vikramdevtron Jan 13, 2025
0f5cf58
Merge pull request #6273 from devtron-labs/main-sync-develop-13jan
vikramdevtron Jan 13, 2025
64229e2
added labels on app-manual-sync job (#6269)
pawan-59 Jan 13, 2025
be8504d
Merge branch 'main' into sync-main-develop
RajeevRanjan27 Jan 13, 2025
ba6b6fb
Merge pull request #6276 from devtron-labs/sync-main-develop
RajeevRanjan27 Jan 13, 2025
ab1d13e
remove unused variable causing double register in prometheus
ayu-devtron Jan 14, 2025
376206d
Merge pull request #6279 from devtron-labs/pg-descriptor-fix
ayu-devtron Jan 14, 2025
ded2c48
chore: Argo common client (#6266)
iamayushm Jan 15, 2025
6321361
updated Dockerfile to remove extra layers
pawan-59 Jan 16, 2025
820aa60
updated DockerfileEA to remove extra layers
pawan-59 Jan 16, 2025
18c494a
updated dockerfile to add vendor step
pawan-59 Jan 16, 2025
2974559
Merge branch 'develop' into dockerfile-optimise
pawan-59 Jan 16, 2025
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
Prev Previous commit
Next Next commit
code review comments + self review comments incorporation
prakash100198 committed Jan 7, 2025
commit 36d93313f6cf71b949829a53fa87a15d9cb5342d
2 changes: 1 addition & 1 deletion api/bean/Security.go
Original file line number Diff line number Diff line change
@@ -27,7 +27,7 @@ type CreateVulnerabilityPolicyRequest struct {
Severity string `json:"severity,omitempty"`
}

func (r CreateVulnerabilityPolicyRequest) IsRequestGlobal() bool {
func (r *CreateVulnerabilityPolicyRequest) IsRequestGlobal() bool {
if r.ClusterId == 0 && r.EnvId == 0 && r.AppId == 0 {
return true
}
4 changes: 2 additions & 2 deletions api/restHandler/PolicyRestHandler.go
Original file line number Diff line number Diff line change
@@ -121,9 +121,9 @@ func (impl PolicyRestHandlerImpl) SavePolicy(w http.ResponseWriter, r *http.Requ
}
//AUTH

res, err := impl.policyService.SavePolicy(req, userId)
res, err := impl.policyService.SavePolicy(&req, userId)
if err != nil {
impl.logger.Errorw("service err, SavePolicy", "err", err, "payload", req)
impl.logger.Errorw("service err, SavePolicy", "payload", req, "err", err)
common.WriteJsonResp(w, err, nil, http.StatusInternalServerError)
return
}
30 changes: 30 additions & 0 deletions internal/sql/repository/pipelineConfig/CdWorfkflowRepository.go
Original file line number Diff line number Diff line change
@@ -57,6 +57,7 @@ type CdWorkflowRepository interface {
FindLastUnFailedProcessedRunner(appId int, environmentId int) (*CdWorkflowRunner, error)
IsLatestCDWfr(pipelineId, wfrId int) (bool, error)
FindLatestCdWorkflowRunnerByEnvironmentIdAndRunnerType(appId int, environmentId int, runnerType apiBean.WorkflowType) (CdWorkflowRunner, error)
FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap map[int][]int, runnerType apiBean.WorkflowType) ([]*cdWorkflow.CdWorkflowRunnerArtifactMetadata, error)
FindAllTriggeredWorkflowCountInLast24Hour() (cdWorkflowCount int, err error)
GetConnection() *pg.DB

@@ -778,3 +779,32 @@ func (impl *CdWorkflowRepositoryImpl) FindDeployedCdWorkflowRunnersByPipelineId(
}
return runners, nil
}

func (impl *CdWorkflowRepositoryImpl) FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap map[int][]int, runnerType apiBean.WorkflowType) ([]*cdWorkflow.CdWorkflowRunnerArtifactMetadata, error) {
var allRunners []*cdWorkflow.CdWorkflowRunnerArtifactMetadata
query := `
WITH RankedData AS (
SELECT
p.app_id AS "app_id",
p.environment_id AS "env_id",
wf.ci_artifact_id AS "ci_artifact_id",
ci_artifact.parent_ci_artifact AS "parent_ci_artifact",
ci_artifact.scanned AS "scanned",
ROW_NUMBER() OVER (PARTITION BY p.app_id, p.environment_id ORDER BY cd_workflow_runner.id DESC) AS rn
FROM cd_workflow_runner INNER JOIN cd_workflow wf ON wf.id = cd_workflow_runner.cd_workflow_id
INNER JOIN pipeline p ON p.id = wf.pipeline_id
INNER JOIN ci_artifact ON ci_artifact.id = wf.ci_artifact_id
WHERE cd_workflow_runner.workflow_type = ? AND p.app_id = ? AND p.environment_id IN (?))
SELECT "app_id","env_id","ci_artifact_id","parent_ci_artifact","scanned" FROM RankedData WHERE rn = 1;
`
for appId, envIds := range appVsEnvIdMap {
var runners []*cdWorkflow.CdWorkflowRunnerArtifactMetadata
_, err := impl.dbConnection.Query(&runners, query, runnerType, appId, pg.In(envIds))
if err != nil {
impl.logger.Errorw("error in getting cdWfrs by appId and envIds and runner type", "appVsEnvIdMap", appVsEnvIdMap, "err", err)
return nil, err
}
allRunners = append(allRunners, runners...)
}
return allRunners, nil
}
Original file line number Diff line number Diff line change
@@ -52,3 +52,11 @@ const (
)

type WorkflowExecutorType string

type CdWorkflowRunnerArtifactMetadata struct {
AppId int `pg:"app_id"`
EnvId int `pg:"env_id"`
CiArtifactId int `pg:"ci_artifact_id"`
ParentCiArtifact int `pg:"parent_ci_artifact"`
Scanned bool `pg:"scanned"`
}
Original file line number Diff line number Diff line change
@@ -46,7 +46,7 @@ import (
)

type PolicyService interface {
SavePolicy(request bean.CreateVulnerabilityPolicyRequest, userId int32) (*bean.IdVulnerabilityPolicyResult, error)
SavePolicy(request *bean.CreateVulnerabilityPolicyRequest, userId int32) (*bean.IdVulnerabilityPolicyResult, error)
UpdatePolicy(updatePolicyParams bean.UpdatePolicyParams, userId int32) (*bean.IdVulnerabilityPolicyResult, error)
DeletePolicy(id int, userId int32) (*bean.IdVulnerabilityPolicyResult, error)
GetPolicies(policyLevel securityBean.PolicyLevel, clusterId, environmentId, appId int) (*bean.GetVulnerabilityPolicyResult, error)
@@ -436,7 +436,7 @@ func (impl *PolicyServiceImpl) parsePolicyAction(action string) (securityBean.Po
return policyAction, nil
}

func (impl *PolicyServiceImpl) SavePolicy(request bean.CreateVulnerabilityPolicyRequest, userId int32) (*bean.IdVulnerabilityPolicyResult, error) {
func (impl *PolicyServiceImpl) SavePolicy(request *bean.CreateVulnerabilityPolicyRequest, userId int32) (*bean.IdVulnerabilityPolicyResult, error) {
tx, err := impl.transactionManager.StartTx()
if err != nil {
impl.logger.Errorw("error in creating transaction", "request", request, "err", err)
@@ -493,14 +493,15 @@ func (impl *PolicyServiceImpl) SavePolicy(request bean.CreateVulnerabilityPolicy
return &bean.IdVulnerabilityPolicyResult{Id: policy.Id}, nil
}

func (impl *PolicyServiceImpl) softDeleteOldPoliciesIfExists(tx *pg.Tx, request bean.CreateVulnerabilityPolicyRequest, userId int32) error {
func (impl *PolicyServiceImpl) softDeleteOldPoliciesIfExists(tx *pg.Tx, request *bean.CreateVulnerabilityPolicyRequest, userId int32) error {
policiesToDelete, err := impl.cvePolicyRepository.GetActiveByCveIdAndScope(request.CveId, request.EnvId, request.AppId, request.ClusterId)
if err != nil {
impl.logger.Errorw("error in getting active policies by cveId and scope", "request", request, "err", err)
return err
}
for _, policy := range policiesToDelete {
policy.UpdateDeleted(true).UpdateAuditLog(userId, time.Now())
policy.UpdateDeleted(true)
policy.AuditLog.UpdateAuditLog(userId)
}
err = impl.cvePolicyRepository.UpdatePoliciesInBulk(tx, policiesToDelete)
if err != nil {
63 changes: 52 additions & 11 deletions pkg/policyGovernance/security/imageScanning/ImageScanService.go
Original file line number Diff line number Diff line change
@@ -730,22 +730,63 @@ func (impl ImageScanServiceImpl) GetScanResults(resourceScanQueryParams *bean3.R

func (impl ImageScanServiceImpl) FilterDeployInfoByScannedArtifactsDeployedInEnv(deployInfoList []*repository3.ImageScanDeployInfo) ([]*repository3.ImageScanDeployInfo, error) {
filteredDeployInfoList := make([]*repository3.ImageScanDeployInfo, 0, len(deployInfoList))
appVsEnvIdMap := make(map[int][]int, len(deployInfoList))
for _, imageScanDeployInfo := range deployInfoList {
if imageScanDeployInfo.IsObjectTypeApp() {
liveArtifactId, err := impl.fetchLatestArtifactIdForAppAndEnv(imageScanDeployInfo.ScanObjectMetaId, imageScanDeployInfo.EnvId)
if err != nil {
impl.Logger.Errorw("error while fetching latest artifact using app and env id", "appId", imageScanDeployInfo.ScanObjectMetaId, "envId", imageScanDeployInfo.EnvId, "err", err)
return nil, err
}
ciArtifact, err := impl.ciArtifactRepository.Get(liveArtifactId)
if err != nil {
impl.Logger.Errorw("error while fetching artifact using artifactId", "artifactId", liveArtifactId, "appId", imageScanDeployInfo.ScanObjectMetaId, "envId", imageScanDeployInfo.EnvId, "err", err)
return nil, err
if _, ok := appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId]; ok {
appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId] = append(appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId], imageScanDeployInfo.EnvId)
} else {
appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId] = make([]int, 0, len(deployInfoList))
appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId] = append(appVsEnvIdMap[imageScanDeployInfo.ScanObjectMetaId], imageScanDeployInfo.EnvId)
}
if ciArtifact.Scanned {
filteredDeployInfoList = append(filteredDeployInfoList, imageScanDeployInfo)
}
}
appEnvToCiArtifactMap, ciArtifactIdToScannedMap, err := impl.fetchLatestArtifactMetadataDeployedOnAllEnvsAcrossApps(appVsEnvIdMap)
if err != nil {
impl.Logger.Errorw("error in fetching latest artifacts metadata for deployed on all envs and apps", "appVsEnvIdMap", appVsEnvIdMap, "err", err)
return nil, err
}
for _, imageScanDeployInfo := range deployInfoList {
if imageScanDeployInfo.IsObjectTypeApp() {
if ciArtifactId, ok := appEnvToCiArtifactMap[bean3.NewAppEnvMetadata(imageScanDeployInfo.ScanObjectMetaId, imageScanDeployInfo.EnvId)]; ok {
if ciArtifactIdToScannedMap[ciArtifactId] {
// if this ci artifact is scanned then append in final resp
filteredDeployInfoList = append(filteredDeployInfoList, imageScanDeployInfo)
}
}
}

}
return filteredDeployInfoList, nil
}

func (impl ImageScanServiceImpl) fetchLatestArtifactMetadataDeployedOnAllEnvsAcrossApps(appVsEnvIdMap map[int][]int) (map[bean3.AppEnvMetadata]int, map[int]bool, error) {
appEnvToCiArtifactMap := make(map[bean3.AppEnvMetadata]int)
ciArtifactIdToScannedMap := make(map[int]bool)
parentCiArtifactIds := make([]int, 0)
cdwfArtifactsMetadata, err := impl.cdWorkflowReadService.FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap, bean4.CD_WORKFLOW_TYPE_DEPLOY)
if err != nil {
impl.Logger.Errorw("error in FindLatestCdWorkflowRunnersByAppAndEnvIds", "appVsEnvIdMap", appVsEnvIdMap, "err", err)
return nil, nil, err
}
for _, item := range cdwfArtifactsMetadata {
ciArtifactId := item.CiArtifactId
if item.ParentCiArtifact > 0 {
parentCiArtifactIds = append(parentCiArtifactIds, item.ParentCiArtifact)
ciArtifactId = item.ParentCiArtifact
} else {
ciArtifactIdToScannedMap[ciArtifactId] = item.Scanned
}
appEnvToCiArtifactMap[bean3.NewAppEnvMetadata(item.AppId, item.EnvId)] = ciArtifactId
}
parentCiArtifacts, err := impl.ciArtifactRepository.GetByIds(parentCiArtifactIds)
if err != nil {
impl.Logger.Errorw("error in getting artifacts by ids", "ids", parentCiArtifactIds, "err", err)
return nil, nil, err
}
for _, parentCiArtifact := range parentCiArtifacts {
// for linked ci case
ciArtifactIdToScannedMap[parentCiArtifact.Id] = parentCiArtifact.Scanned
}
return appEnvToCiArtifactMap, ciArtifactIdToScannedMap, nil
}
21 changes: 12 additions & 9 deletions pkg/policyGovernance/security/imageScanning/adapter/adapter.go
Original file line number Diff line number Diff line change
@@ -66,20 +66,23 @@ func ExecutionDetailsToResourceScanResponseDto(respFromExecutionDetail *bean.Ima
return resp
}

func BuildCvePolicy(request bean2.CreateVulnerabilityPolicyRequest, action bean3.PolicyAction, severity bean3.Severity, time time.Time, userId int32) *repository.CvePolicy {
return &repository.CvePolicy{
Global: request.IsRequestGlobal(),
ClusterId: request.ClusterId,
EnvironmentId: request.EnvId,
AppId: request.AppId,
CVEStoreId: request.CveId,
Action: action,
Severity: &severity,
func BuildCvePolicy(request *bean2.CreateVulnerabilityPolicyRequest, action bean3.PolicyAction, severity bean3.Severity, time time.Time, userId int32) *repository.CvePolicy {
cvePolicy := &repository.CvePolicy{
Action: action,
Severity: &severity,
AuditLog: sql.AuditLog{
CreatedOn: time,
CreatedBy: userId,
UpdatedOn: time,
UpdatedBy: userId,
},
}
if request != nil {
cvePolicy.Global = request.IsRequestGlobal()
cvePolicy.ClusterId = request.ClusterId
cvePolicy.EnvironmentId = request.EnvId
cvePolicy.AppId = request.AppId
cvePolicy.CVEStoreId = request.CveId
}
return cvePolicy
}
9 changes: 9 additions & 0 deletions pkg/policyGovernance/security/imageScanning/bean/bean.go
Original file line number Diff line number Diff line change
@@ -106,3 +106,12 @@ type ImageScanExecutionDetail struct {
ScanToolName string `json:"scanToolName,omitempty"`
Status repository.ScanExecutionProcessState `json:"status,omitempty"`
}

type AppEnvMetadata struct {
AppId int
EnvId int
}

func NewAppEnvMetadata(appId, envId int) AppEnvMetadata {
return AppEnvMetadata{AppId: appId, EnvId: envId}
}
Original file line number Diff line number Diff line change
@@ -23,7 +23,6 @@ import (
"github.com/go-pg/pg"
"github.com/go-pg/pg/orm"
"go.uber.org/zap"
"time"
)

type CvePolicy struct {
@@ -53,17 +52,8 @@ func (policy *CvePolicy) PolicyLevel() securityBean.PolicyLevel {
}
}

func (policy *CvePolicy) UpdateDeleted(deleted bool) *CvePolicy {
func (policy *CvePolicy) UpdateDeleted(deleted bool) {
policy.Deleted = deleted
return policy
}

func (policy *CvePolicy) UpdateAuditLog(userId int32, time time.Time) *CvePolicy {
policy.UpdatedOn = time
policy.CreatedOn = time
policy.UpdatedBy = userId
policy.CreatedBy = userId
return policy
}

//------------------
@@ -324,6 +314,7 @@ func (impl *CvePolicyRepositoryImpl) getHighestPolicyS(allPolicies map[securityB
return applicablePolicies
}

// GetActiveByCveIdAndScope returns cvePolicy slice, based on scope, if all scopes are 0 or null then global cvePolicies are returned
func (impl *CvePolicyRepositoryImpl) GetActiveByCveIdAndScope(cveId string, envId, appId, clusterId int) (policies []*CvePolicy, err error) {
query := impl.dbConnection.Model(&policies).
Column("cve_policy.*").
6 changes: 6 additions & 0 deletions pkg/workflow/cd/read/CdWorkflowReadService.go
Original file line number Diff line number Diff line change
@@ -3,12 +3,14 @@ package read
import (
bean4 "github.com/devtron-labs/devtron/api/bean"
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig/bean/workflow/cdWorkflow"
"go.uber.org/zap"
)

type CdWorkflowReadService interface {
CheckIfLatestWf(pipelineId, cdWfId int) (latest bool, err error)
FindLatestCdWorkflowRunnerByEnvironmentIdAndRunnerType(appId int, environmentId int, runnerType bean4.WorkflowType) (pipelineConfig.CdWorkflowRunner, error)
FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap map[int][]int, runnerType bean4.WorkflowType) ([]*cdWorkflow.CdWorkflowRunnerArtifactMetadata, error)
}

type CdWorkflowReadServiceImpl struct {
@@ -36,3 +38,7 @@ func (impl *CdWorkflowReadServiceImpl) CheckIfLatestWf(pipelineId, cdWfId int) (
func (impl *CdWorkflowReadServiceImpl) FindLatestCdWorkflowRunnerByEnvironmentIdAndRunnerType(appId int, environmentId int, runnerType bean4.WorkflowType) (pipelineConfig.CdWorkflowRunner, error) {
return impl.cdWorkflowRepository.FindLatestCdWorkflowRunnerByEnvironmentIdAndRunnerType(appId, environmentId, runnerType)
}

func (impl *CdWorkflowReadServiceImpl) FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap map[int][]int, runnerType bean4.WorkflowType) ([]*cdWorkflow.CdWorkflowRunnerArtifactMetadata, error) {
return impl.cdWorkflowRepository.FindLatestCdWorkflowRunnerArtifactMetadataForAppAndEnvIds(appVsEnvIdMap, runnerType)
}