Clean up models (#3228)

This commit is contained in:
qwerty287 2024-01-22 07:56:18 +01:00 committed by GitHub
parent a19c488a99
commit 5e2f7d81b3
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
27 changed files with 101 additions and 98 deletions

View file

@ -37,9 +37,7 @@ func (r *Runner) createLogger(logger zerolog.Logger, uploads *sync.WaitGroup, wo
var secrets []string var secrets []string
for _, secret := range workflow.Config.Secrets { for _, secret := range workflow.Config.Secrets {
if secret.Mask { secrets = append(secrets, secret.Value)
secrets = append(secrets, secret.Value)
}
} }
loglogger.Debug().Msg("log stream opened") loglogger.Debug().Msg("log stream opened")

View file

@ -3784,9 +3784,6 @@ const docTemplate = `{
"refspec": { "refspec": {
"type": "string" "type": "string"
}, },
"remote": {
"type": "string"
},
"repo_id": { "repo_id": {
"type": "integer" "type": "integer"
}, },
@ -3913,9 +3910,6 @@ const docTemplate = `{
"type": "string" "type": "string"
} }
}, },
"clone_url": {
"type": "string"
},
"commit": { "commit": {
"type": "string" "type": "string"
}, },
@ -3925,9 +3919,6 @@ const docTemplate = `{
"deploy_to": { "deploy_to": {
"type": "string" "type": "string"
}, },
"enqueued_at": {
"type": "integer"
},
"errors": { "errors": {
"type": "array", "type": "array",
"items": { "items": {
@ -4037,18 +4028,12 @@ const docTemplate = `{
"address": { "address": {
"type": "string" "type": "string"
}, },
"email": {
"type": "string"
},
"id": { "id": {
"type": "integer" "type": "integer"
}, },
"password": { "password": {
"type": "string" "type": "string"
}, },
"token": {
"type": "string"
},
"username": { "username": {
"type": "string" "type": "string"
} }

View file

@ -151,7 +151,7 @@ func TestToConfigFull(t *testing.T) {
OnFailure: true, OnFailure: true,
OnSuccess: true, OnSuccess: true,
Failure: "fail", Failure: "fail",
AuthConfig: backend.Auth{Username: "user", Password: "123456", Email: "user@example.com"}, AuthConfig: backend.Auth{Username: "user", Password: "123456"},
NetworkMode: "bridge", NetworkMode: "bridge",
Ports: []backend.Port{{Number: 21}, {Number: 22}}, Ports: []backend.Port{{Number: 21}, {Number: 22}},
}) })

View file

@ -18,5 +18,4 @@ package types
type Auth struct { type Auth struct {
Username string `json:"username,omitempty"` Username string `json:"username,omitempty"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`
Email string `json:"email,omitempty"`
} }

View file

@ -18,5 +18,4 @@ package types
type Secret struct { type Secret struct {
Name string `json:"name,omitempty"` Name string `json:"name,omitempty"`
Value string `json:"value,omitempty"` Value string `json:"value,omitempty"`
Mask bool `json:"mask,omitempty"`
} }

View file

@ -129,7 +129,6 @@ func (c *Compiler) Compile(conf *yaml_types.Workflow) (*backend_types.Config, er
config.Secrets = append(config.Secrets, &backend_types.Secret{ config.Secrets = append(config.Secrets, &backend_types.Secret{
Name: sec.Name, Name: sec.Name,
Value: sec.Value, Value: sec.Value,
Mask: true,
}) })
} }

View file

@ -111,7 +111,6 @@ func (c *Compiler) createProcess(container *yaml_types.Container, stepType backe
if utils.MatchHostname(container.Image, registry.Hostname) { if utils.MatchHostname(container.Image, registry.Hostname) {
authConfig.Username = registry.Username authConfig.Username = registry.Username
authConfig.Password = registry.Password authConfig.Password = registry.Password
authConfig.Email = registry.Email
break break
} }
} }

View file

@ -70,8 +70,6 @@ func PostRegistry(c *gin.Context) {
Address: in.Address, Address: in.Address,
Username: in.Username, Username: in.Username,
Password: in.Password, Password: in.Password,
Token: in.Token,
Email: in.Email,
} }
if err := registry.Validate(); err != nil { if err := registry.Validate(); err != nil {
c.String(http.StatusBadRequest, "Error inserting registry. %s", err) c.String(http.StatusBadRequest, "Error inserting registry. %s", err)
@ -119,12 +117,6 @@ func PatchRegistry(c *gin.Context) {
if in.Password != "" { if in.Password != "" {
registry.Password = in.Password registry.Password = in.Password
} }
if in.Token != "" {
registry.Token = in.Token
}
if in.Email != "" {
registry.Email = in.Email
}
if err := registry.Validate(); err != nil { if err := registry.Validate(); err != nil {
c.String(http.StatusUnprocessableEntity, "Error updating registry. %s", err) c.String(http.StatusUnprocessableEntity, "Error updating registry. %s", err)

View file

@ -176,7 +176,6 @@ func convertPullHook(from *internal.PullRequestHook) *model.Pipeline {
from.PullRequest.Source.Branch.Name, from.PullRequest.Source.Branch.Name,
from.PullRequest.Dest.Branch.Name, from.PullRequest.Dest.Branch.Name,
), ),
CloneURL: fmt.Sprintf("https://bitbucket.org/%s", from.PullRequest.Source.Repo.FullName),
ForgeURL: from.PullRequest.Links.HTML.Href, ForgeURL: from.PullRequest.Links.HTML.Href,
Branch: from.PullRequest.Dest.Branch.Name, Branch: from.PullRequest.Dest.Branch.Name,
Message: from.PullRequest.Desc, Message: from.PullRequest.Desc,

View file

@ -142,7 +142,6 @@ func Test_helper(t *testing.T) {
g.Assert(pipeline.ForgeURL).Equal(hook.PullRequest.Links.HTML.Href) g.Assert(pipeline.ForgeURL).Equal(hook.PullRequest.Links.HTML.Href)
g.Assert(pipeline.Ref).Equal("refs/heads/main") g.Assert(pipeline.Ref).Equal("refs/heads/main")
g.Assert(pipeline.Refspec).Equal("change:main") g.Assert(pipeline.Refspec).Equal("change:main")
g.Assert(pipeline.CloneURL).Equal("https://bitbucket.org/baz/bar")
g.Assert(pipeline.Message).Equal(hook.PullRequest.Desc) g.Assert(pipeline.Message).Equal(hook.PullRequest.Desc)
g.Assert(pipeline.Timestamp).Equal(hook.PullRequest.Updated.Unix()) g.Assert(pipeline.Timestamp).Equal(hook.PullRequest.Updated.Unix())
}) })

View file

@ -212,7 +212,6 @@ func Test_helper(t *testing.T) {
g.Assert(pipeline.Branch).Equal(*from.PullRequest.Base.Ref) g.Assert(pipeline.Branch).Equal(*from.PullRequest.Base.Ref)
g.Assert(pipeline.Ref).Equal("refs/pull/42/merge") g.Assert(pipeline.Ref).Equal("refs/pull/42/merge")
g.Assert(pipeline.Refspec).Equal("changes:main") g.Assert(pipeline.Refspec).Equal("changes:main")
g.Assert(pipeline.CloneURL).Equal("https://github.com/octocat/hello-world-fork")
g.Assert(pipeline.Commit).Equal(*from.PullRequest.Head.SHA) g.Assert(pipeline.Commit).Equal(*from.PullRequest.Head.SHA)
g.Assert(pipeline.Message).Equal(*from.PullRequest.Title) g.Assert(pipeline.Message).Equal(*from.PullRequest.Title)
g.Assert(pipeline.Title).Equal(*from.PullRequest.Title) g.Assert(pipeline.Title).Equal(*from.PullRequest.Title)
@ -264,7 +263,6 @@ func Test_helper(t *testing.T) {
g.Assert(pipeline.Author).Equal(*from.Sender.Login) g.Assert(pipeline.Author).Equal(*from.Sender.Login)
g.Assert(pipeline.Avatar).Equal(*from.Sender.AvatarURL) g.Assert(pipeline.Avatar).Equal(*from.Sender.AvatarURL)
g.Assert(pipeline.Email).Equal(*from.HeadCommit.Author.Email) g.Assert(pipeline.Email).Equal(*from.HeadCommit.Author.Email)
g.Assert(pipeline.CloneURL).Equal(*from.Repo.CloneURL)
}) })
g.It("should convert a tag from webhook", func() { g.It("should convert a tag from webhook", func() {

View file

@ -90,7 +90,6 @@ func parsePushHook(hook *github.PushEvent) (*model.Repo, *model.Pipeline) {
Email: hook.GetHeadCommit().GetAuthor().GetEmail(), Email: hook.GetHeadCommit().GetAuthor().GetEmail(),
Avatar: hook.GetSender().GetAvatarURL(), Avatar: hook.GetSender().GetAvatarURL(),
Author: hook.GetSender().GetLogin(), Author: hook.GetSender().GetLogin(),
CloneURL: hook.GetRepo().GetCloneURL(),
Sender: hook.GetSender().GetLogin(), Sender: hook.GetSender().GetLogin(),
ChangedFiles: getChangedFilesFromCommits(hook.Commits), ChangedFiles: getChangedFilesFromCommits(hook.Commits),
} }
@ -164,7 +163,6 @@ func parsePullHook(hook *github.PullRequestEvent, merge bool) (*github.PullReque
Avatar: hook.GetPullRequest().GetUser().GetAvatarURL(), Avatar: hook.GetPullRequest().GetUser().GetAvatarURL(),
Title: hook.GetPullRequest().GetTitle(), Title: hook.GetPullRequest().GetTitle(),
Sender: hook.GetSender().GetLogin(), Sender: hook.GetSender().GetLogin(),
CloneURL: hook.GetPullRequest().GetHead().GetRepo().GetCloneURL(),
Refspec: fmt.Sprintf(refSpec, Refspec: fmt.Sprintf(refSpec,
hook.GetPullRequest().GetHead().GetRef(), hook.GetPullRequest().GetHead().GetRef(),
hook.GetPullRequest().GetBase().GetRef(), hook.GetPullRequest().GetBase().GetRef(),

View file

@ -120,7 +120,6 @@ func convertMergeRequestHook(hook *gitlab.MergeEvent, req *http.Request) (int, *
pipeline.Message = lastCommit.Message pipeline.Message = lastCommit.Message
pipeline.Commit = lastCommit.ID pipeline.Commit = lastCommit.ID
pipeline.CloneURL = obj.Source.HTTPURL
pipeline.Ref = fmt.Sprintf(mergeRefs, obj.IID) pipeline.Ref = fmt.Sprintf(mergeRefs, obj.IID)
pipeline.Branch = obj.SourceBranch pipeline.Branch = obj.SourceBranch

View file

@ -18,15 +18,15 @@ type Agent struct {
ID int64 `json:"id" xorm:"pk autoincr 'id'"` ID int64 `json:"id" xorm:"pk autoincr 'id'"`
Created int64 `json:"created" xorm:"created"` Created int64 `json:"created" xorm:"created"`
Updated int64 `json:"updated" xorm:"updated"` Updated int64 `json:"updated" xorm:"updated"`
Name string `json:"name"` Name string `json:"name" xorm:"name"`
OwnerID int64 `json:"owner_id" xorm:"'owner_id'"` OwnerID int64 `json:"owner_id" xorm:"'owner_id'"`
Token string `json:"token"` Token string `json:"token" xorm:"token"`
LastContact int64 `json:"last_contact"` LastContact int64 `json:"last_contact" xorm:"last_contact"`
Platform string `json:"platform" xorm:"VARCHAR(100)"` Platform string `json:"platform" xorm:"VARCHAR(100) 'platform'"`
Backend string `json:"backend" xorm:"VARCHAR(100)"` Backend string `json:"backend" xorm:"VARCHAR(100) 'backend'"`
Capacity int32 `json:"capacity"` Capacity int32 `json:"capacity" xorm:"capacity"`
Version string `json:"version"` Version string `json:"version" xorm:"version"`
NoSchedule bool `json:"no_schedule"` NoSchedule bool `json:"no_schedule" xorm:"no_schedule"`
} // @name Agent } // @name Agent
// TableName return database table name for xorm // TableName return database table name for xorm

View file

@ -36,7 +36,6 @@ type EnvironStore interface {
// Environ represents an environment variable. // Environ represents an environment variable.
type Environ struct { type Environ struct {
ID int64 `json:"id"`
Name string `json:"name"` Name string `json:"name"`
Value string `json:"value,omitempty"` Value string `json:"value,omitempty"`
} }
@ -56,7 +55,6 @@ func (e *Environ) Validate() error {
// Copy makes a copy of the environment variable without the value. // Copy makes a copy of the environment variable without the value.
func (e *Environ) Copy() *Environ { func (e *Environ) Copy() *Environ {
return &Environ{ return &Environ{
ID: e.ID,
Name: e.Name, Name: e.Name,
} }
} }

View file

@ -29,7 +29,6 @@ type Feed struct {
Branch string `json:"branch,omitempty" xorm:"feed_pipeline_branch"` Branch string `json:"branch,omitempty" xorm:"feed_pipeline_branch"`
Ref string `json:"ref,omitempty" xorm:"feed_pipeline_ref"` Ref string `json:"ref,omitempty" xorm:"feed_pipeline_ref"`
Refspec string `json:"refspec,omitempty" xorm:"feed_pipeline_refspec"` Refspec string `json:"refspec,omitempty" xorm:"feed_pipeline_refspec"`
Remote string `json:"remote,omitempty" xorm:"feed_pipeline_clone_url"`
Title string `json:"title,omitempty" xorm:"feed_pipeline_title"` Title string `json:"title,omitempty" xorm:"feed_pipeline_title"`
Message string `json:"message,omitempty" xorm:"feed_pipeline_message"` Message string `json:"message,omitempty" xorm:"feed_pipeline_message"`
Author string `json:"author,omitempty" xorm:"feed_pipeline_author"` Author string `json:"author,omitempty" xorm:"feed_pipeline_author"`

View file

@ -24,12 +24,10 @@ type Pipeline struct {
RepoID int64 `json:"-" xorm:"UNIQUE(s) INDEX 'pipeline_repo_id'"` RepoID int64 `json:"-" xorm:"UNIQUE(s) INDEX 'pipeline_repo_id'"`
Number int64 `json:"number" xorm:"UNIQUE(s) 'pipeline_number'"` Number int64 `json:"number" xorm:"UNIQUE(s) 'pipeline_number'"`
Author string `json:"author" xorm:"INDEX 'pipeline_author'"` Author string `json:"author" xorm:"INDEX 'pipeline_author'"`
ConfigID int64 `json:"-" xorm:"pipeline_config_id"`
Parent int64 `json:"parent" xorm:"pipeline_parent"` Parent int64 `json:"parent" xorm:"pipeline_parent"`
Event WebhookEvent `json:"event" xorm:"pipeline_event"` Event WebhookEvent `json:"event" xorm:"pipeline_event"`
Status StatusValue `json:"status" xorm:"INDEX 'pipeline_status'"` Status StatusValue `json:"status" xorm:"INDEX 'pipeline_status'"`
Errors []*errors.PipelineError `json:"errors" xorm:"json 'pipeline_errors'"` Errors []*errors.PipelineError `json:"errors" xorm:"json 'pipeline_errors'"`
Enqueued int64 `json:"enqueued_at" xorm:"pipeline_enqueued"`
Created int64 `json:"created_at" xorm:"pipeline_created"` Created int64 `json:"created_at" xorm:"pipeline_created"`
Updated int64 `json:"updated_at" xorm:"updated NOT NULL DEFAULT 0 'updated'"` Updated int64 `json:"updated_at" xorm:"updated NOT NULL DEFAULT 0 'updated'"`
Started int64 `json:"started_at" xorm:"pipeline_started"` Started int64 `json:"started_at" xorm:"pipeline_started"`
@ -39,7 +37,6 @@ type Pipeline struct {
Branch string `json:"branch" xorm:"pipeline_branch"` Branch string `json:"branch" xorm:"pipeline_branch"`
Ref string `json:"ref" xorm:"pipeline_ref"` Ref string `json:"ref" xorm:"pipeline_ref"`
Refspec string `json:"refspec" xorm:"pipeline_refspec"` Refspec string `json:"refspec" xorm:"pipeline_refspec"`
CloneURL string `json:"clone_url" xorm:"pipeline_clone_url"`
Title string `json:"title" xorm:"pipeline_title"` Title string `json:"title" xorm:"pipeline_title"`
Message string `json:"message" xorm:"TEXT 'pipeline_message'"` Message string `json:"message" xorm:"TEXT 'pipeline_message'"`
Timestamp int64 `json:"timestamp" xorm:"pipeline_timestamp"` Timestamp int64 `json:"timestamp" xorm:"pipeline_timestamp"`

View file

@ -57,8 +57,6 @@ type Registry struct {
Address string `json:"address" xorm:"UNIQUE(s) INDEX 'registry_addr'"` Address string `json:"address" xorm:"UNIQUE(s) INDEX 'registry_addr'"`
Username string `json:"username" xorm:"varchar(2000) 'registry_username'"` Username string `json:"username" xorm:"varchar(2000) 'registry_username'"`
Password string `json:"password" xorm:"TEXT 'registry_password'"` Password string `json:"password" xorm:"TEXT 'registry_password'"`
Token string `json:"token" xorm:"TEXT 'registry_token'"`
Email string `json:"email" xorm:"varchar(500) 'registry_email'"`
} // @name Registry } // @name Registry
// Validate validates the registry information. // Validate validates the registry information.
@ -83,7 +81,5 @@ func (r *Registry) Copy() *Registry {
RepoID: r.RepoID, RepoID: r.RepoID,
Address: r.Address, Address: r.Address,
Username: r.Username, Username: r.Username,
Email: r.Email,
Token: r.Token,
} }
} }

View file

@ -18,7 +18,6 @@ import (
"context" "context"
"errors" "errors"
"fmt" "fmt"
"time"
"github.com/rs/zerolog/log" "github.com/rs/zerolog/log"
@ -130,7 +129,6 @@ func createNewOutOfOld(old *model.Pipeline) *model.Pipeline {
newPipeline.Status = model.StatusPending newPipeline.Status = model.StatusPending
newPipeline.Started = 0 newPipeline.Started = 0
newPipeline.Finished = 0 newPipeline.Finished = 0
newPipeline.Enqueued = time.Now().UTC().Unix()
newPipeline.Errors = nil newPipeline.Errors = nil
return &newPipeline return &newPipeline
} }

View file

@ -256,7 +256,6 @@ func (b *StepBuilder) toInternalRepresentation(parsed *yaml_types.Workflow, envi
Hostname: reg.Address, Hostname: reg.Address,
Username: reg.Username, Username: reg.Username,
Password: reg.Password, Password: reg.Password,
Email: reg.Email,
}) })
} }

View file

@ -32,7 +32,6 @@ pipelines.pipeline_commit as feed_pipeline_commit,
pipelines.pipeline_branch as feed_pipeline_branch, pipelines.pipeline_branch as feed_pipeline_branch,
pipelines.pipeline_ref as feed_pipeline_ref, pipelines.pipeline_ref as feed_pipeline_ref,
pipelines.pipeline_refspec as feed_pipeline_refspec, pipelines.pipeline_refspec as feed_pipeline_refspec,
pipelines.pipeline_clone_url as feed_pipeline_clone_url,
pipelines.pipeline_title as feed_pipeline_title, pipelines.pipeline_title as feed_pipeline_title,
pipelines.pipeline_message as feed_pipeline_message, pipelines.pipeline_message as feed_pipeline_message,
pipelines.pipeline_author as feed_pipeline_author, pipelines.pipeline_author as feed_pipeline_author,

View file

@ -0,0 +1,57 @@
// Copyright 2024 Woodpecker Authors
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package migration
import (
"src.techknowlogick.com/xormigrate"
"xorm.io/xorm"
)
type oldRegistry029 struct {
ID int64 `json:"id" xorm:"pk autoincr 'registry_id'"`
Token string `json:"token" xorm:"TEXT 'registry_token'"`
Email string `json:"email" xorm:"varchar(500) 'registry_email'"`
}
func (oldRegistry029) TableName() string {
return "registry"
}
type oldPipeline029 struct {
ID int64 `json:"id" xorm:"pk autoincr 'pipeline_id'"`
ConfigID int64 `json:"-" xorm:"pipeline_config_id"`
Enqueued int64 `json:"enqueued_at" xorm:"pipeline_enqueued"`
CloneURL string `json:"clone_url" xorm:"pipeline_clone_url"`
}
// TableName return database table name for xorm
func (oldPipeline029) TableName() string {
return "pipelines"
}
var cleanRegistryPipeline = xormigrate.Migration{
ID: "clean-registry-pipeline",
MigrateSession: func(sess *xorm.Session) (err error) {
if err := sess.Sync(new(oldRegistry029), new(oldPipeline029)); err != nil {
return err
}
if err := dropTableColumns(sess, "pipelines", "pipeline_clone_url", "pipeline_config_id", "pipeline_enqueued"); err != nil {
return err
}
return dropTableColumns(sess, "registry", "registry_email", "registry_token")
},
}

View file

@ -58,6 +58,7 @@ var migrationTasks = []*xormigrate.Migration{
&removePluginOnlyOptionFromSecretsTable, &removePluginOnlyOptionFromSecretsTable,
&convertToNewPipelineErrorFormat, &convertToNewPipelineErrorFormat,
&renameLinkToURL, &renameLinkToURL,
&cleanRegistryPipeline,
} }
var allBeans = []any{ var allBeans = []any{

View file

@ -114,7 +114,6 @@ func (s storage) CreatePipeline(pipeline *model.Pipeline, stepList ...*model.Ste
pipeline.Number = number + 1 pipeline.Number = number + 1
pipeline.Created = time.Now().UTC().Unix() pipeline.Created = time.Now().UTC().Unix()
pipeline.Enqueued = pipeline.Created
// only Insert set auto created ID back to object // only Insert set auto created ID back to object
if _, err := sess.Insert(pipeline); err != nil { if _, err := sess.Insert(pipeline); err != nil {
return err return err

View file

@ -32,8 +32,6 @@ func TestRegistryFind(t *testing.T) {
Address: "index.docker.io", Address: "index.docker.io",
Username: "foo", Username: "foo",
Password: "bar", Password: "bar",
Email: "foo@bar.com",
Token: "12345",
}) })
assert.NoError(t, err) assert.NoError(t, err)
@ -43,8 +41,6 @@ func TestRegistryFind(t *testing.T) {
assert.Equal(t, "index.docker.io", registry.Address) assert.Equal(t, "index.docker.io", registry.Address)
assert.Equal(t, "foo", registry.Username) assert.Equal(t, "foo", registry.Username)
assert.Equal(t, "bar", registry.Password) assert.Equal(t, "bar", registry.Password)
assert.Equal(t, "foo@bar.com", registry.Email)
assert.Equal(t, "12345", registry.Token)
} }
func TestRegistryList(t *testing.T) { func TestRegistryList(t *testing.T) {

View file

@ -30,9 +30,6 @@ export type Pipeline = {
// When the pipeline was updated last time in database. // When the pipeline was updated last time in database.
updated_at: number; updated_at: number;
// When the pipeline was enqueued.
enqueued_at: number;
// When the pipeline began execution. // When the pipeline began execution.
started_at: number; started_at: number;

View file

@ -69,34 +69,35 @@ type (
// Pipeline defines a pipeline object. // Pipeline defines a pipeline object.
Pipeline struct { Pipeline struct {
ID int64 `json:"id"` ID int64 `json:"id"`
Number int64 `json:"number"` Number int64 `json:"number"`
Parent int64 `json:"parent"` Parent int64 `json:"parent"`
Event string `json:"event"` Event string `json:"event"`
Status string `json:"status"` Status string `json:"status"`
Errors PipelineError `json:"errors"` Errors PipelineError `json:"errors"`
Enqueued int64 `json:"enqueued_at"` // Deprecated TODO remove in 3.x
Created int64 `json:"created_at"` Enqueued int64 `json:"enqueued_at"`
Updated int64 `json:"updated_at"` Created int64 `json:"created_at"`
Started int64 `json:"started_at"` Updated int64 `json:"updated_at"`
Finished int64 `json:"finished_at"` Started int64 `json:"started_at"`
Deploy string `json:"deploy_to"` Finished int64 `json:"finished_at"`
Commit string `json:"commit"` Deploy string `json:"deploy_to"`
Branch string `json:"branch"` Commit string `json:"commit"`
Ref string `json:"ref"` Branch string `json:"branch"`
Refspec string `json:"refspec"` Ref string `json:"ref"`
CloneURL string `json:"clone_url"` Refspec string `json:"refspec"`
Title string `json:"title"` CloneURL string `json:"clone_url"`
Message string `json:"message"` Title string `json:"title"`
Timestamp int64 `json:"timestamp"` Message string `json:"message"`
Sender string `json:"sender"` Timestamp int64 `json:"timestamp"`
Author string `json:"author"` Sender string `json:"sender"`
Avatar string `json:"author_avatar"` Author string `json:"author"`
Email string `json:"author_email"` Avatar string `json:"author_avatar"`
ForgeURL string `json:"forge_url"` Email string `json:"author_email"`
Reviewer string `json:"reviewed_by"` ForgeURL string `json:"forge_url"`
Reviewed int64 `json:"reviewed_at"` Reviewer string `json:"reviewed_by"`
Workflows []*Workflow `json:"workflows,omitempty"` Reviewed int64 `json:"reviewed_at"`
Workflows []*Workflow `json:"workflows,omitempty"`
} }
// Workflow represents a workflow in the pipeline. // Workflow represents a workflow in the pipeline.
@ -134,8 +135,10 @@ type (
Address string `json:"address"` Address string `json:"address"`
Username string `json:"username"` Username string `json:"username"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`
Email string `json:"email"` // Deprecated
Token string `json:"token"` Email string `json:"email"` // TODO remove in 3.x
// Deprecated
Token string `json:"token"` // TODO remove in 3.x
} }
// Secret represents a secret variable, such as a password or token. // Secret represents a secret variable, such as a password or token.