From 53a1fcb90304a0fb690e80730e9d89c785e715a7 Mon Sep 17 00:00:00 2001 From: bakito Date: Sat, 6 Jul 2024 11:41:53 +0200 Subject: [PATCH] skip if newer version is installed --- Makefile | 18 +++++++++++++++++- pkg/fetcher/fetch.go | 14 ++++++++++++++ 2 files changed, 31 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 4cd3cfd..3bca16c 100644 --- a/Makefile +++ b/Makefile @@ -27,15 +27,23 @@ $(LOCALBIN): mkdir -p $(LOCALBIN) ## Tool Binaries +DEEPCOPY_GEN ?= $(LOCALBIN)/deepcopy-gen GINKGO ?= $(LOCALBIN)/ginkgo GOLANGCI_LINT ?= $(LOCALBIN)/golangci-lint GORELEASER ?= $(LOCALBIN)/goreleaser +OAPI_CODEGEN ?= $(LOCALBIN)/oapi-codegen SEMVER ?= $(LOCALBIN)/semver ## Tool Versions +DEEPCOPY_GEN_VERSION ?= v0.30.2 GORELEASER_VERSION ?= v2.0.1 +OAPI_CODEGEN_VERSION ?= v2.3.0 ## Tool Installer +.PHONY: deepcopy-gen +deepcopy-gen: $(DEEPCOPY_GEN) ## Download deepcopy-gen locally if necessary. +$(DEEPCOPY_GEN): $(LOCALBIN) + test -s $(LOCALBIN)/deepcopy-gen || GOBIN=$(LOCALBIN) go install k8s.io/code-generator/cmd/deepcopy-gen@$(DEEPCOPY_GEN_VERSION) .PHONY: ginkgo ginkgo: $(GINKGO) ## Download ginkgo locally if necessary. $(GINKGO): $(LOCALBIN) @@ -48,6 +56,10 @@ $(GOLANGCI_LINT): $(LOCALBIN) goreleaser: $(GORELEASER) ## Download goreleaser locally if necessary. $(GORELEASER): $(LOCALBIN) test -s $(LOCALBIN)/goreleaser || GOBIN=$(LOCALBIN) go install github.com/goreleaser/goreleaser/v2@$(GORELEASER_VERSION) +.PHONY: oapi-codegen +oapi-codegen: $(OAPI_CODEGEN) ## Download oapi-codegen locally if necessary. +$(OAPI_CODEGEN): $(LOCALBIN) + test -s $(LOCALBIN)/oapi-codegen || GOBIN=$(LOCALBIN) go install github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen@$(OAPI_CODEGEN_VERSION) .PHONY: semver semver: $(SEMVER) ## Download semver locally if necessary. $(SEMVER): $(LOCALBIN) @@ -57,10 +69,14 @@ $(SEMVER): $(LOCALBIN) .PHONY: update-toolbox-tools update-toolbox-tools: @rm -f \ + $(LOCALBIN)/deepcopy-gen \ $(LOCALBIN)/ginkgo \ $(LOCALBIN)/golangci-lint \ $(LOCALBIN)/goreleaser \ + $(LOCALBIN)/oapi-codegen \ $(LOCALBIN)/semver toolbox makefile -f $(LOCALDIR)/Makefile \ - github.com/goreleaser/goreleaser/v2 + k8s.io/code-generator/cmd/deepcopy-gen@github.com/kubernetes/code-generator \ + github.com/goreleaser/goreleaser/v2 \ + github.com/deepmap/oapi-codegen/v2/cmd/oapi-codegen ## toolbox - end diff --git a/pkg/fetcher/fetch.go b/pkg/fetcher/fetch.go index aff74f8..362da16 100644 --- a/pkg/fetcher/fetch.go +++ b/pkg/fetcher/fetch.go @@ -22,6 +22,7 @@ import ( "github.com/bakito/toolbox/version" "github.com/cavaliergopher/grab/v3" "github.com/go-resty/resty/v2" + "golang.org/x/mod/semver" "gopkg.in/yaml.v3" ) @@ -190,6 +191,12 @@ func (f *fetcher) handleTool(client *resty.Client, ver map[string]string, tmp st } } } + + if isNewer(currentVersion, tool.Version) { + log.Printf("✅ Skipping since newer version is instlled\n") + return nil + } + if tool.Version == currentVersion { if configVersion != "" { log.Printf("✅ Skipping since already configured version %s\n", configVersion) @@ -207,6 +214,13 @@ func (f *fetcher) handleTool(client *resty.Client, ver map[string]string, tmp st return nil } +func isNewer(toolVersion string, currentVersion string) bool { + if !semver.IsValid(toolVersion) || !semver.IsValid(currentVersion) { + return true + } + return semver.Compare(toolVersion, currentVersion) > 0 +} + func (f *fetcher) downloadViaGithub(tb *types.Toolbox, tool *types.Tool, ghr *types.GithubRelease, tmp string) error { matching := findMatching(tb, tool.Name, ghr.Assets) tool.CouldNotBeFound = true