/
updates.go
90 lines (80 loc) · 2.89 KB
/
updates.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
/*
Copyright NetFoundry Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
https://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package util
import (
"fmt"
"github.com/openziti/ziti/common/getziti"
"github.com/openziti/ziti/ziti/constants"
"os"
"strings"
"github.com/fatih/color"
"github.com/blang/semver"
"github.com/michaelquigley/pfxlog"
"github.com/openziti/ziti/common/version"
)
func LogReleaseVersionCheck(zitiComponent string) {
logger := pfxlog.Logger()
if strings.ToLower(os.Getenv("ZITI_CHECK_VERSION")) == "true" {
logger.Debug("ZITI_CHECK_VERSION is true. starting version check")
developmentSemver, _ := semver.Parse("0.0.0")
latestGithubRelease, err := getziti.GetHighestVersionGitHubReleaseInfo(constants.ZITI, false)
if err != nil {
logger.Debugf("failed to find latest GitHub version with error: %s", err)
return // soft-fail version check if GitHub API is unavailable
}
// compose current build's semver as version string and semver object
currentBuildVersion := version.GetVersion()
currentBuildSemver, err := semver.ParseTolerant(currentBuildVersion) // ParseTolerant trims leading "v"
if err != nil {
logger.Warnf("failed to parse current build version as semver: '%s' with error: %s", version.GetVersion(), err)
return
}
// ignore non-release builds and current release build
if currentBuildSemver.EQ(developmentSemver) {
logger.Debugf(
"this build of %s is unreleased v%s",
zitiComponent,
developmentSemver,
)
} else if latestGithubRelease.SemVer.GT(currentBuildSemver) {
yellow := color.New(color.FgYellow).SprintFunc()
green := color.New(color.FgGreen).SprintFunc()
fmt.Fprintf(os.Stderr,
`
*********************************************************************************
An update with %s is available for %s %s from
https://github.com/openziti/%s/releases/latest/
*********************************************************************************
`,
green("v"+latestGithubRelease.SemVer.String()),
zitiComponent,
yellow("v"+currentBuildSemver.String()),
constants.ZITI,
)
logger.Debugf(
"this v%s build of %s is superseded by v%s",
currentBuildSemver,
zitiComponent,
latestGithubRelease,
)
} else if latestGithubRelease.SemVer.EQ(currentBuildSemver) {
logger.Debugf(
"this build of %s is the latest release v%s",
zitiComponent,
currentBuildSemver,
)
}
} else {
logger.Debug("ZITI_CHECK_VERSION is not 'true'. skipping version check")
}
}