Skip to content

Commit

Permalink
add --helm flag to find command (#154)
Browse files Browse the repository at this point in the history
* add --helm flag to find command

* fix docs

* add changelog

* Update docs/usage.md

Co-authored-by: Robert Brennan <[email protected]>

* combine `include_all` param

* fix docs

* Update CHANGELOG.md

* add workload information to containers scanning

* fix docs

* add docs

* fix tests

* fix comment

* explicitly use pod[0] instead of breaking from loop

Co-authored-by: Robert Brennan <[email protected]>
  • Loading branch information
vitorvezani and rbren authored Sep 14, 2022
1 parent 4daca07 commit e73dbce
Show file tree
Hide file tree
Showing 9 changed files with 493 additions and 151 deletions.
191 changes: 118 additions & 73 deletions cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,11 @@ func init() {
if err != nil {
klog.Exitf("Failed to bind containers flag: %v", err)
}
findCmd.Flags().Bool("helm", false, "Show old helm chart versions. You can combine this flag with --containers to have both output in a single run.")
err = viper.BindPFlag("helm", findCmd.Flags().Lookup("helm"))
if err != nil {
klog.Exitf("Failed to bind containers flag: %v", err)
}
findCmd.Flags().Bool("show-non-semver", false, "When finding container images, show all containers even if they don't follow semver.")
err = viper.BindPFlag("show-non-semver", findCmd.Flags().Lookup("show-non-semver"))
if err != nil {
Expand Down Expand Up @@ -226,94 +231,44 @@ var findCmd = &cobra.Command{
klog.Exitf("--format flag value is not valid. Run `nova find --help` to see flag options")
}

if viper.GetBool("containers") {
// Set up a context we can use to cancel all operations to external container registries if we need to
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Interrupt, syscall.SIGTERM)
defer func() {
signal.Stop(signals)
cancel()
}()
go func() {
select {
case <-signals:
fmt.Print("\nCancelling operations to external container registries\n")
cancel()
case <-ctx.Done():
}
}()
showNonSemver := viper.GetBool("show-non-semver")
showErrored := viper.GetBool("show-errored-containers")
includeAll := viper.GetBool("include-all")
iClient := containers.NewClient(kubeContext)
containers, err := iClient.Find(ctx)
if viper.GetBool("helm") && viper.GetBool("containers") {
output, err := handleHelmAndContainers(kubeContext)
if err != nil {
klog.Exitf("ERROR during images.Find() %v", err)
klog.Exit(err)
}
out := output.NewContainersOutput(containers.Images, containers.ErrImages, showNonSemver, showErrored, includeAll)
out.Print(format)
return
}

h := nova_helm.NewHelm(kubeContext)
ahClient, err := nova_helm.NewArtifactHubPackageClient(version)
if err != nil {
klog.Exitf("error setting up artifact hub client: %s", err)
}

if viper.IsSet("desired-versions") {
klog.V(3).Infof("desired-versions is set - attempting to load them")
klog.V(8).Infof("raw desired-versions: %v", viper.Get("desired-versions"))

desiredVersion := viper.GetStringMapString("desired-versions")
for k, v := range desiredVersion {
klog.V(2).Infof("version override for %s: %s", k, v)
h.DesiredVersions = append(h.DesiredVersions, nova_helm.DesiredVersion{
Name: k,
Version: v,
})
outputFile := viper.GetString("output-file")
if outputFile != "" {
err = output.ToFile(outputFile)
if err != nil {
klog.Exitf("error outputting to file: %s", err)
}
} else {
output.Print(format, viper.GetBool("wide"), viper.GetBool("show-old"))
}
return
}
releases, chartNames, err := h.GetReleaseOutput()
if err != nil {
klog.Exitf("error getting helm releases: %s", err)
}
out := output.NewOutputWithHelmReleases(releases)
out.IncludeAll = viper.GetBool("include-all")

if viper.GetBool("poll-artifacthub") {
packageRepos, err := ahClient.MultiSearch(chartNames)
if viper.GetBool("containers") {
output, err := handleContainers(kubeContext)
if err != nil {
klog.Exitf("Error getting artifacthub package repos: %v", err)
}
packages := ahClient.GetPackages(packageRepos)
klog.V(2).Infof("found %d possible package matches", len(packages))
for _, release := range releases {
o := nova_helm.FindBestArtifactHubMatch(release, packages)
if o != nil {
h.OverrideDesiredVersion(o)
out.HelmReleases = append(out.HelmReleases, *o)
}
klog.Exit(err)
}
output.Print(format)
return
}
if len(viper.GetStringSlice("url")) > 0 {
repos := viper.GetStringSlice("url")
helmRepos := nova_helm.NewRepos(repos)
outputObjects := h.GetHelmReleasesVersion(helmRepos, releases)
out.HelmReleases = append(out.HelmReleases, outputObjects...)
if err != nil {
klog.Exitf("Error getting helm releases from cluster: %v", err)
}

output, err := handleHelm(kubeContext)
if err != nil {
klog.Exit(err)
}
outputFile := viper.GetString("output-file")
if outputFile != "" {
err = out.ToFile(outputFile)
err = output.ToFile(outputFile)
if err != nil {
klog.Exitf("error outputting to file: %s", err)
}
} else {
out.Print(format, viper.GetBool("wide"), viper.GetBool("show-old"))
output.Print(format, viper.GetBool("wide"), viper.GetBool("show-old"))
}
},
}
Expand All @@ -338,3 +293,93 @@ func Execute(VERSION, COMMIT string) {
klog.Exit(err)
}
}

func handleContainers(kubeContext string) (*output.ContainersOutput, error) {
// Set up a context we can use to cancel all operations to external container registries if we need to
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
signals := make(chan os.Signal, 1)
signal.Notify(signals, os.Interrupt, syscall.SIGTERM)
defer func() {
signal.Stop(signals)
cancel()
}()
go func() {
select {
case <-signals:
fmt.Print("\nCancelling operations to external container registries\n")
cancel()
case <-ctx.Done():
}
}()
iClient := containers.NewClient(kubeContext)
containers, err := iClient.Find(ctx)
if err != nil {
return nil, fmt.Errorf("ERROR during images.Find() %w", err)
}
showNonSemver := viper.GetBool("show-non-semver")
showErrored := viper.GetBool("show-errored-containers")
includeAll := viper.GetBool("include-all")
return output.NewContainersOutput(containers.Images, containers.ErrImages, showNonSemver, showErrored, includeAll), nil
}

func handleHelm(kubeContext string) (*output.Output, error) {
h := nova_helm.NewHelm(kubeContext)
if viper.IsSet("desired-versions") {
klog.V(3).Infof("desired-versions is set - attempting to load them")
klog.V(8).Infof("raw desired-versions: %v", viper.Get("desired-versions"))

desiredVersion := viper.GetStringMapString("desired-versions")
for k, v := range desiredVersion {
klog.V(2).Infof("version override for %s: %s", k, v)
h.DesiredVersions = append(h.DesiredVersions, nova_helm.DesiredVersion{
Name: k,
Version: v,
})
}
}
releases, chartNames, err := h.GetReleaseOutput()
if err != nil {
return nil, fmt.Errorf("error getting helm releases: %s", err)
}
out := output.NewOutputWithHelmReleases(releases)
out.IncludeAll = viper.GetBool("include-all")

if viper.GetBool("poll-artifacthub") {
ahClient, err := nova_helm.NewArtifactHubPackageClient(version)
if err != nil {
return nil, fmt.Errorf("error setting up artifact hub client: %s", err)
}
packageRepos, err := ahClient.MultiSearch(chartNames)
if err != nil {
return nil, fmt.Errorf("Error getting artifacthub package repos: %v", err)
}
packages := ahClient.GetPackages(packageRepos)
klog.V(2).Infof("found %d possible package matches", len(packages))
for _, release := range releases {
o := nova_helm.FindBestArtifactHubMatch(release, packages)
if o != nil {
h.OverrideDesiredVersion(o)
out.HelmReleases = append(out.HelmReleases, *o)
}
}
}
if len(viper.GetStringSlice("url")) > 0 {
repos := viper.GetStringSlice("url")
helmRepos := nova_helm.NewRepos(repos)
outputObjects := h.GetHelmReleasesVersion(helmRepos, releases)
out.HelmReleases = append(out.HelmReleases, outputObjects...)
}
return &out, nil
}

func handleHelmAndContainers(kubeContext string) (*output.HelmAndContainersOutput, error) {
helmOutput, err := handleHelm(kubeContext)
if err != nil {
return nil, err
}
containersOutput, err := handleContainers(kubeContext)
if err != nil {
return nil, err
}
return output.NewHelmAndContainersOutput(*helmOutput, *containersOutput), nil
}
72 changes: 71 additions & 1 deletion docs/usage.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,8 @@ nova find --wide
## Options
```
Flags:
--containers Show old container image versions instead of helm chart versions. There will be no helm output if this flag is set.
--containers Show old container image versions. There will be no helm output unless the --helm flag is set as well
--helm Show old helm releases. You can combine this flag with `--containers` to have both output in a single run.
-h, --help help for find
--show-non-semver When finding container images, show all containers even if they don't follow semver.
Expand Down Expand Up @@ -134,3 +135,72 @@ Container Name Error
============== =====
examplething.com/testing:v1.0.0 Get "https://examplething.com/v2/": dial tcp: lookup examplethingert.com: no such host =====
```

## Helm Releases and Container Images combined output
If you want to run nova and both helm releases and containers images results in a single run

Below is sample output for Nova when using the `--helm --containers` flag

```
$ nova --format=table find --helm --containers
Release Name Installed Latest Old Deprecated
============ ========= ====== === ==========
cert-manager v1.9.1 1.9.1 false false
insights-agent 2.0.7 2.6.8 true false
Container Name Current Version Old Latest Latest Minor Latest Patch
============== =============== === ====== ============= =============
k8s.gcr.io/coredns/coredns v1.8.4 true v1.9.3 v1.9.3 v1.8.6
k8s.gcr.io/etcd 3.5.0-0 true 3.5.4-0 3.5.0-0 3.5.0-0
k8s.gcr.io/kube-apiserver v1.22.9 true v1.25.0 v1.25.0 v1.22.13
k8s.gcr.io/kube-controller-manager v1.22.9 true v1.25.0 v1.25.0 v1.22.13
k8s.gcr.io/kube-proxy v1.22.9 true v1.25.0 v1.25.0 v1.22.13
k8s.gcr.io/kube-scheduler v1.22.9 true v1.25.0 v1.25.0 v1.22.13
```

You can print the output in `json` format

```
$ nova --format=json find --helm --containers | jq
{
"helm": [
{
"release": "cert-manager",
"chartName": "cert-manager",
"namespace": "cert-manager",
"description": "A Helm chart for cert-manager",
"home": "https://github.com/cert-manager/cert-manager",
"icon": "https://raw.githubusercontent.com/cert-manager/cert-manager/d53c0b9270f8cd90d908460d69502694e1838f5f/logo/logo-small.png",
"Installed": { "version": "v1.9.1", "appVersion": "v1.9.1" },
"Latest": { "version": "1.9.1", "appVersion": "v1.9.1" },
"outdated": false,
"deprecated": false,
"helmVersion": "3",
"overridden": false
}
],
"include_all": false,
"container": {
"container_images": [
{
"name": "k8s.gcr.io/kube-scheduler",
"current_version": "v1.22.9",
"latest_version": "v1.25.0",
"latest_minor_version": "v1.25.0",
"latest_patch_version": "v1.22.13",
"outdated": true,
"affectedWorkloads": [
{
"name": "kube-scheduler-kind-control-plane",
"namespace": "kube-system",
"kind": "Pod",
"container": "kube-scheduler"
}
]
}
],
"err_images": null,
"latest_string_found": false
}
}
```
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ go 1.17

require (
github.com/Masterminds/semver/v3 v3.1.1
github.com/fairwindsops/controller-utils v0.1.2
github.com/google/go-containerregistry v0.10.0
github.com/mcuadros/go-version v0.0.0-20190830083331-035f6764e8d2
github.com/pkg/errors v0.9.1
Expand Down
11 changes: 11 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -462,6 +462,8 @@ github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQL
github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U=
github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4=
github.com/fairwindsops/controller-utils v0.1.2 h1:QskWhyiZAYtp4DfL8ZWrUubIQoJ6Ci7gm0hVje7DoGM=
github.com/fairwindsops/controller-utils v0.1.2/go.mod h1:4vc5Tpnak9VIE75sFg8J3iz28BGiP+omPv9QaSngzuk=
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
Expand Down Expand Up @@ -1806,6 +1808,7 @@ golang.org/x/time v0.0.0-20200416051211-89c76fbcd5d1/go.mod h1:tRJNPiyCQ0inRvYxb
golang.org/x/time v0.0.0-20200630173020-3af7569d3a1e/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20210723032227-1f47c861a9ac/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20220609170525-579cf78fd858 h1:Dpdu/EMxGMFgq0CeYMh4fazTD2vtlZRYE7wyynxJb9U=
golang.org/x/time v0.0.0-20220609170525-579cf78fd858/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
Expand Down Expand Up @@ -2200,6 +2203,7 @@ k8s.io/api v0.20.1/go.mod h1:KqwcCVogGxQY3nBlRpwt+wpAMF/KjaCc7RpywacvqUo=
k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ=
k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8=
k8s.io/api v0.22.5/go.mod h1:mEhXyLaSD1qTOf40rRiKXkc+2iCem09rWLlFwhCEiAs=
k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI=
k8s.io/api v0.24.2/go.mod h1:AHqbSkTm6YrQ0ObxjO3Pmp/ubFF/KuM7jU+3khoBsOg=
k8s.io/api v0.24.4 h1:I5Y645gJ8zWKawyr78lVfDQkZrAViSbeRXsPZWTxmXk=
k8s.io/api v0.24.4/go.mod h1:42pVfA0NRxrtJhZQOvRSyZcJihzAdU59WBtTjYcB0/M=
Expand All @@ -2210,6 +2214,7 @@ k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRp
k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc=
k8s.io/apimachinery v0.22.1/go.mod h1:O3oNtNadZdeOMxHFVxOreoznohCpy0z6mocxbZr7oJ0=
k8s.io/apimachinery v0.22.5/go.mod h1:xziclGKwuuJ2RM5/rSFQSYAj0zdbci3DH8kj+WvyN0U=
k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM=
k8s.io/apimachinery v0.24.2/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
k8s.io/apimachinery v0.24.4 h1:S0Ur3J/PbivTcL43EdSdPhqCqKla2NIuneNwZcTDeGQ=
k8s.io/apimachinery v0.24.4/go.mod h1:82Bi4sCzVBdpYjyI4jY6aHX+YCUchUIrZrXKedjd2UM=
Expand All @@ -2223,6 +2228,7 @@ k8s.io/client-go v0.20.1/go.mod h1:/zcHdt1TeWSd5HoUe6elJmHSQ6uLLgp4bIJHVEuy+/Y=
k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k=
k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0=
k8s.io/client-go v0.22.5/go.mod h1:cs6yf/61q2T1SdQL5Rdcjg9J1ElXSwbjSrW2vFImM4Y=
k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0=
k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA=
k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30=
k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0=
Expand All @@ -2248,13 +2254,15 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
k8s.io/klog/v2 v2.9.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec=
k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/klog/v2 v2.70.1 h1:7aaoSdahviPmR+XkS7FyxlkkXs6tHISSG03RxleQAVQ=
k8s.io/klog/v2 v2.70.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o=
k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM=
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
k8s.io/kube-openapi v0.0.0-20211109043538-20434351676c/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
k8s.io/kube-openapi v0.0.0-20211115234752-e816edb12b65/go.mod h1:sX9MT8g7NVZM5lVL/j8QyCCJe8YSMW30QvGZWaCIDIk=
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8 h1:yEQKdMCjzAOvGeiTwG4hO/hNVNtDOuUFvMUZ0OlaIzs=
k8s.io/kube-openapi v0.0.0-20220627174259-011e075b9cb8/go.mod h1:mbJ+NSUoAhuR14N0S63bPkh8MGVSo3VYSGZtH/mfMe0=
Expand All @@ -2265,6 +2273,8 @@ k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210819203725-bdf08cb9a70a/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20210930125809-cb0fa318a74b/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20211208161948-7d6a63dca704/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
mvdan.cc/gofumpt v0.1.1/go.mod h1:yXG1r1WqZVKWbVRtBWKWX9+CxGYfA51nSomhM0woR48=
Expand All @@ -2281,6 +2291,7 @@ sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.22/go.mod h1:LEScyz
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw=
sigs.k8s.io/controller-runtime v0.12.2 h1:nqV02cvhbAj7tbt21bpPpTByrXGn2INHRsi39lXy9sE=
sigs.k8s.io/controller-runtime v0.12.2/go.mod h1:qKsk4WE6zW2Hfj0G4v10EnNB2jMG1C+NTb8h+DwCoU0=
sigs.k8s.io/json v0.0.0-20211020170558-c049b76a60c6/go.mod h1:p4QtZmO4uMYipTQNzagwnNoseA6OxSUutVw05NhYDRs=
sigs.k8s.io/json v0.0.0-20211208200746-9f7c6b3444d2/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124 h1:2sgAQQcY0dEW2SsQwTXhQV4vO6+rSslYx8K3XmM5hqQ=
sigs.k8s.io/json v0.0.0-20220525155127-227cbc7cc124/go.mod h1:B+TnT182UBxE84DiCz4CVE26eOSDAeYCpfDnC2kdKMY=
Expand Down
2 changes: 1 addition & 1 deletion main.go
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import (
var (
// version is set during build
version = "development"
// comit is set during build
// commit is set during build
commit = "n/a"
)

Expand Down
Loading

0 comments on commit e73dbce

Please sign in to comment.