(ctx context.Context)
| 158 | } |
| 159 | |
| 160 | func (c *App) maybeCheckForUpdates(ctx context.Context) (string, error) { |
| 161 | if v := os.Getenv(c.EnvName(checkForUpdatesEnvar)); v != "" { |
| 162 | // see if environment variable is set to false. |
| 163 | if b, err := strconv.ParseBool(v); err == nil && !b { |
| 164 | return "", errors.New("update check disabled") |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | us, err := c.getUpdateState() |
| 169 | if err != nil { |
| 170 | return "", err |
| 171 | } |
| 172 | |
| 173 | if err := c.maybeCheckGithub(ctx, us); err != nil { |
| 174 | return "", errors.Wrap(err, "error checking GitHub") |
| 175 | } |
| 176 | |
| 177 | log(ctx).Debugf("build version %v, available %v", ensureVPrefix(repo.BuildVersion), ensureVPrefix(us.AvailableVersion)) |
| 178 | |
| 179 | if us.AvailableVersion == "" || semver.Compare(ensureVPrefix(repo.BuildVersion), ensureVPrefix(us.AvailableVersion)) >= 0 { |
| 180 | // no new version available |
| 181 | return "", nil |
| 182 | } |
| 183 | |
| 184 | if clock.Now().After(us.NextNotifyTime) { |
| 185 | us.NextNotifyTime = clock.Now().Add(c.updateAvailableNotifyInterval) |
| 186 | if err := c.writeUpdateState(us); err != nil { |
| 187 | return "", errors.Wrap(err, "unable to write update state") |
| 188 | } |
| 189 | |
| 190 | return us.AvailableVersion, nil |
| 191 | } |
| 192 | |
| 193 | // no time to notify yet |
| 194 | return "", nil |
| 195 | } |
| 196 | |
| 197 | func (c *App) maybeCheckGithub(ctx context.Context, us *updateState) error { |
| 198 | if !clock.Now().After(us.NextCheckTime) { |
no test coverage detected