Files
hetzner-api-dyndns-records-…/internal/updateprotocol/protocol.go
T
admin f02ec9977c
Container-Image veröffentlichen / container (push) Has been cancelled
feat: add resilient updates and access controls
2026-08-28 14:02:07 +02:00

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)
}