keel/types/types.go

146 lines
3.0 KiB
Go

package types
import (
"bytes"
"fmt"
"time"
)
const KeelDefaultPort = 9300
// KeelPolicyLabel - keel update policies (version checking)
const KeelPolicyLabel = "keel.sh/policy"
// KeelTriggerLabel - trigger label is used to specify custom trigger types
// for example keel.sh/trigger=poll would signal poll trigger to start watching for repository
// changes
const KeelTriggerLabel = "keel.sh/trigger"
// KeelPollScheduleAnnotation - optional variable to setup custom schedule for polling, defaults to @every 10m
const KeelPollScheduleAnnotation = "keel.sh/pollSchedule"
// KeelPollDefaultSchedule - defaul polling schedule
const KeelPollDefaultSchedule = "@every 1m"
// KeelDigestAnnotation - digest annotation
const KeelDigestAnnotation = "keel.sh/digest"
type Repository struct {
Host string `json:"host"`
Name string `json:"name"`
Tag string `json:"tag"`
Digest string `json:"digest"` // optional digest field
}
type Event struct {
Repository Repository `json:"repository,omitempty"`
CreatedAt time.Time `json:"createdAt,omitempty"`
// optional field to identify trigger
TriggerName string `json:"triggerName,omitempty"`
}
type Version struct {
Major int64
Minor int64
Patch int64
PreRelease string
Metadata string
Prefix string // v prefix
}
func (v Version) String() string {
var buf bytes.Buffer
if v.Prefix != "" {
fmt.Fprintf(&buf, v.Prefix)
}
fmt.Fprintf(&buf, "%d.%d.%d", v.Major, v.Minor, v.Patch)
if v.PreRelease != "" {
fmt.Fprintf(&buf, "-%s", v.PreRelease)
}
if v.Metadata != "" {
fmt.Fprintf(&buf, "+%s", v.Metadata)
}
return buf.String()
}
// TriggerType - trigger types
type TriggerType int
// Available trigger types
const (
TriggerTypeDefault TriggerType = iota // default policy is to wait for external triggers
TriggerTypePoll // poll policy sets up watchers for the affected repositories
)
func (t TriggerType) String() string {
switch t {
case TriggerTypeDefault:
return "default"
case TriggerTypePoll:
return "poll"
default:
return "unknown"
}
}
func ParseTrigger(trigger string) TriggerType {
switch trigger {
case "poll":
return TriggerTypePoll
}
return TriggerTypeDefault
}
// PolicyType - policy type
type PolicyType int
// ParsePolicy - parse policy type
func ParsePolicy(policy string) PolicyType {
switch policy {
case "all":
return PolicyTypeAll
case "major":
return PolicyTypeMajor
case "minor":
return PolicyTypeMinor
case "patch":
return PolicyTypePatch
case "force":
return PolicyTypeForce
default:
return PolicyTypeNone
}
}
func (t PolicyType) String() string {
switch t {
case PolicyTypeNone:
return "none"
case PolicyTypeAll:
return "all"
case PolicyTypeMajor:
return "major"
case PolicyTypeMinor:
return "minor"
case PolicyTypePatch:
return "patch"
case PolicyTypeForce:
return "force"
default:
return ""
}
}
// available policies
const (
PolicyTypeNone = iota
PolicyTypeAll
PolicyTypeMajor
PolicyTypeMinor
PolicyTypePatch
PolicyTypeForce // update always when a new image is available
)