From 1812486b19fd4aba3b17f8da7a74c8ed59581e86 Mon Sep 17 00:00:00 2001 From: Justin Hawkins Date: Thu, 17 Jun 2021 18:47:59 +0930 Subject: [PATCH] Switch to semver, basic test. --- build-release.pl | 5 ++++- config/config.go | 22 +++++++++++++++++++++- config/config_test.go | 13 +++++++++++++ dau.go | 4 +++- go.mod | 1 + go.sum | 12 ++++++++++++ 6 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 config/config_test.go diff --git a/build-release.pl b/build-release.pl index 72dbde5..38d2528 100755 --- a/build-release.pl +++ b/build-release.pl @@ -7,12 +7,15 @@ open my $fh, "<", "config/config.go" || die $!; my $version; while (<$fh>) { - $version = $1 if /^const\s+CurrentVersion.*?"([\d\.]+)"/; + $version = $1 if /^const\s+CurrentVersion.*?"(v[\d\.]+)"/; } close $fh; die "no version?" unless defined $version; +# quit if tests fail +system("go test ./...") && die "not building release with failing tests"; + # so lazy system "rm", "-rf", "release", "dist"; system "mkdir", "release"; diff --git a/config/config.go b/config/config.go index 551e9b9..e555166 100644 --- a/config/config.go +++ b/config/config.go @@ -10,6 +10,7 @@ import ( daulog "github.com/tardisx/discord-auto-upload/log" "github.com/mitchellh/go-homedir" + "golang.org/x/mod/semver" ) // Config for the application @@ -22,7 +23,7 @@ var Config struct { Exclude string } -const CurrentVersion string = "0.10" +const CurrentVersion string = "v1.0.0" // Load the current config or initialise with defaults func LoadOrInit() { @@ -76,3 +77,22 @@ func configPath() string { homeDir := homeDir() return homeDir + string(os.PathSeparator) + ".dau.json" } + +func NewVersionAvailable(v string) bool { + if !semver.IsValid(CurrentVersion) { + panic(fmt.Sprintf("my current version '%s' is not valid", CurrentVersion)) + } + if !semver.IsValid(v) { + // maybe this should just be a warning + log.Printf("passed in version '%s' is not valid - assuming no new version", v) + return false + } + comp := semver.Compare(v, CurrentVersion) + if comp == 0 { + return false + } + if comp == -1 { + return true + } + return false // they are using a newer one than exists? +} diff --git a/config/config_test.go b/config/config_test.go new file mode 100644 index 0000000..d03a9b5 --- /dev/null +++ b/config/config_test.go @@ -0,0 +1,13 @@ +package config_test + +import ( + "testing" + + "github.com/tardisx/discord-auto-upload/config" +) + +func TestVersioning(t *testing.T) { + if !config.NewVersionAvailable("v0.1.0") { + t.Error("should be a version newer than v0.1.0") + } +} diff --git a/dau.go b/dau.go index 6c38922..3a0fe75 100644 --- a/dau.go +++ b/dau.go @@ -99,7 +99,7 @@ func checkUpdates() { log.Fatal("could not parse JSON: ", err) } - if config.CurrentVersion < latest.TagName { + if config.NewVersionAvailable(latest.TagName) { fmt.Printf("You are currently on version %s, but version %s is available\n", config.CurrentVersion, latest.TagName) fmt.Println("----------- Release Info -----------") fmt.Println(latest.Body) @@ -108,6 +108,8 @@ func checkUpdates() { daulog.SendLog(fmt.Sprintf("New version available: %s - download at https://github.com/tardisx/discord-auto-upload/releases/latest", latest.TagName), daulog.LogTypeInfo) } + daulog.SendLog("already running latest version", daulog.LogTypeInfo) + } func parseOptions() { diff --git a/go.mod b/go.mod index 01e1df5..5ba2837 100644 --- a/go.mod +++ b/go.mod @@ -8,4 +8,5 @@ require ( github.com/mitchellh/go-homedir v1.1.0 github.com/pborman/getopt v1.1.0 golang.org/x/image v0.0.0-20210504121937-7319ad40d33e + golang.org/x/mod v0.4.2 ) diff --git a/go.sum b/go.sum index 5898072..fb0c229 100644 --- a/go.sum +++ b/go.sum @@ -6,6 +6,18 @@ github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/pborman/getopt v1.1.0 h1:eJ3aFZroQqq0bWmraivjQNt6Dmm5M0h2JcDW38/Azb0= github.com/pborman/getopt v1.1.0/go.mod h1:FxXoW1Re00sQG/+KIkuSqRL/LwQgSkv7uyac+STFsbk= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e h1:PzJMNfFQx+QO9hrC1GwZ4BoPGeNGhfeQEgcQFArEjPk= golang.org/x/image v0.0.0-20210504121937-7319ad40d33e/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= +golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= +golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=