mirror of https://github.com/jetkvm/kvm.git
fix(ota): should only check update if target version is specified
This commit is contained in:
parent
740d9b61a0
commit
3fab951d43
|
|
@ -311,13 +311,27 @@ func (s *State) checkUpdateStatus(
|
|||
appUpdateStatus.available = false
|
||||
}
|
||||
|
||||
// Handle custom target versions
|
||||
if slices.Contains(params.Components, "app") && params.AppTargetVersion != "" {
|
||||
appUpdateStatus.available = appVersionRemote.String() != appUpdateStatus.localVersion
|
||||
components := params.Components
|
||||
// skip check if no components are specified
|
||||
if len(components) == 0 {
|
||||
return nil
|
||||
}
|
||||
|
||||
if slices.Contains(params.Components, "system") && params.SystemTargetVersion != "" {
|
||||
systemUpdateStatus.available = systemVersionRemote.String() != systemUpdateStatus.localVersion
|
||||
// TODO: simplify this
|
||||
if slices.Contains(components, "app") {
|
||||
if params.AppTargetVersion != "" {
|
||||
appUpdateStatus.available = appVersionRemote.String() != appVersionLocal.String()
|
||||
}
|
||||
} else {
|
||||
appUpdateStatus.available = false
|
||||
}
|
||||
|
||||
if slices.Contains(components, "system") {
|
||||
if params.SystemTargetVersion != "" {
|
||||
systemUpdateStatus.available = systemVersionRemote.String() != systemVersionLocal.String()
|
||||
}
|
||||
} else {
|
||||
systemUpdateStatus.available = false
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -0,0 +1,58 @@
|
|||
package ota
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"os"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/Masterminds/semver/v3"
|
||||
"github.com/rs/zerolog"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func pseudoGetLocalVersion() (systemVersion *semver.Version, appVersion *semver.Version, err error) {
|
||||
systemVersion = semver.MustParse("0.2.5")
|
||||
appVersion = semver.MustParse("0.4.7")
|
||||
return systemVersion, appVersion, nil
|
||||
}
|
||||
|
||||
func newOtaState() *State {
|
||||
logger := zerolog.New(os.Stdout).Level(zerolog.TraceLevel)
|
||||
otaState := NewState(Options{
|
||||
SkipConfirmSystem: true,
|
||||
Logger: &logger,
|
||||
ReleaseAPIEndpoint: "https://api.jetkvm.com/releases",
|
||||
GetHTTPClient: func() *http.Client {
|
||||
transport := http.DefaultTransport.(*http.Transport).Clone()
|
||||
client := &http.Client{
|
||||
Transport: transport,
|
||||
}
|
||||
return client
|
||||
},
|
||||
GetLocalVersion: pseudoGetLocalVersion,
|
||||
HwReboot: func(force bool, postRebootAction *PostRebootAction, delay time.Duration) error { return nil },
|
||||
ResetConfig: func() error { return nil },
|
||||
OnStateUpdate: func(state *RPCState) {},
|
||||
OnProgressUpdate: func(progress float32) {},
|
||||
})
|
||||
return otaState
|
||||
}
|
||||
|
||||
func TestCheckUpdateComponents(t *testing.T) {
|
||||
otaState := newOtaState()
|
||||
updateParams := UpdateParams{
|
||||
DeviceID: "test",
|
||||
IncludePreRelease: false,
|
||||
SystemTargetVersion: "0.2.2",
|
||||
Components: []string{"system"},
|
||||
}
|
||||
info, err := otaState.GetUpdateStatus(context.Background(), updateParams)
|
||||
t.Logf("update status: %+v", info)
|
||||
if err != nil {
|
||||
t.Fatalf("failed to check update: %v", err)
|
||||
}
|
||||
assert.True(t, info.SystemUpdateAvailable)
|
||||
assert.False(t, info.AppUpdateAvailable)
|
||||
}
|
||||
|
|
@ -203,6 +203,7 @@ type Options struct {
|
|||
HwReboot HwRebootFunc
|
||||
ReleaseAPIEndpoint string
|
||||
ResetConfig ResetConfigFunc
|
||||
SkipConfirmSystem bool
|
||||
}
|
||||
|
||||
// NewState creates a new OTA state
|
||||
|
|
@ -221,7 +222,9 @@ func NewState(opts Options) *State {
|
|||
releaseAPIEndpoint: opts.ReleaseAPIEndpoint,
|
||||
resetConfig: opts.ResetConfig,
|
||||
}
|
||||
if !opts.SkipConfirmSystem {
|
||||
go s.confirmCurrentSystem()
|
||||
}
|
||||
return s
|
||||
}
|
||||
|
||||
|
|
|
|||
4
ota.go
4
ota.go
|
|
@ -91,7 +91,7 @@ func getUpdateStatus(includePreRelease bool) (*ota.UpdateStatus, error) {
|
|||
updateStatus.Error = err.Error()
|
||||
}
|
||||
|
||||
logger.Info().Interface("updateStatus", updateStatus).Msg("Update status")
|
||||
otaLogger.Info().Interface("updateStatus", updateStatus).Msg("Update status")
|
||||
|
||||
return updateStatus, nil
|
||||
}
|
||||
|
|
@ -189,7 +189,7 @@ func rpcTryUpdateComponents(params updateParams, includePreRelease bool, resetCo
|
|||
go func() {
|
||||
err := otaState.TryUpdate(context.Background(), updateParams)
|
||||
if err != nil {
|
||||
logger.Warn().Err(err).Msg("failed to try update")
|
||||
otaLogger.Warn().Err(err).Msg("failed to try update")
|
||||
}
|
||||
}()
|
||||
return nil
|
||||
|
|
|
|||
Loading…
Reference in New Issue