@ -20,7 +20,7 @@ import (
"github.com/grafana/grafana/pkg/setting"
)
const grafanaLatestJSONURL = "https://raw.githubusercontent.com/grafana/grafana/main/latest.json "
const grafanaStableVersionURL = "https://grafana.com/api/grafana/versions/stable "
type GrafanaService struct {
hasUpdate bool
@ -92,13 +92,13 @@ func (s *GrafanaService) instrumentedCheckForUpdates(ctx context.Context) {
func ( s * GrafanaService ) checkForUpdates ( ctx context . Context ) error {
ctxLogger := s . log . FromContext ( ctx )
ctxLogger . Debug ( "Checking for updates" )
req , err := http . NewRequestWithContext ( ctx , http . MethodGet , grafanaLatestJSON URL , nil )
req , err := http . NewRequestWithContext ( ctx , http . MethodGet , grafanaStableVersion URL , nil )
if err != nil {
return err
}
resp , err := s . httpClient . Do ( req )
if err != nil {
return fmt . Errorf ( "failed to get latest.json repo from github .com: %w" , err )
return fmt . Errorf ( "failed to get stable version from grafana .com: %w" , err )
}
defer func ( ) {
if err := resp . Body . Close ( ) ; err != nil {
@ -107,27 +107,24 @@ func (s *GrafanaService) checkForUpdates(ctx context.Context) error {
} ( )
body , err := io . ReadAll ( resp . Body )
if err != nil {
return fmt . Errorf ( "update check failed, reading response from github .com: %w" , err )
return fmt . Errorf ( "update check failed, reading response from grafana .com: %w" , err )
}
type latestJSON struct {
Stable string ` json:"stable" `
Testing string ` json:"testing" `
type grafanaVersionJSON struct {
Version string ` json:"version" `
}
var latest latest JSON
var latest grafanaVersion JSON
err = json . Unmarshal ( body , & latest )
if err != nil {
return fmt . Errorf ( "failed to unmarshal latest.json : %w" , err )
return fmt . Errorf ( "failed to unmarshal response from grafana.com : %w" , err )
}
s . mutex . Lock ( )
defer s . mutex . Unlock ( )
if strings . Contains ( s . grafanaVersion , "-" ) {
s . latestVersion = latest . Testing
s . hasUpdate = ! strings . HasPrefix ( s . grafanaVersion , latest . Testing )
} else {
s . latestVersion = latest . Stable
s . hasUpdate = latest . Stable != s . grafanaVersion
// only check for updates in stable versions
if ! strings . Contains ( s . grafanaVersion , "-" ) {
s . latestVersion = latest . Version
s . hasUpdate = latest . Version != s . grafanaVersion
}
currVersion , err1 := version . NewVersion ( s . grafanaVersion )