summaryrefslogtreecommitdiffstats
path: root/models
diff options
context:
space:
mode:
authorLunny Xiao <xiaolunwen@gmail.com>2020-12-10 01:20:13 +0800
committerGitHub <noreply@github.com>2020-12-09 17:20:13 +0000
commit6edfa6bc88ed73fc5a31f1b2fe9f5587c932ada7 (patch)
treee6c479d97cbd006c3cc521ec77fde5c0d72b4cc1 /models
parent18e4477ad41a8733225d3c92eea5b91c12af1a94 (diff)
downloadgitea-6edfa6bc88ed73fc5a31f1b2fe9f5587c932ada7.tar.gz
gitea-6edfa6bc88ed73fc5a31f1b2fe9f5587c932ada7.zip
Fix broken migration on webhook (#13911)
* Fix broken migration on webhook * Fix lint Co-authored-by: John Olheiser <john.olheiser@gmail.com>
Diffstat (limited to 'models')
-rw-r--r--models/migrations/migrations.go2
-rw-r--r--models/migrations/v162.go59
-rw-r--r--models/repo_generate.go22
-rw-r--r--models/webhook.go10
4 files changed, 77 insertions, 16 deletions
diff --git a/models/migrations/migrations.go b/models/migrations/migrations.go
index d2ad20a36c..cac36edf50 100644
--- a/models/migrations/migrations.go
+++ b/models/migrations/migrations.go
@@ -267,6 +267,8 @@ var migrations = []Migration{
NewMigration("Add block on official review requests branch protection", addBlockOnOfficialReviewRequests),
// v161 -> v162
NewMigration("Convert task type from int to string", convertTaskTypeToString),
+ // v162 -> v163
+ NewMigration("Convert webhook task type from int to string", convertWebhookTaskTypeToString),
}
// GetCurrentDBVersion returns the current db version
diff --git a/models/migrations/v162.go b/models/migrations/v162.go
new file mode 100644
index 0000000000..b65eb4cd94
--- /dev/null
+++ b/models/migrations/v162.go
@@ -0,0 +1,59 @@
+// Copyright 2020 The Gitea Authors. All rights reserved.
+// Use of this source code is governed by a MIT-style
+// license that can be found in the LICENSE file.
+
+package migrations
+
+import (
+ "xorm.io/xorm"
+)
+
+func convertWebhookTaskTypeToString(x *xorm.Engine) error {
+ const (
+ GOGS int = iota + 1
+ SLACK
+ GITEA
+ DISCORD
+ DINGTALK
+ TELEGRAM
+ MSTEAMS
+ FEISHU
+ MATRIX
+ )
+
+ var hookTaskTypes = map[int]string{
+ GITEA: "gitea",
+ GOGS: "gogs",
+ SLACK: "slack",
+ DISCORD: "discord",
+ DINGTALK: "dingtalk",
+ TELEGRAM: "telegram",
+ MSTEAMS: "msteams",
+ FEISHU: "feishu",
+ MATRIX: "matrix",
+ }
+
+ type Webhook struct {
+ Type string `xorm:"char(16) index"`
+ }
+ if err := x.Sync2(new(Webhook)); err != nil {
+ return err
+ }
+
+ for i, s := range hookTaskTypes {
+ if _, err := x.Exec("UPDATE webhook set type = ? where hook_task_type=?", s, i); err != nil {
+ return err
+ }
+ }
+
+ sess := x.NewSession()
+ defer sess.Close()
+ if err := sess.Begin(); err != nil {
+ return err
+ }
+ if err := dropTableColumns(sess, "webhook", "hook_task_type"); err != nil {
+ return err
+ }
+
+ return sess.Commit()
+}
diff --git a/models/repo_generate.go b/models/repo_generate.go
index 0b234d8e34..b0016494c4 100644
--- a/models/repo_generate.go
+++ b/models/repo_generate.go
@@ -117,17 +117,17 @@ func GenerateWebhooks(ctx DBContext, templateRepo, generateRepo *Repository) err
for _, templateWebhook := range templateWebhooks {
generateWebhook := &Webhook{
- RepoID: generateRepo.ID,
- URL: templateWebhook.URL,
- HTTPMethod: templateWebhook.HTTPMethod,
- ContentType: templateWebhook.ContentType,
- Secret: templateWebhook.Secret,
- HookEvent: templateWebhook.HookEvent,
- IsActive: templateWebhook.IsActive,
- HookTaskType: templateWebhook.HookTaskType,
- OrgID: templateWebhook.OrgID,
- Events: templateWebhook.Events,
- Meta: templateWebhook.Meta,
+ RepoID: generateRepo.ID,
+ URL: templateWebhook.URL,
+ HTTPMethod: templateWebhook.HTTPMethod,
+ ContentType: templateWebhook.ContentType,
+ Secret: templateWebhook.Secret,
+ HookEvent: templateWebhook.HookEvent,
+ IsActive: templateWebhook.IsActive,
+ Type: templateWebhook.Type,
+ OrgID: templateWebhook.OrgID,
+ Events: templateWebhook.Events,
+ Meta: templateWebhook.Meta,
}
if err := createWebhook(ctx.e, generateWebhook); err != nil {
return err
diff --git a/models/webhook.go b/models/webhook.go
index 39122808fe..dbad2d3449 100644
--- a/models/webhook.go
+++ b/models/webhook.go
@@ -110,11 +110,11 @@ type Webhook struct {
Secret string `xorm:"TEXT"`
Events string `xorm:"TEXT"`
*HookEvent `xorm:"-"`
- IsSSL bool `xorm:"is_ssl"`
- IsActive bool `xorm:"INDEX"`
- HookTaskType HookTaskType
- Meta string `xorm:"TEXT"` // store hook-specific attributes
- LastStatus HookStatus // Last delivery status
+ IsSSL bool `xorm:"is_ssl"`
+ IsActive bool `xorm:"INDEX"`
+ Type HookTaskType `xorm:"char(16) 'type'"`
+ Meta string `xorm:"TEXT"` // store hook-specific attributes
+ LastStatus HookStatus // Last delivery status
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
UpdatedUnix timeutil.TimeStamp `xorm:"INDEX updated"`