@@ -20,13 +20,7 @@ import (
2020 "strings"
2121 "time"
2222
23- "github.com/codefresh-io/cli-v2/pkg/log"
24- "github.com/codefresh-io/cli-v2/pkg/runtime"
25- "github.com/codefresh-io/cli-v2/pkg/store"
26- "github.com/codefresh-io/cli-v2/pkg/util"
27- apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
28- ingressutil "github.com/codefresh-io/cli-v2/pkg/util/ingress"
29- wfutil "github.com/codefresh-io/cli-v2/pkg/util/workflow"
23+ "encoding/json"
3024
3125 apcmd "github.com/argoproj-labs/argocd-autopilot/cmd/commands"
3226 "github.com/argoproj-labs/argocd-autopilot/pkg/application"
@@ -41,6 +35,13 @@ import (
4135 sensorsv1alpha1 "github.com/argoproj/argo-events/pkg/apis/sensor/v1alpha1"
4236 wf "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow"
4337 wfv1alpha1 "github.com/argoproj/argo-workflows/v3/pkg/apis/workflow/v1alpha1"
38+ "github.com/codefresh-io/cli-v2/pkg/log"
39+ "github.com/codefresh-io/cli-v2/pkg/runtime"
40+ "github.com/codefresh-io/cli-v2/pkg/store"
41+ "github.com/codefresh-io/cli-v2/pkg/util"
42+ apu "github.com/codefresh-io/cli-v2/pkg/util/aputil"
43+ ingressutil "github.com/codefresh-io/cli-v2/pkg/util/ingress"
44+ wfutil "github.com/codefresh-io/cli-v2/pkg/util/workflow"
4445 "github.com/juju/ansiterm"
4546 "github.com/spf13/cobra"
4647 corev1 "k8s.io/api/core/v1"
@@ -230,7 +231,6 @@ func createDemoResources(ctx context.Context, opts *GitSourceCreateOptions, gsRe
230231 if err != nil {
231232 return fmt .Errorf ("failed to read files in git-source repo. Err: %w" , err )
232233 }
233-
234234 if len (fi ) == 0 {
235235 err = createCronExamplePipeline (& gitSourceCronExampleOptions {
236236 runtimeName : opts .RuntimeName ,
@@ -273,7 +273,15 @@ func createCronExamplePipeline(opts *gitSourceCronExampleOptions) error {
273273 sensorFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().CronExampleSensorFileName )
274274
275275 eventSource := createCronExampleEventSource ()
276- err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
276+ eventSourceRedundanded , err := cleanUpFieldsCronEventSource (& eventSource )
277+
278+ if err != nil {
279+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
280+
281+ } else {
282+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSourceRedundanded )
283+ }
284+
277285 if err != nil {
278286 return fmt .Errorf ("failed to write yaml of eventsource. Error: %w" , err )
279287 }
@@ -289,7 +297,16 @@ func createCronExamplePipeline(opts *gitSourceCronExampleOptions) error {
289297 return fmt .Errorf ("failed to create cron example sensor. Error: %w" , err )
290298 }
291299
292- err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
300+ sensorRedundanded , err := cleanUpFieldsCronSensor (& sensor )
301+
302+ if err != nil {
303+
304+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
305+
306+ } else {
307+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensorRedundanded )
308+ }
309+
293310 if err != nil {
294311 return fmt .Errorf ("failed to write yaml of cron example sensor. Error: %w" , err )
295312 }
@@ -310,7 +327,7 @@ func createCronExampleEventSource() *eventsourcev1alpha1.EventSource {
310327 EventBusName : store .Get ().EventBusName ,
311328 Calendar : map [string ]eventsourcev1alpha1.CalendarEventSource {
312329 store .Get ().CronExampleEventName : {
313- Interval : "5m " ,
330+ Interval : "30m " ,
314331 },
315332 },
316333 },
@@ -652,14 +669,37 @@ func createDemoWorkflowTemplate(gsFs fs.FS) error {
652669 },
653670 }
654671
655- return gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfTemplate )
672+ var err error
673+
674+ wfRedundanded , err := cleanUpFieldsWorkflowTemplate (wfTemplate )
675+
676+ if err != nil {
677+ err = gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfTemplate )
678+ } else {
679+ err = gsFs .WriteYamls (store .Get ().CronExampleWfTemplateFileName , wfRedundanded )
680+ }
681+
682+ if err != nil {
683+ return err
684+ }
685+ return err
656686}
657687
658688func createGithubExamplePipeline (opts * gitSourceGithubExampleOptions ) error {
659689 // Create an ingress that will manage external access to the github eventsource service
690+ var err error
660691 ingress := createGithubExampleIngress (opts .ingressClass )
661692 ingressFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleIngressFileName )
662- err := opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingress )
693+
694+ ingressRedundanded , err := cleanUpFieldsIngressGithub (& ingress )
695+
696+ if err != nil {
697+ err = opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingress )
698+
699+ } else {
700+ err = opts .gsCloneOpts .FS .WriteYamls (ingressFilePath , ingressRedundanded )
701+ }
702+
663703 if err != nil {
664704 return fmt .Errorf ("failed to write yaml of github example ingress. Error: %w" , err )
665705 }
@@ -668,19 +708,35 @@ func createGithubExamplePipeline(opts *gitSourceGithubExampleOptions) error {
668708 gsRepoURL := opts .gsCloneOpts .URL ()
669709 eventSource := createGithubExampleEventSource (gsRepoURL , opts .ingressHost )
670710 eventSourceFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleEventSourceFileName )
671- err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
711+
712+ eventSourceRedundanded , err := cleanUpFieldsGithubEventSource (& eventSource )
713+
714+ if err != nil {
715+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSource )
716+
717+ } else {
718+ err = opts .gsCloneOpts .FS .WriteYamls (eventSourceFilePath , eventSourceRedundanded )
719+ }
720+
672721 if err != nil {
673722 return fmt .Errorf ("failed to write yaml of secret. Error: %w" , err )
674723 }
675724
676725 // Create a sensor that will listen to the events published by the github eventsource, and trigger workflows
677726 sensor := createGithubExampleSensor ()
678727 sensorFilePath := opts .gsFs .Join (opts .gsCloneOpts .Path (), store .Get ().GithubExampleSensorFileName )
679- err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
728+
729+ sensorRedunded , err := cleanUpFieldsGithubSensor (& sensor )
730+
680731 if err != nil {
681- return fmt .Errorf ("failed to write yaml of github example sensor. Error: %w" , err )
732+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensor )
733+ } else {
734+ err = opts .gsCloneOpts .FS .WriteYamls (sensorFilePath , sensorRedunded )
682735 }
683736
737+ if err != nil {
738+ return fmt .Errorf ("failed to write yaml of github example sensor. Error: %w" , err )
739+ }
684740 return nil
685741}
686742
@@ -830,3 +886,177 @@ func createGithubExampleSensor() *sensorsv1alpha1.Sensor {
830886 },
831887 }
832888}
889+
890+ func cleanUpFieldsIngressGithub (ingress * * netv1.Ingress ) (map [string ]interface {}, error ) {
891+
892+ crd , err := unMarshalCustomObject (ingress )
893+ if err != nil {
894+ return nil , err
895+ }
896+ deleteRedundandedGeneralFields (crd )
897+
898+ return crd , nil
899+
900+ }
901+
902+ func cleanUpFieldsCronEventSource (eventSource * * eventsourcev1alpha1.EventSource ) (map [string ]interface {}, error ) {
903+
904+ crd , err := unMarshalCustomObject (eventSource )
905+ if err != nil {
906+ return nil , err
907+ }
908+ _ , schedule := nestedMapLookup (crd , "spec" , "calendar" , "example-with-interval" , "schedule" )
909+
910+ if schedule != nil {
911+ delete (schedule , "schedule" )
912+ }
913+
914+ deleteRedundandedGeneralFields (crd )
915+
916+ return crd , nil
917+
918+ }
919+
920+ func cleanUpFieldsWorkflowTemplate (eventSource * wfv1alpha1.WorkflowTemplate ) (map [string ]interface {}, error ) {
921+ crd , err := unMarshalCustomObject (eventSource )
922+ if err != nil {
923+ return nil , err
924+ }
925+
926+ deleteRedundandedGeneralFields (crd )
927+
928+ return crd , nil
929+
930+ }
931+
932+ func cleanUpFieldsCronSensor (sensor * * sensorsv1alpha1.Sensor ) (map [string ]interface {}, error ) {
933+ crd , err := unMarshalCustomObject (sensor )
934+ if err != nil {
935+ return nil , err
936+ }
937+
938+ _ , triggers := nestedMapLookup (crd , "spec" , "triggers" )
939+ if triggers != nil {
940+ for _ , value := range triggers ["triggers" ].([]interface {}) {
941+ if rec , ok := value .(map [string ]interface {}); ok {
942+
943+ _ , resource := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "status" )
944+ if resource != nil {
945+ delete (resource , "status" )
946+ }
947+ _ , metadata := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "metadata" , "creationTimestamp" )
948+ if metadata != nil {
949+ delete (metadata , "creationTimestamp" )
950+ }
951+ }
952+ }
953+
954+ }
955+
956+ deleteRedundandedGeneralFields (crd )
957+
958+ return crd , nil
959+
960+ }
961+
962+ func cleanUpFieldsGithubEventSource (eventSource * * eventsourcev1alpha1.EventSource ) (map [string ]interface {}, error ) {
963+ crd , err := unMarshalCustomObject (eventSource )
964+ if err != nil {
965+ return nil , err
966+ }
967+
968+ _ , targetPort := nestedMapLookup (crd , "spec" , "service" , "ports" )
969+ if targetPort != nil {
970+ for _ , value := range targetPort ["ports" ].([]interface {}) {
971+ if rec , ok := value .(map [string ]interface {}); ok {
972+ _ , targetPort := nestedMapLookup (rec , "targetPort" )
973+ if targetPort != nil {
974+ delete (targetPort , "targetPort" )
975+ }
976+ }
977+ }
978+ }
979+
980+ _ , githup := nestedMapLookup (crd , "spec" , "github" , "push" , "id" )
981+ if githup != nil {
982+ delete (githup , "id" )
983+ delete (githup , "owner" )
984+ delete (githup , "repository" )
985+ }
986+
987+ deleteRedundandedGeneralFields (crd )
988+
989+ return crd , nil
990+
991+ }
992+
993+ func cleanUpFieldsGithubSensor (sensor * * sensorsv1alpha1.Sensor ) (map [string ]interface {}, error ) {
994+ crd , err := unMarshalCustomObject (sensor )
995+ if err != nil {
996+ return nil , err
997+ }
998+
999+ //Delete redunded fields from sensor
1000+ _ , triggers := nestedMapLookup (crd , "spec" , "triggers" )
1001+ if triggers != nil {
1002+ for _ , value := range triggers ["triggers" ].([]interface {}) {
1003+ if rec , ok := value .(map [string ]interface {}); ok {
1004+
1005+ _ , resource := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "status" )
1006+ if resource != nil {
1007+ delete (resource , "status" )
1008+ }
1009+ _ , metadata := nestedMapLookup (rec , "template" , "argoWorkflow" , "source" , "resource" , "metadata" , "creationTimestamp" )
1010+ if metadata != nil {
1011+ delete (metadata , "creationTimestamp" )
1012+ }
1013+ }
1014+ }
1015+
1016+ }
1017+
1018+ deleteRedundandedGeneralFields (crd )
1019+
1020+ return crd , nil
1021+
1022+ }
1023+
1024+ func nestedMapLookup (m map [string ]interface {}, ks ... string ) (rval interface {}, mm map [string ]interface {}) {
1025+ var ok bool
1026+
1027+ if len (ks ) == 0 {
1028+ return nil , nil
1029+ }
1030+ if rval , ok = m [ks [0 ]]; ! ok {
1031+ return nil , nil
1032+ } else if len (ks ) == 1 {
1033+ return rval , m
1034+ } else if m , ok = rval .(map [string ]interface {}); ! ok {
1035+ return nil , nil
1036+ } else {
1037+ return nestedMapLookup (m , ks [1 :]... )
1038+ }
1039+ }
1040+
1041+ func deleteRedundandedGeneralFields (crd map [string ]interface {}) {
1042+ delete (crd , "status" )
1043+ metadata := crd ["metadata" ].(map [string ]interface {})
1044+ delete (metadata , "creationTimestamp" )
1045+
1046+ }
1047+
1048+ func unMarshalCustomObject (obj interface {}) (map [string ]interface {}, error ) {
1049+
1050+ crd := make (map [string ]interface {})
1051+
1052+ data , err := json .Marshal (obj )
1053+ if err != nil {
1054+ return nil , err
1055+ }
1056+
1057+ err = json .Unmarshal (data , & crd )
1058+ if err != nil {
1059+ return nil , err
1060+ }
1061+ return crd , nil
1062+ }
0 commit comments