166 lines
3.7 KiB
Go
166 lines
3.7 KiB
Go
package model
|
|
|
|
import (
|
|
"reflect"
|
|
"regexp"
|
|
)
|
|
|
|
// reids锁
|
|
const (
|
|
SagaTask = "_SagaTask_%d"
|
|
SagaRepoLockKey = "_SagaRepoLockKey_%d"
|
|
SagaLockValue = "_SagaLockValue"
|
|
)
|
|
|
|
// gitlab指令
|
|
const (
|
|
SagaCommandPlusOne = "+ok"
|
|
SagaCommandMerge = "+mr"
|
|
SagaCommandPlusOne1 = "+1"
|
|
SagaCommandMerge1 = "+merge"
|
|
)
|
|
|
|
// 任务状态
|
|
const (
|
|
TaskStatusFailed = 1 // 任务失败
|
|
TaskStatusSuccess = 2 // 任务成功
|
|
TaskStatusRunning = 3 // 任务运行中
|
|
TaskStatusWaiting = 4 // 任务等待
|
|
)
|
|
|
|
// CONTRIBUTORS define
|
|
const (
|
|
SagaContributorsName = "CONTRIBUTORS.md"
|
|
)
|
|
|
|
// RepoConfig def
|
|
type RepoConfig struct {
|
|
URL string
|
|
Group string
|
|
Name string
|
|
GName string // gitlab仓库别名
|
|
Language string
|
|
AuthBranches []string // 鉴权分支
|
|
TargetBranches []string // 分支白名单
|
|
TargetBranchRegexes []*regexp.Regexp
|
|
LockTimeout int32
|
|
MinReviewer int
|
|
RelatePipeline bool
|
|
DelayMerge bool
|
|
LimitAuth bool
|
|
AllowLabel string
|
|
SuperAuthUsers []string
|
|
}
|
|
|
|
// RequireReviewFolder ...
|
|
type RequireReviewFolder struct {
|
|
Folder string
|
|
Owners []string
|
|
Reviewers []string
|
|
}
|
|
|
|
// AuthUsers ...
|
|
type AuthUsers struct {
|
|
Owners []string
|
|
Reviewers []string
|
|
}
|
|
|
|
// ContactInfo def
|
|
type ContactInfo struct {
|
|
ID string `json:"id,omitempty" gorm:"column:id"`
|
|
UserName string `json:"english_name" gorm:"column:user_name"`
|
|
UserID string `json:"userid" gorm:"column:user_id"`
|
|
NickName string `json:"name" gorm:"column:nick_name"`
|
|
VisibleSaga bool `json:"visible_saga" gorm:"column:visible_saga"`
|
|
}
|
|
|
|
// RequireVisibleUser def
|
|
type RequireVisibleUser struct {
|
|
UserName string
|
|
NickName string
|
|
}
|
|
|
|
// AlmostEqual return the compare result with fields
|
|
func (contact *ContactInfo) AlmostEqual(other *ContactInfo) bool {
|
|
if contact.UserID == other.UserID &&
|
|
contact.UserName == other.UserName &&
|
|
contact.NickName == other.NickName {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// TaskInfo ...
|
|
type TaskInfo struct {
|
|
NoteID int
|
|
Event *HookComment
|
|
Repo *Repo
|
|
}
|
|
|
|
// MergeInfo ...
|
|
type MergeInfo struct {
|
|
PipelineID int
|
|
NoteID int
|
|
AuthorID int
|
|
UserName string
|
|
MRIID int
|
|
ProjID int
|
|
URL string
|
|
AuthBranches []string
|
|
SourceBranch string
|
|
TargetBranch string
|
|
MinReviewer int
|
|
LockTimeout int32
|
|
Title string
|
|
Description string
|
|
}
|
|
|
|
// Repo structure
|
|
type Repo struct {
|
|
Config *RepoConfig
|
|
}
|
|
|
|
// Update if config is changed
|
|
func (r *Repo) Update(conf *RepoConfig) bool {
|
|
if r.confEqual(conf) {
|
|
return false
|
|
}
|
|
r.Config = conf
|
|
return true
|
|
}
|
|
|
|
func (r *Repo) confEqual(conf *RepoConfig) bool {
|
|
if r.Config.URL == conf.URL &&
|
|
r.Config.Group == conf.Group &&
|
|
r.Config.Name == conf.Name &&
|
|
r.Config.GName == conf.GName &&
|
|
r.Config.Language == conf.Language &&
|
|
reflect.DeepEqual(r.Config.AuthBranches, conf.AuthBranches) &&
|
|
reflect.DeepEqual(r.Config.TargetBranches, conf.TargetBranches) &&
|
|
r.Config.LockTimeout == conf.LockTimeout &&
|
|
r.Config.MinReviewer == conf.MinReviewer &&
|
|
r.Config.RelatePipeline == conf.RelatePipeline &&
|
|
r.Config.DelayMerge == conf.DelayMerge &&
|
|
r.Config.LimitAuth == conf.LimitAuth &&
|
|
r.Config.AllowLabel == conf.AllowLabel &&
|
|
reflect.DeepEqual(r.Config.SuperAuthUsers, conf.SuperAuthUsers) {
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
|
|
// AuthUpdate ...
|
|
func (r *Repo) AuthUpdate(conf *RepoConfig) bool {
|
|
if r.Config.Group == conf.Group &&
|
|
r.Config.Name == conf.Name &&
|
|
reflect.DeepEqual(r.Config.AuthBranches, conf.AuthBranches) {
|
|
return false
|
|
}
|
|
return true
|
|
}
|
|
|
|
// WebHookUpdate ...
|
|
func (r *Repo) WebHookUpdate(conf *RepoConfig) bool {
|
|
return r.Config.URL != conf.URL
|
|
}
|