Skip to content

Commit d4e599e

Browse files
Ash-expprakash100198RajeevRanjan27
authored
feat: acr polling plugin support (#5724)
* migration number changes (#5692) * refrain from checkin autoscalingCheckBeforeTrigger for virt clus (#5696) * fix: Decode secret fix on add update oss (#5695) * ValidateEncodedDataByDecoding in case add or update secret * wire fix from main * minor refactor * comment * saving pco concurrency case handled (#5688) * fix: script for pipelineStageStepVariable, making input value and default_value text from varchar255 (#5701) * script for pipelineStageStepVariable, making input value and default_value text from varchar255 * erro log fix * fix: ea fixes for helm app (#5708) * added the ea apps entry app table * resolved the ea mode multiple rows error during configuration of app * modified the ea dockerfile in ca-certificates cmd * uncommented the code and left the ea helm app making way untouched * remodified the dockerfile as previous state * modified the docker file ea mode * dockerfile exit code 100 due to ap install alternative in ea mode dockerfile * execute make after main merge * modified changes in dockerfile ea mode * resolved comments after first level review * Revert "fix: ea fixes for helm app (#5708)" (#5713) This reverts commit 3e31f49. * fix: SkipCiBuildCachePushPull code incorporated with minor refac in handle runtime params validation (#5712) * SkipCiBuildCachePushPull code incorporated with minor refac in handle runtime params validation * minor refactor * minor refactor * chore: polling plugin refactored * chore: refactored method name * update polling plugin response struct * updated migration number * updated polling plugin image * updated polling plugin migration script * fix: same digest for different image issue * fix: plugin migration handling * updated polling plugin migration script * updated migration number * fix: empty artifact issue * chore: polling plugin migration prod-image updated * updated common-lib version --------- Co-authored-by: Prakash <[email protected]> Co-authored-by: Rajeev Ranjan <[email protected]>
1 parent 813c3d7 commit d4e599e

40 files changed

+220
-3608
lines changed

go.mod

+1-3
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ require (
1111
github.com/argoproj/argo-workflows/v3 v3.5.10
1212
github.com/argoproj/gitops-engine v0.7.1-0.20231013183858-f15cf615b814
1313
github.com/aws/aws-sdk-go v1.44.290
14-
github.com/aws/aws-sdk-go-v2/service/ecr v1.20.0
1514
github.com/caarlos0/env v3.5.0+incompatible
1615
github.com/caarlos0/env/v6 v6.7.2
1716
github.com/casbin/casbin v1.9.1
@@ -22,7 +21,7 @@ require (
2221
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
2322
github.com/deckarep/golang-set v1.8.0
2423
github.com/devtron-labs/authenticator v0.4.35-0.20240809073103-6e11da8083f8
25-
github.com/devtron-labs/common-lib v0.16.1-0.20240903114838-d814f4cd60ca
24+
github.com/devtron-labs/common-lib v0.16.1-0.20240904131140-b4128b676f6c
2625
github.com/devtron-labs/go-bitbucket v0.9.60-beta
2726
github.com/devtron-labs/protos v0.0.3-0.20240802105333-92ee9bb85d80
2827
github.com/evanphx/json-patch v5.7.0+incompatible
@@ -122,7 +121,6 @@ require (
122121
github.com/apparentlymart/go-textseg v1.0.0 // indirect
123122
github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect
124123
github.com/argoproj/pkg v0.13.7-0.20230627120311-a4dd357b057e // indirect
125-
github.com/aws/smithy-go v1.14.2 // indirect
126124
github.com/beorn7/perks v1.0.1 // indirect
127125
github.com/blang/semver/v4 v4.0.0 // indirect
128126
github.com/bmatcuk/doublestar/v4 v4.6.0 // indirect

go.sum

+2-9
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkY
9494
github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY=
9595
github.com/aws/aws-sdk-go v1.44.290 h1:Md4+os9DQtJjow0lWLMzeJljsimD+XS2xwwHDr5Z+Lk=
9696
github.com/aws/aws-sdk-go v1.44.290/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI=
97-
github.com/aws/aws-sdk-go-v2 v1.21.0/go.mod h1:/RfNgGmRxI+iFOB1OeJUyxiU+9s88k3pfHvDagGEp0M=
98-
github.com/aws/aws-sdk-go-v2/internal/configsources v1.1.41/go.mod h1:CrObHAuPneJBlfEJ5T3szXOUkLEThaGfvnhTf33buas=
99-
github.com/aws/aws-sdk-go-v2/internal/endpoints/v2 v2.4.35/go.mod h1:SJC1nEVVva1g3pHAIdCp7QsRIkMmLAgoDquQ9Rr8kYw=
100-
github.com/aws/aws-sdk-go-v2/service/ecr v1.20.0 h1:Qw8H7V55d2P1d/a9+cLgAcdez4GtP6l30KQAeYqx9vY=
101-
github.com/aws/aws-sdk-go-v2/service/ecr v1.20.0/go.mod h1:pGwmNL8hN0jpBfKfTbmu+Rl0bJkDhaGl+9PQLrZ4KLo=
102-
github.com/aws/smithy-go v1.14.2 h1:MJU9hqBGbvWZdApzpvoF2WAIJDbtjK2NDJSiJP7HblQ=
103-
github.com/aws/smithy-go v1.14.2/go.mod h1:Tg+OJXh4MB2R/uN61Ko2f6hTZwB/ZYGOtib8J3gBHzA=
10497
github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8=
10598
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
10699
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
@@ -187,8 +180,8 @@ github.com/devtron-labs/argo-workflows/v3 v3.5.10 h1:6rxQOesOzDz6SgQCMDQNHaehsKF
187180
github.com/devtron-labs/argo-workflows/v3 v3.5.10/go.mod h1:/vqxcovDPT4zqr4DjR5v7CF8ggpY1l3TSa2CIG3jmjA=
188181
github.com/devtron-labs/authenticator v0.4.35-0.20240809073103-6e11da8083f8 h1:2+Q7Jdhpo/uMiaQiZZzAh+ZX7wEJIFuMFG6DEiMuo64=
189182
github.com/devtron-labs/authenticator v0.4.35-0.20240809073103-6e11da8083f8/go.mod h1:702R6WIf5y9UzKGoCGxQ+x3l5Ws+l0fXg2xlCpSGFZI=
190-
github.com/devtron-labs/common-lib v0.16.1-0.20240903114838-d814f4cd60ca h1:cS0cK+aAsMZ9GNcNK3mp9Bej5X/3cRmD/tDLc9/P1GM=
191-
github.com/devtron-labs/common-lib v0.16.1-0.20240903114838-d814f4cd60ca/go.mod h1:a7aCClaxYfnyYEENSe1RnkQCeW2AwmCAPYsuvgk0aW0=
183+
github.com/devtron-labs/common-lib v0.16.1-0.20240904131140-b4128b676f6c h1:uF5rx/rvfSddPtJ0YzEjlbu+zBa+MqfmABOy6GYBlWM=
184+
github.com/devtron-labs/common-lib v0.16.1-0.20240904131140-b4128b676f6c/go.mod h1:a7aCClaxYfnyYEENSe1RnkQCeW2AwmCAPYsuvgk0aW0=
192185
github.com/devtron-labs/go-bitbucket v0.9.60-beta h1:VEx1jvDgdtDPS6A1uUFoaEi0l1/oLhbr+90xOwr6sDU=
193186
github.com/devtron-labs/go-bitbucket v0.9.60-beta/go.mod h1:GnuiCesvh8xyHeMCb+twm8lBR/kQzJYSKL28ZfObp1Y=
194187
github.com/devtron-labs/protos v0.0.3-0.20240802105333-92ee9bb85d80 h1:xwbTeijNTf4/j1v+tSfwVqwLVnReas/NqEKeQHvSTys=

pkg/eventProcessor/bean/workflowEventBean.go

+24-7
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@ package bean
1818

1919
import (
2020
"context"
21-
"github.com/aws/aws-sdk-go-v2/service/ecr/types"
21+
"encoding/json"
22+
"github.com/devtron-labs/common-lib/utils/registry"
2223
"github.com/devtron-labs/devtron/api/bean"
2324
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
2425
bean3 "github.com/devtron-labs/devtron/pkg/pipeline/bean"
@@ -62,11 +63,6 @@ func (r *UserDeploymentRequest) WithPipelineOverrideId(id int) *UserDeploymentRe
6263
return r
6364
}
6465

65-
type ImageDetailsFromCR struct {
66-
ImageDetails []types.ImageDetail `json:"imageDetails"`
67-
Region string `json:"region"`
68-
}
69-
7066
type CiCompleteEvent struct {
7167
CiProjectDetails []bean3.CiProjectDetails `json:"ciProjectDetails"`
7268
DockerImage string `json:"dockerImage" validate:"required,image-validator"`
@@ -81,9 +77,30 @@ type CiCompleteEvent struct {
8177
AppName string `json:"appName"`
8278
IsArtifactUploaded bool `json:"isArtifactUploaded"`
8379
FailureReason string `json:"failureReason"`
84-
ImageDetailsFromCR *ImageDetailsFromCR `json:"imageDetailsFromCR"`
80+
ImageDetailsFromCR json.RawMessage `json:"imageDetailsFromCR"`
8581
PluginRegistryArtifactDetails map[string][]string `json:"PluginRegistryArtifactDetails"`
8682
PluginArtifactStage string `json:"pluginArtifactStage"`
83+
pluginImageDetails *registry.ImageDetailsFromCR
84+
}
85+
86+
func (c *CiCompleteEvent) GetPluginImageDetails() *registry.ImageDetailsFromCR {
87+
if c == nil {
88+
return nil
89+
}
90+
return c.pluginImageDetails
91+
}
92+
93+
func (c *CiCompleteEvent) SetImageDetailsFromCR() error {
94+
if c.ImageDetailsFromCR == nil {
95+
return nil
96+
}
97+
var imageDetailsFromCR *registry.ImageDetailsFromCR
98+
err := json.Unmarshal(c.ImageDetailsFromCR, &imageDetailsFromCR)
99+
if err != nil {
100+
return err
101+
}
102+
c.pluginImageDetails = imageDetailsFromCR
103+
return nil
87104
}
88105

89106
type DevtronAppReleaseContextType struct {

pkg/eventProcessor/in/WorkflowEventProcessorService.go

+28-16
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,9 @@ import (
2222
"errors"
2323
"fmt"
2424
"github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
25-
"github.com/aws/aws-sdk-go-v2/service/ecr/types"
2625
pubsub "github.com/devtron-labs/common-lib/pubsub-lib"
2726
"github.com/devtron-labs/common-lib/pubsub-lib/model"
27+
"github.com/devtron-labs/common-lib/utils/registry"
2828
apiBean "github.com/devtron-labs/devtron/api/bean"
2929
client "github.com/devtron-labs/devtron/client/events"
3030
"github.com/devtron-labs/devtron/internal/sql/models"
@@ -474,12 +474,25 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCDWorkflowStatusUpdate() error
474474
return nil
475475
}
476476

477+
func (impl *WorkflowEventProcessorImpl) extractCiCompleteEventFrom(msg *model.PubSubMsg) (bean.CiCompleteEvent, error) {
478+
ciCompleteEvent := bean.CiCompleteEvent{}
479+
err := json.Unmarshal([]byte(msg.Data), &ciCompleteEvent)
480+
if err != nil {
481+
impl.logger.Error("error while unmarshalling json data", "error", err)
482+
return ciCompleteEvent, err
483+
}
484+
err = ciCompleteEvent.SetImageDetailsFromCR()
485+
if err != nil {
486+
impl.logger.Error("error in unmarshalling imageDetailsFromCr results", "error", err)
487+
return ciCompleteEvent, err
488+
}
489+
return ciCompleteEvent, nil
490+
}
491+
477492
func (impl *WorkflowEventProcessorImpl) SubscribeCICompleteEvent() error {
478493
callback := func(msg *model.PubSubMsg) {
479-
ciCompleteEvent := bean.CiCompleteEvent{}
480-
err := json.Unmarshal([]byte(msg.Data), &ciCompleteEvent)
494+
ciCompleteEvent, err := impl.extractCiCompleteEventFrom(msg)
481495
if err != nil {
482-
impl.logger.Error("error while unmarshalling json data", "error", err)
483496
return
484497
}
485498
impl.logger.Debugw("ci complete event for ci", "ciPipelineId", ciCompleteEvent.PipelineId)
@@ -501,34 +514,33 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCICompleteEvent() error {
501514
ciCompleteEvent.PipelineId, "request: ", req, "error: ", err)
502515
return
503516
}
504-
} else if ciCompleteEvent.ImageDetailsFromCR != nil {
505-
if len(ciCompleteEvent.ImageDetailsFromCR.ImageDetails) > 0 {
506-
imageDetails := globalUtil.GetReverseSortedImageDetails(ciCompleteEvent.ImageDetailsFromCR.ImageDetails)
517+
} else if ciCompleteEvent.GetPluginImageDetails() != nil {
518+
if len(ciCompleteEvent.GetPluginImageDetails().ImageDetails) > 0 {
519+
imageDetails := registry.SortGenericImageDetailByCreatedOn(ciCompleteEvent.GetPluginImageDetails().ImageDetails, registry.Ascending)
507520
digestWorkflowMap, err := impl.webhookService.HandleMultipleImagesFromEvent(imageDetails, *ciCompleteEvent.WorkflowId)
508521
if err != nil {
509522
impl.logger.Errorw("error in getting digest workflow map", "err", err, "workflowId", ciCompleteEvent.WorkflowId)
510523
return
511524
}
512525
for _, detail := range imageDetails {
513-
if detail.ImageTags == nil {
526+
if detail == nil || len(detail.Image) == 0 {
514527
continue
515528
}
516-
request, err := impl.BuildCIArtifactRequestForImageFromCR(detail, ciCompleteEvent.ImageDetailsFromCR.Region, ciCompleteEvent, digestWorkflowMap[*detail.ImageDigest].Id)
529+
request, err := impl.buildCIArtifactRequestForImageFromCR(detail, ciCompleteEvent, digestWorkflowMap[detail.GetGenericImageDetailIdentifier()].Id)
517530
if err != nil {
518531
impl.logger.Error("Error while creating request for pipelineID", "pipelineId", ciCompleteEvent.PipelineId, "err", err)
519532
return
520533
}
521-
resp, err := impl.ValidateAndHandleCiSuccessEvent(triggerContext, ciCompleteEvent.PipelineId, request, detail.ImagePushedAt)
534+
resp, err := impl.ValidateAndHandleCiSuccessEvent(triggerContext, ciCompleteEvent.PipelineId, request, detail.LastUpdatedOn)
522535
if err != nil {
523536
return
524537
}
525538
impl.logger.Debug("response of handle ci success event for multiple images from plugin", "resp", resp)
526539
}
527540
}
528-
529541
} else {
530542
globalUtil.TriggerCIMetrics(ciCompleteEvent.Metrics, impl.globalEnvVariables.ExposeCiMetrics, ciCompleteEvent.PipelineName, ciCompleteEvent.AppName)
531-
resp, err := impl.ValidateAndHandleCiSuccessEvent(triggerContext, ciCompleteEvent.PipelineId, req, &time.Time{})
543+
resp, err := impl.ValidateAndHandleCiSuccessEvent(triggerContext, ciCompleteEvent.PipelineId, req, time.Time{})
532544
if err != nil {
533545
return
534546
}
@@ -555,7 +567,7 @@ func (impl *WorkflowEventProcessorImpl) SubscribeCICompleteEvent() error {
555567
return nil
556568
}
557569

558-
func (impl *WorkflowEventProcessorImpl) ValidateAndHandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *wrokflowDagBean.CiArtifactWebhookRequest, imagePushedAt *time.Time) (int, error) {
570+
func (impl *WorkflowEventProcessorImpl) ValidateAndHandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *wrokflowDagBean.CiArtifactWebhookRequest, imagePushedAt time.Time) (int, error) {
559571
validationErr := impl.validator.Struct(request)
560572
if validationErr != nil {
561573
impl.logger.Errorw("validation err, HandleCiSuccessEvent", "err", validationErr, "payload", request)
@@ -643,13 +655,13 @@ func (impl *WorkflowEventProcessorImpl) BuildCiArtifactRequest(event bean.CiComp
643655
return request, nil
644656
}
645657

646-
func (impl *WorkflowEventProcessorImpl) BuildCIArtifactRequestForImageFromCR(imageDetails types.ImageDetail, region string, event bean.CiCompleteEvent, workflowId int) (*wrokflowDagBean.CiArtifactWebhookRequest, error) {
658+
func (impl *WorkflowEventProcessorImpl) buildCIArtifactRequestForImageFromCR(imageDetails *registry.GenericImageDetail, event bean.CiCompleteEvent, workflowId int) (*wrokflowDagBean.CiArtifactWebhookRequest, error) {
647659
if event.TriggeredBy == 0 {
648660
event.TriggeredBy = 1 // system triggered event
649661
}
650662
request := &wrokflowDagBean.CiArtifactWebhookRequest{
651-
Image: globalUtil.ExtractEcrImage(*imageDetails.RegistryId, region, *imageDetails.RepositoryName, imageDetails.ImageTags[0]),
652-
ImageDigest: *imageDetails.ImageDigest,
663+
Image: imageDetails.Image,
664+
ImageDigest: imageDetails.ImageDigest,
653665
DataSource: event.DataSource,
654666
PipelineName: event.PipelineName,
655667
UserId: event.TriggeredBy,

pkg/pipeline/WebhookService.go

+6-10
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ import (
2121
"encoding/json"
2222
"fmt"
2323
"github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
24-
"github.com/aws/aws-sdk-go-v2/service/ecr/types"
2524
pubsub "github.com/devtron-labs/common-lib/pubsub-lib"
25+
"github.com/devtron-labs/common-lib/utils/registry"
2626
"github.com/devtron-labs/devtron/internal/sql/repository"
2727
"github.com/devtron-labs/devtron/internal/sql/repository/pipelineConfig"
2828
"github.com/devtron-labs/devtron/pkg/pipeline/bean"
@@ -50,14 +50,10 @@ type ExternalCiWebhookDto struct {
5050
AppName string `json:"appName"`
5151
IsArtifactUploaded bool `json:"isArtifactUploaded"`
5252
FailureReason string `json:"failureReason"`
53-
ImageDetailsFromCR *ImageDetailsFromCR `json:"imageDetailsFromCR"`
53+
ImageDetailsFromCR json.RawMessage `json:"imageDetailsFromCR"`
5454
PluginRegistryArtifactDetails map[string][]string `json:"PluginRegistryArtifactDetails"`
5555
PluginArtifactStage string `json:"pluginArtifactStage"`
5656
}
57-
type ImageDetailsFromCR struct {
58-
ImageDetails []types.ImageDetail `json:"imageDetails"`
59-
Region string `json:"region"`
60-
}
6157

6258
type CiArtifactWebhookRequest struct {
6359
Image string `json:"image" validate:"required"`
@@ -75,7 +71,7 @@ type CiArtifactWebhookRequest struct {
7571

7672
type WebhookService interface {
7773
AuthenticateExternalCiWebhook(apiKey string) (int, error)
78-
HandleMultipleImagesFromEvent(imageDetails []types.ImageDetail, ciWorkflowId int) (map[string]*pipelineConfig.CiWorkflow, error)
74+
HandleMultipleImagesFromEvent(imageDetails []*registry.GenericImageDetail, ciWorkflowId int) (map[string]*pipelineConfig.CiWorkflow, error)
7975
GetTriggerValidateFuncs() []pubsub.ValidateMsg
8076
}
8177

@@ -136,7 +132,7 @@ func (impl WebhookServiceImpl) AuthenticateExternalCiWebhook(apiKey string) (int
136132
}
137133

138134
// HandleMultipleImagesFromEvent handles multiple images from plugin and creates ci workflow for n-1 images for mapping in ci_artifact
139-
func (impl *WebhookServiceImpl) HandleMultipleImagesFromEvent(imageDetails []types.ImageDetail, ciWorkflowId int) (map[string]*pipelineConfig.CiWorkflow, error) {
135+
func (impl *WebhookServiceImpl) HandleMultipleImagesFromEvent(imageDetails []*registry.GenericImageDetail, ciWorkflowId int) (map[string]*pipelineConfig.CiWorkflow, error) {
140136
ciWorkflow, err := impl.ciWorkflowRepository.FindById(ciWorkflowId)
141137
if err != nil {
142138
impl.logger.Errorw("error in finding ci workflow by id ", "err", err, "ciWorkFlowId", ciWorkflowId)
@@ -146,7 +142,7 @@ func (impl *WebhookServiceImpl) HandleMultipleImagesFromEvent(imageDetails []typ
146142
// creating n-1 workflows for rest images, oldest will be mapped to original workflow id.
147143
digestWorkflowMap := make(map[string]*pipelineConfig.CiWorkflow)
148144
// mapping oldest to original ciworkflowId
149-
digestWorkflowMap[*imageDetails[0].ImageDigest] = ciWorkflow
145+
digestWorkflowMap[imageDetails[0].GetGenericImageDetailIdentifier()] = ciWorkflow
150146
for i := 1; i < len(imageDetails); i++ {
151147
workflow := &pipelineConfig.CiWorkflow{
152148
Name: ciWorkflow.Name + fmt.Sprintf("-child-%d", i),
@@ -170,7 +166,7 @@ func (impl *WebhookServiceImpl) HandleMultipleImagesFromEvent(imageDetails []typ
170166
impl.logger.Errorw("error in saving workflow for child workflow", "err", err, "parentCiWorkflowId", ciWorkflowId)
171167
return nil, err
172168
}
173-
digestWorkflowMap[*imageDetails[i].ImageDigest] = workflow
169+
digestWorkflowMap[imageDetails[i].GetGenericImageDetailIdentifier()] = workflow
174170

175171
}
176172
return digestWorkflowMap, nil

pkg/workflow/dag/WorkflowDagExecutor.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@ import (
7171
)
7272

7373
type WorkflowDagExecutor interface {
74-
HandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *bean2.CiArtifactWebhookRequest, imagePushedAt *time.Time) (id int, err error)
74+
HandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *bean2.CiArtifactWebhookRequest, imagePushedAt time.Time) (id int, err error)
7575
HandlePreStageSuccessEvent(triggerContext triggerBean.TriggerContext, cdStageCompleteEvent eventProcessorBean.CdStageCompleteEvent) error
7676
HandleDeploymentSuccessEvent(triggerContext triggerBean.TriggerContext, pipelineOverride *chartConfig.PipelineOverride) error
7777
HandlePostStageSuccessEvent(triggerContext triggerBean.TriggerContext, cdWorkflowId int, cdPipelineId int, triggeredBy int32, pluginRegistryImageDetails map[string][]string) error
@@ -687,7 +687,7 @@ func (impl *WorkflowDagExecutorImpl) HandlePostStageSuccessEvent(triggerContext
687687
return nil
688688
}
689689

690-
func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *bean2.CiArtifactWebhookRequest, imagePushedAt *time.Time) (id int, err error) {
690+
func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext triggerBean.TriggerContext, ciPipelineId int, request *bean2.CiArtifactWebhookRequest, imagePushedAt time.Time) (id int, err error) {
691691
impl.logger.Infow("webhook for artifact save", "req", request)
692692
if request.WorkflowId != nil {
693693
savedWorkflow, err := impl.ciWorkflowRepository.FindById(*request.WorkflowId)
@@ -730,7 +730,7 @@ func (impl *WorkflowDagExecutorImpl) HandleCiSuccessEvent(triggerContext trigger
730730
createdOn := time.Now()
731731
updatedOn := time.Now()
732732
if !imagePushedAt.IsZero() {
733-
createdOn = *imagePushedAt
733+
createdOn = imagePushedAt
734734
}
735735
buildArtifact := &repository.CiArtifact{
736736
Image: request.Image,
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
-- revert the container image path of the polling plugin version 1.0.0
2+
UPDATE plugin_pipeline_script
3+
SET container_image_path ='quay.io/devtron/poll-container-image:97a996a5-545-16654'
4+
WHERE container_image_path ='quay.io/devtron/devtron-plugins:polling-plugin-v1.0.1'
5+
AND deleted = false;
+30
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
-- update the container image path for the polling plugin version 1.0.0
2+
UPDATE plugin_pipeline_script
3+
SET container_image_path ='quay.io/devtron/devtron-plugins:polling-plugin-v1.0.1'
4+
WHERE container_image_path ='quay.io/devtron/poll-container-image:97a996a5-545-16654'
5+
AND deleted = false;
6+
7+
-- create plugin_parent_metadata for the polling plugin, if not exists
8+
INSERT INTO "plugin_parent_metadata" ("id", "name", "identifier", "description", "type", "icon", "deleted", "created_on", "created_by", "updated_on", "updated_by")
9+
SELECT nextval('id_seq_plugin_parent_metadata'), 'Pull images from container repository','pull-images-from-container-repository','Polls a container repository and pulls images stored in the repository which can be used for deployment.','PRESET','https://raw.githubusercontent.com/devtron-labs/devtron/main/assets/plugin-poll-container-registry.png','f', 'now()', 1, 'now()', 1
10+
WHERE NOT EXISTS (
11+
SELECT 1
12+
FROM plugin_parent_metadata
13+
WHERE identifier='pull-images-from-container-repository'
14+
AND deleted = false
15+
);
16+
17+
-- update the plugin_metadata with the plugin_parent_metadata_id
18+
UPDATE plugin_metadata
19+
SET plugin_parent_metadata_id = (
20+
SELECT id
21+
FROM plugin_parent_metadata
22+
WHERE identifier='pull-images-from-container-repository'
23+
AND deleted = false
24+
)
25+
WHERE name='Pull images from container repository'
26+
AND (
27+
plugin_parent_metadata_id IS NULL
28+
OR plugin_parent_metadata_id = 0
29+
)
30+
AND deleted = false;

0 commit comments

Comments
 (0)