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
|
appUpdateStatus.available = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// Handle custom target versions
|
components := params.Components
|
||||||
if slices.Contains(params.Components, "app") && params.AppTargetVersion != "" {
|
// skip check if no components are specified
|
||||||
appUpdateStatus.available = appVersionRemote.String() != appUpdateStatus.localVersion
|
if len(components) == 0 {
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if slices.Contains(params.Components, "system") && params.SystemTargetVersion != "" {
|
// TODO: simplify this
|
||||||
systemUpdateStatus.available = systemVersionRemote.String() != systemUpdateStatus.localVersion
|
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
|
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
|
HwReboot HwRebootFunc
|
||||||
ReleaseAPIEndpoint string
|
ReleaseAPIEndpoint string
|
||||||
ResetConfig ResetConfigFunc
|
ResetConfig ResetConfigFunc
|
||||||
|
SkipConfirmSystem bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// NewState creates a new OTA state
|
// NewState creates a new OTA state
|
||||||
|
|
@ -221,7 +222,9 @@ func NewState(opts Options) *State {
|
||||||
releaseAPIEndpoint: opts.ReleaseAPIEndpoint,
|
releaseAPIEndpoint: opts.ReleaseAPIEndpoint,
|
||||||
resetConfig: opts.ResetConfig,
|
resetConfig: opts.ResetConfig,
|
||||||
}
|
}
|
||||||
go s.confirmCurrentSystem()
|
if !opts.SkipConfirmSystem {
|
||||||
|
go s.confirmCurrentSystem()
|
||||||
|
}
|
||||||
return s
|
return s
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
4
ota.go
4
ota.go
|
|
@ -91,7 +91,7 @@ func getUpdateStatus(includePreRelease bool) (*ota.UpdateStatus, error) {
|
||||||
updateStatus.Error = err.Error()
|
updateStatus.Error = err.Error()
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Info().Interface("updateStatus", updateStatus).Msg("Update status")
|
otaLogger.Info().Interface("updateStatus", updateStatus).Msg("Update status")
|
||||||
|
|
||||||
return updateStatus, nil
|
return updateStatus, nil
|
||||||
}
|
}
|
||||||
|
|
@ -189,7 +189,7 @@ func rpcTryUpdateComponents(params updateParams, includePreRelease bool, resetCo
|
||||||
go func() {
|
go func() {
|
||||||
err := otaState.TryUpdate(context.Background(), updateParams)
|
err := otaState.TryUpdate(context.Background(), updateParams)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Warn().Err(err).Msg("failed to try update")
|
otaLogger.Warn().Err(err).Msg("failed to try update")
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
return nil
|
return nil
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue