diff --git a/helm/dagger.json b/helm/dagger.json index e233521..57366b6 100644 --- a/helm/dagger.json +++ b/helm/dagger.json @@ -1,5 +1,5 @@ { "name": "helm", "sdk": "go", - "engineVersion": "v0.13.5" + "engineVersion": "v0.14.0" } diff --git a/helm/examples/go/main.go b/helm/examples/go/main.go index f517097..a7d4f1a 100644 --- a/helm/examples/go/main.go +++ b/helm/examples/go/main.go @@ -35,6 +35,26 @@ func (h *Examples) HelmPackagepush( PackagePush(ctx, directory, registry, repository, username, password) } +// Example on how to call the Lint method. +// +// Run helm lint for the Helm Chart located inside the directory referenced by the directory parameter. +// Use `--args` parameter to pass alternative chart locations or additional options to Helm lint - see https://helm.sh/docs/helm/helm_lint/#options +// +// Return: The Helm lint output as string. +func (h *Examples) HelmLint( + // method call context + ctx context.Context, + // directory that contains the Helm Chart, e.g. "./helm/examples/testdata/mychart/" + directory *dagger.Directory, + // Helm lint arguments + // +optional + args []string, +) (string, error) { + return dag. + Helm(). + Lint(ctx, directory) +} + // Example on how to call the Test method. // // Run the unit tests for the Helm Chart located inside the directory referenced by the directory parameter. diff --git a/helm/examples/shell/examples.sh b/helm/examples/shell/examples.sh index ff5d879..d5d51f3 100755 --- a/helm/examples/shell/examples.sh +++ b/helm/examples/shell/examples.sh @@ -23,6 +23,24 @@ function helm_packagepush() { --directory ./examples/testdata/mychart/ } +################################################# +# Example on how to call the Lint method. +# Run helm lint for the Helm Chart located inside the directory referenced by the directory parameter. +# Use `--args` parameter to pass alternative chart locations or additional options to Helm lint - see https://helm.sh/docs/helm/helm_lint/#options +# ARGUMENTS: +# directory: directory that contains the Helm Chart +# args: arguments for the helm lint command +# RETURN: +# The Helm lint output as string. +################################################# +function helm_lint() { + dagger -m helm/ \ + call lint \ + --directory ./helm/examples/testdata/mychart/ \ + --args "--quiet" \ + --args "--skip-schema-validation" +} + ################################################# # Example on how to call the Test method. # Run the unit tests for the Helm Chart located inside the directory referenced by the directory parameter. diff --git a/helm/go.mod b/helm/go.mod index 5cf5387..d24d147 100644 --- a/helm/go.mod +++ b/helm/go.mod @@ -3,9 +3,9 @@ module dagger/helm go 1.23.2 require ( - github.com/99designs/gqlgen v0.17.49 + github.com/99designs/gqlgen v0.17.55 github.com/Khan/genqlient v0.7.0 - github.com/vektah/gqlparser/v2 v2.5.16 + github.com/vektah/gqlparser/v2 v2.5.17 go.opentelemetry.io/otel v1.27.0 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 @@ -28,10 +28,13 @@ require ( github.com/google/uuid v1.6.0 // indirect github.com/grpc-ecosystem/grpc-gateway/v2 v2.22.0 // indirect github.com/sosodev/duration v1.3.1 // indirect + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect - go.opentelemetry.io/otel/metric v1.27.0 // indirect + go.opentelemetry.io/otel/metric v1.27.0 + go.opentelemetry.io/otel/sdk/metric v1.27.0 golang.org/x/net v0.29.0 // indirect - golang.org/x/sys v0.25.0 // indirect + golang.org/x/sys v0.26.0 // indirect golang.org/x/text v0.18.0 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240814211410-ddb44dafa142 // indirect diff --git a/helm/go.sum b/helm/go.sum index f6bb539..c52dd24 100644 --- a/helm/go.sum +++ b/helm/go.sum @@ -1,5 +1,5 @@ -github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= -github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= +github.com/99designs/gqlgen v0.17.55 h1:3vzrNWYyzSZjGDFo68e5j9sSauLxfKvLp+6ioRokVtM= +github.com/99designs/gqlgen v0.17.55/go.mod h1:3Bq768f8hgVPGZxL8aY9MaYmbxa6llPM/qu1IGH1EJo= github.com/Khan/genqlient v0.7.0 h1:GZ1meyRnzcDTK48EjqB8t3bcfYvHArCUUvgOwpz1D4w= github.com/Khan/genqlient v0.7.0/go.mod h1:HNyy3wZvuYwmW3Y7mkoQLZsa/R5n5yIRajS1kPBvSFM= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= @@ -27,14 +27,18 @@ github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= -github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= +github.com/vektah/gqlparser/v2 v2.5.17 h1:9At7WblLV7/36nulgekUgIaqHZWn5hxqluxrxGUhOmI= +github.com/vektah/gqlparser/v2 v2.5.17/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= go.opentelemetry.io/otel v1.27.0 h1:9BZoF3yMK/O1AafMiQTVu0YDj5Ea4hPhxCs7sGva+cg= go.opentelemetry.io/otel v1.27.0/go.mod h1:DMpAK8fzYRzs+bi3rS5REupisuqTheUlSZJ1WnZaPAQ= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88 h1:oM0GTNKGlc5qHctWeIGTVyda4iFFalOzMZ3Ehj5rwB4= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 h1:bFgvUr3/O4PHj3VQcFEuYKvRZJX1SJDQ+11JXuSB3/w= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0/go.mod h1:xJntEd2KL6Qdg5lwp97HMLQDVeAhrYxmzFseAMDPQ8I= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 h1:CIHWikMsN3wO+wq1Tp5VGdVRTcON+DmOJSfDjXypKOc= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0/go.mod h1:TNupZ6cxqyFEpLXAZW7On+mLFL0/g0TE3unIYL91xWc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= @@ -49,6 +53,8 @@ go.opentelemetry.io/otel/sdk v1.27.0 h1:mlk+/Y1gLPLn84U4tI8d3GNJmGT/eXe3ZuOXN9kT go.opentelemetry.io/otel/sdk v1.27.0/go.mod h1:Ha9vbLwJE6W86YstIywK2xFfPjbWlCuwPtMkKdz/Y4A= go.opentelemetry.io/otel/sdk/log v0.3.0 h1:GEjJ8iftz2l+XO1GF2856r7yYVh74URiF9JMcAacr5U= go.opentelemetry.io/otel/sdk/log v0.3.0/go.mod h1:BwCxtmux6ACLuys1wlbc0+vGBd+xytjmjajwqqIul2g= +go.opentelemetry.io/otel/sdk/metric v1.27.0 h1:5uGNOlpXi+Hbo/DRoI31BSb1v+OGcpv2NemcCrOL8gI= +go.opentelemetry.io/otel/sdk/metric v1.27.0/go.mod h1:we7jJVrYN2kh3mVBlswtPU22K0SA+769l93J6bsyvqw= go.opentelemetry.io/otel/trace v1.27.0 h1:IqYb813p7cmbHk0a5y6pD5JPakbVfftRXABGt5/Rscw= go.opentelemetry.io/otel/trace v1.27.0/go.mod h1:6RiD1hkAprV4/q+yd2ln1HG9GoPx39SuvvstaLBl+l4= go.opentelemetry.io/proto/otlp v1.3.1 h1:TrMUixzpM0yuc/znrFTP9MMRh8trP93mkCiDVeXrui0= @@ -61,8 +67,8 @@ golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= google.golang.org/genproto/googleapis/api v0.0.0-20240814211410-ddb44dafa142 h1:wKguEg1hsxI2/L3hUYrpo1RVi48K+uTyzKqprwLXsb8= diff --git a/helm/main.go b/helm/main.go index a3263a0..662616d 100644 --- a/helm/main.go +++ b/helm/main.go @@ -49,11 +49,7 @@ func (h *Helm) Version( // directory that contains the Helm Chart directory *dagger.Directory, ) (string, error) { - c := dag.Container(). - From(HELM_IMAGE). - WithDirectory("/helm", directory). - WithWorkdir("/helm"). - WithoutEntrypoint() + c := h.createContainer(directory) version, err := c.WithExec([]string{"sh", "-c", "helm show chart . | yq eval '.version' -"}).Stdout(ctx) if err != nil { return "", err @@ -167,11 +163,7 @@ func (h *Helm) Test( // Helm Unittest arguments args []string, ) (string, error) { - c := dag.Container(). - From(HELM_IMAGE). - WithDirectory("/helm", directory, dagger.ContainerWithDirectoryOpts{Owner: "1001"}). - WithWorkdir("/helm"). - WithoutEntrypoint() + c := h.createContainer(directory) out, err := c.WithExec([]string{"sh", "-c", fmt.Sprintf("%s %s", "helm-unittest", strings.Join(args, " "))}).Stdout(ctx) if err != nil { return "", err @@ -179,3 +171,38 @@ func (h *Helm) Test( return out, nil } + +// Run Helm lint with the given directory. +// +// Provide the helm chart directory with pointing to it with the `--directory` flag. +// Use `--args` parameter to pass alternative chart locations or additional options to Helm lint - see https://helm.sh/docs/helm/helm_lint/#options +// +// Example usage: dagger call lint --directory ./helm/examples/testdata/mychart/ --args "--quiet" +func (h *Helm) Lint( + // method call context + ctx context.Context, + // directory that contains the Helm Chart + directory *dagger.Directory, + // Helm lint arguments + // +optional + args []string, +) (string, error) { + c := h.createContainer(directory) + out, err := c.WithExec([]string{"sh", "-c", fmt.Sprintf("%s %s", "helm lint", strings.Join(args, " "))}).Stdout(ctx) + if err != nil { + return "", err + } + + return out, nil +} + +func (h *Helm) createContainer( + // directory that contains the Helm Chart + directory *dagger.Directory, +) *dagger.Container { + return dag.Container(). + From(HELM_IMAGE). + WithDirectory("/helm", directory, dagger.ContainerWithDirectoryOpts{Owner: "1001"}). + WithWorkdir("/helm"). + WithoutEntrypoint() +} diff --git a/tests/dagger.json b/tests/dagger.json index 2e2cf12..ac13de3 100644 --- a/tests/dagger.json +++ b/tests/dagger.json @@ -1,12 +1,13 @@ { "name": "go", + "engineVersion": "v0.14.0", "sdk": "go", "dependencies": [ { "name": "helm", - "source": "../helm/" + "source": "../helm", + "pin": "" } ], - "source": ".", - "engineVersion": "v0.13.5" + "source": "." } diff --git a/tests/go.mod b/tests/go.mod index bef1aed..5aa815d 100644 --- a/tests/go.mod +++ b/tests/go.mod @@ -30,6 +30,8 @@ require ( github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/sosodev/duration v1.3.1 // indirect github.com/sourcegraph/conc v0.3.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 + go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 // indirect go.opentelemetry.io/otel/metric v1.27.0 go.opentelemetry.io/otel/sdk/metric v1.27.0 diff --git a/tests/go.sum b/tests/go.sum index bcf8cf4..dc5e525 100644 --- a/tests/go.sum +++ b/tests/go.sum @@ -44,6 +44,10 @@ go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-2024051809000 go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.0.0-20240518090000-14441aefdf88/go.mod h1:JGG8ebaMO5nXOPnvKEl+DiA4MGwFjCbjsxT1WHIEBPY= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0 h1:ccBrA8nCY5mM0y5uO7FT0ze4S0TuFcWdDB2FxGMTjkI= go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.3.0/go.mod h1:/9pb6634zi2Lk8LYg9Q0X8Ar6jka4dkFOylBLbVQPCE= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0 h1:bFgvUr3/O4PHj3VQcFEuYKvRZJX1SJDQ+11JXuSB3/w= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.27.0/go.mod h1:xJntEd2KL6Qdg5lwp97HMLQDVeAhrYxmzFseAMDPQ8I= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0 h1:CIHWikMsN3wO+wq1Tp5VGdVRTcON+DmOJSfDjXypKOc= +go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.27.0/go.mod h1:TNupZ6cxqyFEpLXAZW7On+mLFL0/g0TE3unIYL91xWc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0 h1:R9DE4kQ4k+YtfLI2ULwX82VtNQ2J8yZmA7ZIF/D+7Mc= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.27.0/go.mod h1:OQFyQVrDlbe+R7xrEyDr/2Wr67Ol0hRUgsfA+V5A95s= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.27.0 h1:qFffATk0X+HD+f1Z8lswGiOQYKHRlzfmdJm0wEaVrFA= diff --git a/tests/main.go b/tests/main.go index 05adefc..cf85a00 100644 --- a/tests/main.go +++ b/tests/main.go @@ -16,6 +16,9 @@ func (m *Go) All(ctx context.Context) error { p.Go(m.HelmVersion) p.Go(m.HelmTest) + p.Go(m.HelmLint) + p.Go(m.HelmLintWithArg) + p.Go(m.HelmLintWithArgs) return p.Wait() } @@ -76,3 +79,47 @@ func (m *Go) HelmTest( return nil } + +func (m *Go) HelmLint( + // method call context + ctx context.Context, +) error { + directory := dag.CurrentModule().Source().Directory("./testdata/mychart/") + _, err := dag.Helm().Lint(ctx, directory) + + if err != nil { + return err + } + + return nil +} + +func (m *Go) HelmLintWithArg( + // method call context + ctx context.Context, +) error { + args := dagger.HelmLintOpts{Args: []string{"--quiet"}} + directory := dag.CurrentModule().Source().Directory("./testdata/mychart/") + _, err := dag.Helm().Lint(ctx, directory, args) + + if err != nil { + return err + } + + return nil +} + +func (m *Go) HelmLintWithArgs( + // method call context + ctx context.Context, +) error { + args := dagger.HelmLintOpts{Args: []string{"--strict", "--quiet"}} + directory := dag.CurrentModule().Source().Directory("./testdata/mychart/") + _, err := dag.Helm().Lint(ctx, directory, args) + + if err != nil { + return err + } + + return nil +}