diff --git a/server/model/const.go b/server/model/const.go index ac4ce0458..7538e6e7b 100644 --- a/server/model/const.go +++ b/server/model/const.go @@ -25,6 +25,12 @@ const ( EventManual WebhookEvent = "manual" ) +type WebhookEventList []WebhookEvent + +func (wel WebhookEventList) Len() int { return len(wel) } +func (wel WebhookEventList) Swap(i, j int) { wel[i], wel[j] = wel[j], wel[i] } +func (wel WebhookEventList) Less(i, j int) bool { return wel[i] < wel[j] } + func ValidateWebhookEvent(s WebhookEvent) bool { switch s { case EventPush, EventPull, EventTag, EventDeploy, EventCron, EventManual: diff --git a/server/model/secret.go b/server/model/secret.go index 9a0a7dac8..f2eacc5c3 100644 --- a/server/model/secret.go +++ b/server/model/secret.go @@ -20,6 +20,7 @@ import ( "fmt" "path/filepath" "regexp" + "sort" ) var ( @@ -83,6 +84,11 @@ func (Secret) TableName() string { return "secrets" } +// BeforeInsert will sort events before inserted into database +func (s *Secret) BeforeInsert() { + s.Events = sortEvents(s.Events) +} + // Global secret. func (s Secret) Global() bool { return s.RepoID == 0 && s.Owner == "" @@ -151,6 +157,11 @@ func (s *Secret) Copy() *Secret { RepoID: s.RepoID, Name: s.Name, Images: s.Images, - Events: s.Events, + Events: sortEvents(s.Events), } } + +func sortEvents(wel WebhookEventList) WebhookEventList { + sort.Sort(wel) + return wel +} diff --git a/server/store/datastore/secret.go b/server/store/datastore/secret.go index 20feab7bc..36c3a577f 100644 --- a/server/store/datastore/secret.go +++ b/server/store/datastore/secret.go @@ -20,6 +20,8 @@ import ( "xorm.io/builder" ) +const orderSecretsBy = "secret_name" + func (s storage) SecretFind(repo *model.Repo, name string) (*model.Secret, error) { secret := &model.Secret{ RepoID: repo.ID, @@ -35,7 +37,7 @@ func (s storage) SecretList(repo *model.Repo, includeGlobalAndOrgSecrets bool) ( cond = cond.Or(builder.Eq{"secret_owner": repo.Owner}). Or(builder.And(builder.Eq{"secret_owner": ""}, builder.Eq{"secret_repo_id": 0})) } - return secrets, s.engine.Where(cond).Find(&secrets) + return secrets, s.engine.Where(cond).OrderBy(orderSecretsBy).Find(&secrets) } func (s storage) SecretCreate(secret *model.Secret) error { @@ -76,5 +78,5 @@ func (s storage) GlobalSecretFind(name string) (*model.Secret, error) { func (s storage) GlobalSecretList() ([]*model.Secret, error) { secrets := make([]*model.Secret, 0, perPage) - return secrets, s.engine.Where(builder.And(builder.Eq{"secret_owner": ""}, builder.Eq{"secret_repo_id": 0})).Find(&secrets) + return secrets, s.engine.Where(builder.And(builder.Eq{"secret_owner": ""}, builder.Eq{"secret_repo_id": 0})).OrderBy(orderSecretsBy).Find(&secrets) }