You've already forked woodpecker
							
							
				mirror of
				https://github.com/woodpecker-ci/woodpecker.git
				synced 2025-10-30 23:27:39 +02:00 
			
		
		
		
	Clean up models (#3228)
This commit is contained in:
		| @@ -37,9 +37,7 @@ func (r *Runner) createLogger(logger zerolog.Logger, uploads *sync.WaitGroup, wo | ||||
|  | ||||
| 		var secrets []string | ||||
| 		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") | ||||
|   | ||||
| @@ -3784,9 +3784,6 @@ const docTemplate = `{ | ||||
|                 "refspec": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "remote": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "repo_id": { | ||||
|                     "type": "integer" | ||||
|                 }, | ||||
| @@ -3913,9 +3910,6 @@ const docTemplate = `{ | ||||
|                         "type": "string" | ||||
|                     } | ||||
|                 }, | ||||
|                 "clone_url": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "commit": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
| @@ -3925,9 +3919,6 @@ const docTemplate = `{ | ||||
|                 "deploy_to": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "enqueued_at": { | ||||
|                     "type": "integer" | ||||
|                 }, | ||||
|                 "errors": { | ||||
|                     "type": "array", | ||||
|                     "items": { | ||||
| @@ -4037,18 +4028,12 @@ const docTemplate = `{ | ||||
|                 "address": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "email": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "id": { | ||||
|                     "type": "integer" | ||||
|                 }, | ||||
|                 "password": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "token": { | ||||
|                     "type": "string" | ||||
|                 }, | ||||
|                 "username": { | ||||
|                     "type": "string" | ||||
|                 } | ||||
|   | ||||
| @@ -151,7 +151,7 @@ func TestToConfigFull(t *testing.T) { | ||||
| 		OnFailure:    true, | ||||
| 		OnSuccess:    true, | ||||
| 		Failure:      "fail", | ||||
| 		AuthConfig:   backend.Auth{Username: "user", Password: "123456", Email: "user@example.com"}, | ||||
| 		AuthConfig:   backend.Auth{Username: "user", Password: "123456"}, | ||||
| 		NetworkMode:  "bridge", | ||||
| 		Ports:        []backend.Port{{Number: 21}, {Number: 22}}, | ||||
| 	}) | ||||
|   | ||||
| @@ -18,5 +18,4 @@ package types | ||||
| type Auth struct { | ||||
| 	Username string `json:"username,omitempty"` | ||||
| 	Password string `json:"password,omitempty"` | ||||
| 	Email    string `json:"email,omitempty"` | ||||
| } | ||||
|   | ||||
| @@ -18,5 +18,4 @@ package types | ||||
| type Secret struct { | ||||
| 	Name  string `json:"name,omitempty"` | ||||
| 	Value string `json:"value,omitempty"` | ||||
| 	Mask  bool   `json:"mask,omitempty"` | ||||
| } | ||||
|   | ||||
| @@ -129,7 +129,6 @@ func (c *Compiler) Compile(conf *yaml_types.Workflow) (*backend_types.Config, er | ||||
| 		config.Secrets = append(config.Secrets, &backend_types.Secret{ | ||||
| 			Name:  sec.Name, | ||||
| 			Value: sec.Value, | ||||
| 			Mask:  true, | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -111,7 +111,6 @@ func (c *Compiler) createProcess(container *yaml_types.Container, stepType backe | ||||
| 		if utils.MatchHostname(container.Image, registry.Hostname) { | ||||
| 			authConfig.Username = registry.Username | ||||
| 			authConfig.Password = registry.Password | ||||
| 			authConfig.Email = registry.Email | ||||
| 			break | ||||
| 		} | ||||
| 	} | ||||
|   | ||||
| @@ -70,8 +70,6 @@ func PostRegistry(c *gin.Context) { | ||||
| 		Address:  in.Address, | ||||
| 		Username: in.Username, | ||||
| 		Password: in.Password, | ||||
| 		Token:    in.Token, | ||||
| 		Email:    in.Email, | ||||
| 	} | ||||
| 	if err := registry.Validate(); err != nil { | ||||
| 		c.String(http.StatusBadRequest, "Error inserting registry. %s", err) | ||||
| @@ -119,12 +117,6 @@ func PatchRegistry(c *gin.Context) { | ||||
| 	if 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 { | ||||
| 		c.String(http.StatusUnprocessableEntity, "Error updating registry. %s", err) | ||||
|   | ||||
| @@ -176,7 +176,6 @@ func convertPullHook(from *internal.PullRequestHook) *model.Pipeline { | ||||
| 			from.PullRequest.Source.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, | ||||
| 		Branch:    from.PullRequest.Dest.Branch.Name, | ||||
| 		Message:   from.PullRequest.Desc, | ||||
|   | ||||
| @@ -142,7 +142,6 @@ func Test_helper(t *testing.T) { | ||||
| 			g.Assert(pipeline.ForgeURL).Equal(hook.PullRequest.Links.HTML.Href) | ||||
| 			g.Assert(pipeline.Ref).Equal("refs/heads/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.Timestamp).Equal(hook.PullRequest.Updated.Unix()) | ||||
| 		}) | ||||
|   | ||||
| @@ -212,7 +212,6 @@ func Test_helper(t *testing.T) { | ||||
| 			g.Assert(pipeline.Branch).Equal(*from.PullRequest.Base.Ref) | ||||
| 			g.Assert(pipeline.Ref).Equal("refs/pull/42/merge") | ||||
| 			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.Message).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.Avatar).Equal(*from.Sender.AvatarURL) | ||||
| 			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() { | ||||
|   | ||||
| @@ -90,7 +90,6 @@ func parsePushHook(hook *github.PushEvent) (*model.Repo, *model.Pipeline) { | ||||
| 		Email:        hook.GetHeadCommit().GetAuthor().GetEmail(), | ||||
| 		Avatar:       hook.GetSender().GetAvatarURL(), | ||||
| 		Author:       hook.GetSender().GetLogin(), | ||||
| 		CloneURL:     hook.GetRepo().GetCloneURL(), | ||||
| 		Sender:       hook.GetSender().GetLogin(), | ||||
| 		ChangedFiles: getChangedFilesFromCommits(hook.Commits), | ||||
| 	} | ||||
| @@ -164,7 +163,6 @@ func parsePullHook(hook *github.PullRequestEvent, merge bool) (*github.PullReque | ||||
| 		Avatar:   hook.GetPullRequest().GetUser().GetAvatarURL(), | ||||
| 		Title:    hook.GetPullRequest().GetTitle(), | ||||
| 		Sender:   hook.GetSender().GetLogin(), | ||||
| 		CloneURL: hook.GetPullRequest().GetHead().GetRepo().GetCloneURL(), | ||||
| 		Refspec: fmt.Sprintf(refSpec, | ||||
| 			hook.GetPullRequest().GetHead().GetRef(), | ||||
| 			hook.GetPullRequest().GetBase().GetRef(), | ||||
|   | ||||
| @@ -120,7 +120,6 @@ func convertMergeRequestHook(hook *gitlab.MergeEvent, req *http.Request) (int, * | ||||
|  | ||||
| 	pipeline.Message = lastCommit.Message | ||||
| 	pipeline.Commit = lastCommit.ID | ||||
| 	pipeline.CloneURL = obj.Source.HTTPURL | ||||
|  | ||||
| 	pipeline.Ref = fmt.Sprintf(mergeRefs, obj.IID) | ||||
| 	pipeline.Branch = obj.SourceBranch | ||||
|   | ||||
| @@ -18,15 +18,15 @@ type Agent struct { | ||||
| 	ID          int64  `json:"id"            xorm:"pk autoincr 'id'"` | ||||
| 	Created     int64  `json:"created"       xorm:"created"` | ||||
| 	Updated     int64  `json:"updated"       xorm:"updated"` | ||||
| 	Name        string `json:"name"` | ||||
| 	Name        string `json:"name"          xorm:"name"` | ||||
| 	OwnerID     int64  `json:"owner_id"      xorm:"'owner_id'"` | ||||
| 	Token       string `json:"token"` | ||||
| 	LastContact int64  `json:"last_contact"` | ||||
| 	Platform    string `json:"platform"      xorm:"VARCHAR(100)"` | ||||
| 	Backend     string `json:"backend"       xorm:"VARCHAR(100)"` | ||||
| 	Capacity    int32  `json:"capacity"` | ||||
| 	Version     string `json:"version"` | ||||
| 	NoSchedule  bool   `json:"no_schedule"` | ||||
| 	Token       string `json:"token"         xorm:"token"` | ||||
| 	LastContact int64  `json:"last_contact"  xorm:"last_contact"` | ||||
| 	Platform    string `json:"platform"      xorm:"VARCHAR(100) 'platform'"` | ||||
| 	Backend     string `json:"backend"       xorm:"VARCHAR(100) 'backend'"` | ||||
| 	Capacity    int32  `json:"capacity"      xorm:"capacity"` | ||||
| 	Version     string `json:"version"       xorm:"version"` | ||||
| 	NoSchedule  bool   `json:"no_schedule"   xorm:"no_schedule"` | ||||
| } //	@name Agent | ||||
|  | ||||
| // TableName return database table name for xorm | ||||
|   | ||||
| @@ -36,7 +36,6 @@ type EnvironStore interface { | ||||
|  | ||||
| // Environ represents an environment variable. | ||||
| type Environ struct { | ||||
| 	ID    int64  `json:"id"` | ||||
| 	Name  string `json:"name"` | ||||
| 	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. | ||||
| func (e *Environ) Copy() *Environ { | ||||
| 	return &Environ{ | ||||
| 		ID:   e.ID, | ||||
| 		Name: e.Name, | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -29,7 +29,6 @@ type Feed struct { | ||||
| 	Branch   string `json:"branch,omitempty"        xorm:"feed_pipeline_branch"` | ||||
| 	Ref      string `json:"ref,omitempty"           xorm:"feed_pipeline_ref"` | ||||
| 	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"` | ||||
| 	Message  string `json:"message,omitempty"       xorm:"feed_pipeline_message"` | ||||
| 	Author   string `json:"author,omitempty"        xorm:"feed_pipeline_author"` | ||||
|   | ||||
| @@ -24,12 +24,10 @@ type Pipeline struct { | ||||
| 	RepoID              int64                   `json:"-"                       xorm:"UNIQUE(s) INDEX 'pipeline_repo_id'"` | ||||
| 	Number              int64                   `json:"number"                  xorm:"UNIQUE(s) 'pipeline_number'"` | ||||
| 	Author              string                  `json:"author"                  xorm:"INDEX 'pipeline_author'"` | ||||
| 	ConfigID            int64                   `json:"-"                       xorm:"pipeline_config_id"` | ||||
| 	Parent              int64                   `json:"parent"                  xorm:"pipeline_parent"` | ||||
| 	Event               WebhookEvent            `json:"event"                   xorm:"pipeline_event"` | ||||
| 	Status              StatusValue             `json:"status"                  xorm:"INDEX 'pipeline_status'"` | ||||
| 	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"` | ||||
| 	Updated             int64                   `json:"updated_at"              xorm:"updated NOT NULL DEFAULT 0 'updated'"` | ||||
| 	Started             int64                   `json:"started_at"              xorm:"pipeline_started"` | ||||
| @@ -39,7 +37,6 @@ type Pipeline struct { | ||||
| 	Branch              string                  `json:"branch"                  xorm:"pipeline_branch"` | ||||
| 	Ref                 string                  `json:"ref"                     xorm:"pipeline_ref"` | ||||
| 	Refspec             string                  `json:"refspec"                 xorm:"pipeline_refspec"` | ||||
| 	CloneURL            string                  `json:"clone_url"               xorm:"pipeline_clone_url"` | ||||
| 	Title               string                  `json:"title"                   xorm:"pipeline_title"` | ||||
| 	Message             string                  `json:"message"                 xorm:"TEXT 'pipeline_message'"` | ||||
| 	Timestamp           int64                   `json:"timestamp"               xorm:"pipeline_timestamp"` | ||||
|   | ||||
| @@ -57,8 +57,6 @@ type Registry struct { | ||||
| 	Address  string `json:"address"  xorm:"UNIQUE(s) INDEX 'registry_addr'"` | ||||
| 	Username string `json:"username" xorm:"varchar(2000) 'registry_username'"` | ||||
| 	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 | ||||
|  | ||||
| // Validate validates the registry information. | ||||
| @@ -83,7 +81,5 @@ func (r *Registry) Copy() *Registry { | ||||
| 		RepoID:   r.RepoID, | ||||
| 		Address:  r.Address, | ||||
| 		Username: r.Username, | ||||
| 		Email:    r.Email, | ||||
| 		Token:    r.Token, | ||||
| 	} | ||||
| } | ||||
|   | ||||
| @@ -18,7 +18,6 @@ import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"fmt" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/rs/zerolog/log" | ||||
|  | ||||
| @@ -130,7 +129,6 @@ func createNewOutOfOld(old *model.Pipeline) *model.Pipeline { | ||||
| 	newPipeline.Status = model.StatusPending | ||||
| 	newPipeline.Started = 0 | ||||
| 	newPipeline.Finished = 0 | ||||
| 	newPipeline.Enqueued = time.Now().UTC().Unix() | ||||
| 	newPipeline.Errors = nil | ||||
| 	return &newPipeline | ||||
| } | ||||
|   | ||||
| @@ -256,7 +256,6 @@ func (b *StepBuilder) toInternalRepresentation(parsed *yaml_types.Workflow, envi | ||||
| 			Hostname: reg.Address, | ||||
| 			Username: reg.Username, | ||||
| 			Password: reg.Password, | ||||
| 			Email:    reg.Email, | ||||
| 		}) | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -32,7 +32,6 @@ pipelines.pipeline_commit as feed_pipeline_commit, | ||||
| pipelines.pipeline_branch as feed_pipeline_branch, | ||||
| pipelines.pipeline_ref as feed_pipeline_ref, | ||||
| 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_message as feed_pipeline_message, | ||||
| pipelines.pipeline_author as feed_pipeline_author, | ||||
|   | ||||
| @@ -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") | ||||
| 	}, | ||||
| } | ||||
| @@ -58,6 +58,7 @@ var migrationTasks = []*xormigrate.Migration{ | ||||
| 	&removePluginOnlyOptionFromSecretsTable, | ||||
| 	&convertToNewPipelineErrorFormat, | ||||
| 	&renameLinkToURL, | ||||
| 	&cleanRegistryPipeline, | ||||
| } | ||||
|  | ||||
| var allBeans = []any{ | ||||
|   | ||||
| @@ -114,7 +114,6 @@ func (s storage) CreatePipeline(pipeline *model.Pipeline, stepList ...*model.Ste | ||||
| 	pipeline.Number = number + 1 | ||||
|  | ||||
| 	pipeline.Created = time.Now().UTC().Unix() | ||||
| 	pipeline.Enqueued = pipeline.Created | ||||
| 	// only Insert set auto created ID back to object | ||||
| 	if _, err := sess.Insert(pipeline); err != nil { | ||||
| 		return err | ||||
|   | ||||
| @@ -32,8 +32,6 @@ func TestRegistryFind(t *testing.T) { | ||||
| 		Address:  "index.docker.io", | ||||
| 		Username: "foo", | ||||
| 		Password: "bar", | ||||
| 		Email:    "foo@bar.com", | ||||
| 		Token:    "12345", | ||||
| 	}) | ||||
| 	assert.NoError(t, err) | ||||
|  | ||||
| @@ -43,8 +41,6 @@ func TestRegistryFind(t *testing.T) { | ||||
| 	assert.Equal(t, "index.docker.io", registry.Address) | ||||
| 	assert.Equal(t, "foo", registry.Username) | ||||
| 	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) { | ||||
|   | ||||
| @@ -30,9 +30,6 @@ export type Pipeline = { | ||||
|   // When the pipeline was updated last time in database. | ||||
|   updated_at: number; | ||||
|  | ||||
|   // When the pipeline was enqueued. | ||||
|   enqueued_at: number; | ||||
|  | ||||
|   // When the pipeline began execution. | ||||
|   started_at: number; | ||||
|  | ||||
|   | ||||
| @@ -69,34 +69,35 @@ type ( | ||||
|  | ||||
| 	// Pipeline defines a pipeline object. | ||||
| 	Pipeline struct { | ||||
| 		ID        int64         `json:"id"` | ||||
| 		Number    int64         `json:"number"` | ||||
| 		Parent    int64         `json:"parent"` | ||||
| 		Event     string        `json:"event"` | ||||
| 		Status    string        `json:"status"` | ||||
| 		Errors    PipelineError `json:"errors"` | ||||
| 		Enqueued  int64         `json:"enqueued_at"` | ||||
| 		Created   int64         `json:"created_at"` | ||||
| 		Updated   int64         `json:"updated_at"` | ||||
| 		Started   int64         `json:"started_at"` | ||||
| 		Finished  int64         `json:"finished_at"` | ||||
| 		Deploy    string        `json:"deploy_to"` | ||||
| 		Commit    string        `json:"commit"` | ||||
| 		Branch    string        `json:"branch"` | ||||
| 		Ref       string        `json:"ref"` | ||||
| 		Refspec   string        `json:"refspec"` | ||||
| 		CloneURL  string        `json:"clone_url"` | ||||
| 		Title     string        `json:"title"` | ||||
| 		Message   string        `json:"message"` | ||||
| 		Timestamp int64         `json:"timestamp"` | ||||
| 		Sender    string        `json:"sender"` | ||||
| 		Author    string        `json:"author"` | ||||
| 		Avatar    string        `json:"author_avatar"` | ||||
| 		Email     string        `json:"author_email"` | ||||
| 		ForgeURL  string        `json:"forge_url"` | ||||
| 		Reviewer  string        `json:"reviewed_by"` | ||||
| 		Reviewed  int64         `json:"reviewed_at"` | ||||
| 		Workflows []*Workflow   `json:"workflows,omitempty"` | ||||
| 		ID     int64         `json:"id"` | ||||
| 		Number int64         `json:"number"` | ||||
| 		Parent int64         `json:"parent"` | ||||
| 		Event  string        `json:"event"` | ||||
| 		Status string        `json:"status"` | ||||
| 		Errors PipelineError `json:"errors"` | ||||
| 		// Deprecated TODO remove in 3.x | ||||
| 		Enqueued  int64       `json:"enqueued_at"` | ||||
| 		Created   int64       `json:"created_at"` | ||||
| 		Updated   int64       `json:"updated_at"` | ||||
| 		Started   int64       `json:"started_at"` | ||||
| 		Finished  int64       `json:"finished_at"` | ||||
| 		Deploy    string      `json:"deploy_to"` | ||||
| 		Commit    string      `json:"commit"` | ||||
| 		Branch    string      `json:"branch"` | ||||
| 		Ref       string      `json:"ref"` | ||||
| 		Refspec   string      `json:"refspec"` | ||||
| 		CloneURL  string      `json:"clone_url"` | ||||
| 		Title     string      `json:"title"` | ||||
| 		Message   string      `json:"message"` | ||||
| 		Timestamp int64       `json:"timestamp"` | ||||
| 		Sender    string      `json:"sender"` | ||||
| 		Author    string      `json:"author"` | ||||
| 		Avatar    string      `json:"author_avatar"` | ||||
| 		Email     string      `json:"author_email"` | ||||
| 		ForgeURL  string      `json:"forge_url"` | ||||
| 		Reviewer  string      `json:"reviewed_by"` | ||||
| 		Reviewed  int64       `json:"reviewed_at"` | ||||
| 		Workflows []*Workflow `json:"workflows,omitempty"` | ||||
| 	} | ||||
|  | ||||
| 	// Workflow represents a workflow in the pipeline. | ||||
| @@ -134,8 +135,10 @@ type ( | ||||
| 		Address  string `json:"address"` | ||||
| 		Username string `json:"username"` | ||||
| 		Password string `json:"password,omitempty"` | ||||
| 		Email    string `json:"email"` | ||||
| 		Token    string `json:"token"` | ||||
| 		// Deprecated | ||||
| 		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. | ||||
|   | ||||
		Reference in New Issue
	
	Block a user