diff --git a/model/build.go b/model/build.go index 3ed1e3f9b..98ebd935b 100644 --- a/model/build.go +++ b/model/build.go @@ -2,41 +2,46 @@ package model // swagger:model build type Build struct { - ID int64 `json:"id" meddler:"build_id,pk"` - RepoID int64 `json:"-" meddler:"build_repo_id"` - ConfigID int64 `json:"-" meddler:"build_config_id"` - Number int `json:"number" meddler:"build_number"` - Parent int `json:"parent" meddler:"build_parent"` - Event string `json:"event" meddler:"build_event"` - Status string `json:"status" meddler:"build_status"` - Error string `json:"error" meddler:"build_error"` - Enqueued int64 `json:"enqueued_at" meddler:"build_enqueued"` - Created int64 `json:"created_at" meddler:"build_created"` - Started int64 `json:"started_at" meddler:"build_started"` - Finished int64 `json:"finished_at" meddler:"build_finished"` - Deploy string `json:"deploy_to" meddler:"build_deploy"` - Commit string `json:"commit" meddler:"build_commit"` - Branch string `json:"branch" meddler:"build_branch"` - Ref string `json:"ref" meddler:"build_ref"` - Refspec string `json:"refspec" meddler:"build_refspec"` - Remote string `json:"remote" meddler:"build_remote"` - Title string `json:"title" meddler:"build_title"` - Message string `json:"message" meddler:"build_message"` - Timestamp int64 `json:"timestamp" meddler:"build_timestamp"` - Sender string `json:"sender" meddler:"build_sender"` - Author string `json:"author" meddler:"build_author"` - Avatar string `json:"author_avatar" meddler:"build_avatar"` - Email string `json:"author_email" meddler:"build_email"` - Link string `json:"link_url" meddler:"build_link"` - Signed bool `json:"signed" meddler:"build_signed"` // deprecate - Verified bool `json:"verified" meddler:"build_verified"` // deprecate - Reviewer string `json:"reviewed_by" meddler:"build_reviewer"` - Reviewed int64 `json:"reviewed_at" meddler:"build_reviewed"` - // Jobs []*Job `json:"jobs,omitempty" meddler:"-"` - Procs []*Proc `json:"procs,omitempty" meddler:"-"` + ID int64 `json:"id" meddler:"build_id,pk"` + RepoID int64 `json:"-" meddler:"build_repo_id"` + ConfigID int64 `json:"-" meddler:"build_config_id"` + Number int `json:"number" meddler:"build_number"` + Parent int `json:"parent" meddler:"build_parent"` + Event string `json:"event" meddler:"build_event"` + Status string `json:"status" meddler:"build_status"` + Error string `json:"error" meddler:"build_error"` + Enqueued int64 `json:"enqueued_at" meddler:"build_enqueued"` + Created int64 `json:"created_at" meddler:"build_created"` + Started int64 `json:"started_at" meddler:"build_started"` + Finished int64 `json:"finished_at" meddler:"build_finished"` + Deploy string `json:"deploy_to" meddler:"build_deploy"` + Commit string `json:"commit" meddler:"build_commit"` + Branch string `json:"branch" meddler:"build_branch"` + Ref string `json:"ref" meddler:"build_ref"` + Refspec string `json:"refspec" meddler:"build_refspec"` + Remote string `json:"remote" meddler:"build_remote"` + Title string `json:"title" meddler:"build_title"` + Message string `json:"message" meddler:"build_message"` + Timestamp int64 `json:"timestamp" meddler:"build_timestamp"` + Sender string `json:"sender" meddler:"build_sender"` + Author string `json:"author" meddler:"build_author"` + Avatar string `json:"author_avatar" meddler:"build_avatar"` + Email string `json:"author_email" meddler:"build_email"` + Link string `json:"link_url" meddler:"build_link"` + Signed bool `json:"signed" meddler:"build_signed"` // deprecate + Verified bool `json:"verified" meddler:"build_verified"` // deprecate + Reviewer string `json:"reviewed_by" meddler:"build_reviewer"` + Reviewed int64 `json:"reviewed_at" meddler:"build_reviewed"` + Procs []*Proc `json:"procs,omitempty" meddler:"-"` } -type BuildGroup struct { - Date string - Builds []*Build +// Trim trims string values that would otherwise exceed +// the database column sizes and fail to insert. +func (b *Build) Trim() { + if len(b.Title) > 500 { + b.Title = b.Title[:500] + } + if len(b.Message) > 500 { + b.Message = b.Message[:500] + } } diff --git a/model/build_test.go b/model/build_test.go new file mode 100644 index 000000000..f80e4f3cc --- /dev/null +++ b/model/build_test.go @@ -0,0 +1,23 @@ +package model + +import ( + "crypto/rand" + "fmt" + "testing" +) + +func TestBuildTrim(t *testing.T) { + d := make([]byte, 1000) + rand.Read(d) + + b := Build{} + b.Message = fmt.Sprintf("%X", d) + + if len(b.Message) != 2000 { + t.Errorf("Failed to generate 2000 byte test string") + } + b.Trim() + if len(b.Message) != 500 { + t.Errorf("Failed to trim text string to 500 bytes") + } +} diff --git a/server/hook.go b/server/hook.go index f6379d989..02b9b30af 100644 --- a/server/hook.go +++ b/server/hook.go @@ -197,6 +197,7 @@ func PostHook(c *gin.Context) { } } + build.Trim() err = store.CreateBuild(c, build, build.Procs...) if err != nil { logrus.Errorf("failure to save commit for %s. %s", repo.FullName, err)