From 86d01488c5a96b8073e4bc0d64c31bdaf7e80f21 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 19 May 2025 18:47:42 +0000 Subject: [PATCH 1/2] take interfaces instead of concrete objects helm synthsizder more testable --- go.work.sum | 6 ++++-- pkg/function/inputs.go | 8 ++++++-- pkg/function/outputs.go | 5 +++++ pkg/helmshim/options.go | 10 +++++----- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/go.work.sum b/go.work.sum index f632f45b..c925b790 100644 --- a/go.work.sum +++ b/go.work.sum @@ -1084,7 +1084,6 @@ github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLe github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20240727154555-813a5fbdbec8/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= github.com/google/pprof v0.0.0-20240827171923-fa2c70bbbfe5/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= -github.com/google/pprof v0.0.0-20241210010833-40e02aabc2ad/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= github.com/google/renameio v0.1.0 h1:GOZbcHa3HfsPKPlmyPyN2KEohoMXOhdMbHrvbpl2QaA= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= @@ -1369,7 +1368,6 @@ github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vv github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= github.com/onsi/ginkgo/v2 v2.20.1/go.mod h1:lG9ey2Z29hR41WMVthyJBGUBcBhGOtoPF2VFMvBXFCI= -github.com/onsi/ginkgo/v2 v2.22.1/go.mod h1:S6aTpoRsSq2cZOd+pssHAlKW/Q/jZt6cPrPlnj4a1xM= github.com/onsi/gomega v0.0.0-20151007035656-2152b45fa28a/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.5.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= @@ -1856,6 +1854,7 @@ golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.20.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.21.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= +golang.org/x/mod v0.23.0/go.mod h1:6SkKJ3Xj0I0BrPOZoBy3bdMptDDU9oJrpohJ3eWZ1fY= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -1967,6 +1966,7 @@ golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.11.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -2067,6 +2067,7 @@ golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -2086,6 +2087,7 @@ golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457 h1:zf5N6UOrA487eEFacMePxjXAJctxKmyjKUsjA11Uzuk= golang.org/x/telemetry v0.0.0-20240521205824-bda55230c457/go.mod h1:pRgIJT+bRLFKnoM1ldnzKoxTIn14Yxz928LQRYYgIN0= golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= diff --git a/pkg/function/inputs.go b/pkg/function/inputs.go index fea15b1c..6bf3ec3f 100644 --- a/pkg/function/inputs.go +++ b/pkg/function/inputs.go @@ -13,6 +13,10 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) +type Reader interface { + All() map[string]*unstructured.Unstructured +} + type InputReader struct { resources *krmv1.ResourceList } @@ -32,9 +36,9 @@ func NewInputReader(r io.Reader) (*InputReader, error) { }, nil } -func ReadInput[T client.Object](ir *InputReader, key string, out T) error { +func ReadInput[T client.Object](ir Reader, key string, out T) error { var found bool - for _, i := range ir.resources.Items { + for _, i := range ir.All() { i := i if getKey(i) == key { err := runtime.DefaultUnstructuredConverter.FromUnstructured(i.Object, out) diff --git a/pkg/function/outputs.go b/pkg/function/outputs.go index 7422b14e..c68881a7 100644 --- a/pkg/function/outputs.go +++ b/pkg/function/outputs.go @@ -15,6 +15,11 @@ import ( var Scheme = scheme.Scheme +type Writer interface { + Add(outs ...client.Object) error + Write() error +} + type OutputWriter struct { outputs []*unstructured.Unstructured results []*krmv1.Result diff --git a/pkg/helmshim/options.go b/pkg/helmshim/options.go index 9c571032..fd5fa4fd 100644 --- a/pkg/helmshim/options.go +++ b/pkg/helmshim/options.go @@ -9,7 +9,7 @@ import ( "helm.sh/helm/v3/pkg/chart/loader" ) -type ValuesFunc func(*function.InputReader) (map[string]any, error) +type ValuesFunc func(function.Reader) (map[string]any, error) // ChartLoader is the function for loading a helm chart. type ChartLoader func() (*chart.Chart, error) @@ -22,8 +22,8 @@ type options struct { Action *action.Install ValuesFunc ValuesFunc ChartLoader ChartLoader - Reader *function.InputReader - Writer *function.OutputWriter + Reader function.Reader + Writer function.Writer } type RenderOption func(*options) @@ -70,7 +70,7 @@ func WithChartLoader(cl ChartLoader) RenderOption { }) } -func WithInputReader(r *function.InputReader) RenderOption { +func WithInputReader(r function.Reader) RenderOption { return RenderOption(func(o *options) { if o == nil { return @@ -79,7 +79,7 @@ func WithInputReader(r *function.InputReader) RenderOption { }) } -func WithOutputWriter(w *function.OutputWriter) RenderOption { +func WithOutputWriter(w function.Writer) RenderOption { return RenderOption(func(o *options) { if o == nil { return From fdc492f7cd50d454d5e342ca1312abc5a301d92b Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Mon, 19 May 2025 19:48:33 +0000 Subject: [PATCH 2/2] missed one --- pkg/helmshim/helm.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/helmshim/helm.go b/pkg/helmshim/helm.go index d03436ff..ef088ade 100644 --- a/pkg/helmshim/helm.go +++ b/pkg/helmshim/helm.go @@ -127,7 +127,7 @@ func RenderChart(opts ...RenderOption) error { return nil } -func inputsToValues(i *function.InputReader) (map[string]any, error) { +func inputsToValues(i function.Reader) (map[string]any, error) { m := map[string]any{} for k, o := range i.All() { m[k] = o.Object