41 lines
1.1 KiB
Go
41 lines
1.1 KiB
Go
package updateprotocol
|
|
|
|
import (
|
|
"regexp"
|
|
"time"
|
|
)
|
|
|
|
var releaseVersionPattern = regexp.MustCompile(`^v(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)\.(?:0|[1-9][0-9]*)$`)
|
|
|
|
const (
|
|
PhaseIdle = "idle"
|
|
PhaseQueued = "queued"
|
|
PhasePulling = "pulling"
|
|
PhaseRestarting = "restarting"
|
|
PhaseVerifying = "verifying"
|
|
PhaseComplete = "complete"
|
|
PhaseFailed = "failed"
|
|
)
|
|
|
|
type Request struct {
|
|
Version string `json:"version"`
|
|
RegistryUsername string `json:"registry_username"`
|
|
RegistryToken string `json:"registry_token"`
|
|
}
|
|
|
|
type Status struct {
|
|
Phase string `json:"phase"`
|
|
TargetVersion string `json:"target_version,omitempty"`
|
|
Message string `json:"message,omitempty"`
|
|
StartedAt time.Time `json:"started_at,omitempty"`
|
|
UpdatedAt time.Time `json:"updated_at,omitempty"`
|
|
}
|
|
|
|
func (s Status) Busy() bool {
|
|
return s.Phase == PhaseQueued || s.Phase == PhasePulling || s.Phase == PhaseRestarting || s.Phase == PhaseVerifying
|
|
}
|
|
|
|
func ValidVersion(version string) bool {
|
|
return len(version) <= 64 && releaseVersionPattern.MatchString(version)
|
|
}
|