From 3437df8676d9697fca587b9ab0d2f6395637cb4f Mon Sep 17 00:00:00 2001 From: Arsen Musayelyan Date: Tue, 22 Nov 2022 12:51:45 -0800 Subject: [PATCH] Add a way to check the minimum version supported by a LURE repo --- .gitignore | 3 ++- .goreleaser.yaml | 1 + Makefile | 5 ++++- repo.go | 43 ++++++++++++++++++++++++++++++++++++++++++ scripts/gen-version.sh | 3 +++ version.go | 6 ++++++ 6 files changed, 59 insertions(+), 2 deletions(-) create mode 100755 scripts/gen-version.sh diff --git a/.gitignore b/.gitignore index 49b3f25..50684a1 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /lure -/dist/ \ No newline at end of file +/dist/ +/version.txt \ No newline at end of file diff --git a/.goreleaser.yaml b/.goreleaser.yaml index c30390e..f4268f7 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -1,6 +1,7 @@ before: hooks: - go mod tidy + - go generate builds: - id: lure env: diff --git a/Makefile b/Makefile index 3f9ca10..88b099b 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -lure: +lure: version.txt go build clean: @@ -9,5 +9,8 @@ install: lure uninstall: rm -f /usr/local/bin/lure + +version.txt: + go generate .PHONY: install clean uninstall \ No newline at end of file diff --git a/repo.go b/repo.go index 6aa8892..0c7a412 100644 --- a/repo.go +++ b/repo.go @@ -41,6 +41,12 @@ func (p PkgNotFoundError) Error() string { return "package '" + p.pkgName + "' could not be found in any repository" } +type RepoConfig struct { + Repo struct { + MinVersion string `toml:"minVersion"` + } +} + func addrepoCmd(c *cli.Context) error { name := c.String("name") repoURL := c.String("url") @@ -223,6 +229,26 @@ func pullRepos(ctx context.Context) error { } else if err != nil { return err } + + fl, err := w.Filesystem.Open("lure-repo.toml") + if err != nil { + log.Warn("Git repository does not appear to be a valid LURE repo").Str("repo", repo.Name).Send() + continue + } + + var repoCfg RepoConfig + err = toml.NewDecoder(fl).Decode(&repoCfg) + if err != nil { + return err + } + fl.Close() + + currentVer, _, _ := strings.Cut(version, "-") + if vercmp(currentVer, repoCfg.Repo.MinVersion) == -1 { + log.Warn("LURE repo's minumum LURE version is greater than the current version. Try updating LURE if something doesn't work.").Str("repo", repo.Name).Send() + } + + continue } err = os.RemoveAll(repoDir) @@ -246,6 +272,23 @@ func pullRepos(ctx context.Context) error { if err != nil { return err } + + fl, err := os.Open(filepath.Join(repoDir, "lure-repo.toml")) + if err != nil { + log.Warn("Git repository does not appear to be a valid LURE repo").Str("repo", repo.Name).Send() + } + + var repoCfg RepoConfig + err = toml.NewDecoder(fl).Decode(&repoCfg) + if err != nil { + return err + } + fl.Close() + + currentVer, _, _ := strings.Cut(version, "-") + if vercmp(currentVer, repoCfg.Repo.MinVersion) == -1 { + log.Warn("LURE repo's minumum LURE version is greater than the current version. Try updating LURE if something doesn't work.").Str("repo", repo.Name).Send() + } } return nil diff --git a/scripts/gen-version.sh b/scripts/gen-version.sh new file mode 100755 index 0000000..9eb213e --- /dev/null +++ b/scripts/gen-version.sh @@ -0,0 +1,3 @@ +#!/bin/bash + +git describe --tags > version.txt \ No newline at end of file diff --git a/version.go b/version.go index d1e4cd7..9997d58 100644 --- a/version.go +++ b/version.go @@ -19,12 +19,18 @@ package main import ( + _ "embed" "strconv" "strings" "golang.org/x/exp/slices" ) +//go:generate scripts/gen-version.sh + +//go:embed version.txt +var version string + // vercmp compares two version strings. // It returns 1 if v1 is greater, // 0 if the versions are equal,