mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-11-22 09:51:01 +00:00
Clean up models (#3228)
This commit is contained in:
parent
a19c488a99
commit
5e2f7d81b3
27 changed files with 101 additions and 98 deletions
|
@ -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.
|
||||
|
|
Loading…
Reference in a new issue