mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2024-12-30 12:20:33 +00:00
Enable golangci linter forcetypeassert (#3168)
Split out from https://github.com/woodpecker-ci/woodpecker/pull/2960
This commit is contained in:
parent
f813badcf9
commit
9bbba4441d
13 changed files with 81 additions and 39 deletions
|
@ -164,6 +164,7 @@ linters:
|
||||||
- nolintlint
|
- nolintlint
|
||||||
- stylecheck
|
- stylecheck
|
||||||
- contextcheck
|
- contextcheck
|
||||||
|
- forcetypeassert
|
||||||
|
|
||||||
run:
|
run:
|
||||||
timeout: 15m
|
timeout: 15m
|
||||||
|
|
|
@ -216,7 +216,12 @@ func (e *kube) WaitStep(ctx context.Context, step *types.Step, taskUUID string)
|
||||||
finished := make(chan bool)
|
finished := make(chan bool)
|
||||||
|
|
||||||
podUpdated := func(old, new any) {
|
podUpdated := func(old, new any) {
|
||||||
pod := new.(*v1.Pod)
|
pod, ok := new.(*v1.Pod)
|
||||||
|
if !ok {
|
||||||
|
log.Error().Msgf("could not parse pod: %v", new)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if pod.Name == podName {
|
if pod.Name == podName {
|
||||||
if isImagePullBackOffState(pod) {
|
if isImagePullBackOffState(pod) {
|
||||||
finished <- true
|
finished <- true
|
||||||
|
@ -276,7 +281,12 @@ func (e *kube) TailStep(ctx context.Context, step *types.Step, taskUUID string)
|
||||||
up := make(chan bool)
|
up := make(chan bool)
|
||||||
|
|
||||||
podUpdated := func(old, new any) {
|
podUpdated := func(old, new any) {
|
||||||
pod := new.(*v1.Pod)
|
pod, ok := new.(*v1.Pod)
|
||||||
|
if !ok {
|
||||||
|
log.Error().Msgf("could not parse pod: %v", new)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
if pod.Name == podName {
|
if pod.Name == podName {
|
||||||
switch pod.Status.Phase {
|
switch pod.Status.Phase {
|
||||||
case v1.PodRunning, v1.PodSucceeded, v1.PodFailed:
|
case v1.PodRunning, v1.PodSucceeded, v1.PodFailed:
|
||||||
|
|
|
@ -257,7 +257,13 @@ func (e *local) getState(taskUUID string) (*workflowState, error) {
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, ErrWorkflowStateNotFound
|
return nil, ErrWorkflowStateNotFound
|
||||||
}
|
}
|
||||||
return state.(*workflowState), nil
|
|
||||||
|
s, ok := state.(*workflowState)
|
||||||
|
if !ok {
|
||||||
|
return nil, fmt.Errorf("could not parse state: %v", state)
|
||||||
|
}
|
||||||
|
|
||||||
|
return s, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (e *local) saveState(taskUUID string, state *workflowState) {
|
func (e *local) saveState(taskUUID string, state *workflowState) {
|
||||||
|
|
|
@ -195,7 +195,11 @@ func (c *Constraint) Match(m metadata.Metadata, global bool, env map[string]stri
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return false, err
|
return false, err
|
||||||
}
|
}
|
||||||
match = match && result.(bool)
|
bresult, ok := result.(bool)
|
||||||
|
if !ok {
|
||||||
|
return false, fmt.Errorf("could not parse result: %v", result)
|
||||||
|
}
|
||||||
|
match = match && bresult
|
||||||
}
|
}
|
||||||
|
|
||||||
return match, nil
|
return match, nil
|
||||||
|
|
|
@ -90,6 +90,8 @@ func handleNetwork(name string, value any) (*Network, error) {
|
||||||
network := &Network{
|
network := &Network{
|
||||||
Name: name,
|
Name: name,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var ok bool
|
||||||
for mapKey, mapValue := range v {
|
for mapKey, mapValue := range v {
|
||||||
switch mapKey {
|
switch mapKey {
|
||||||
case "aliases":
|
case "aliases":
|
||||||
|
@ -99,12 +101,22 @@ func handleNetwork(name string, value any) (*Network, error) {
|
||||||
}
|
}
|
||||||
network.Aliases = []string{}
|
network.Aliases = []string{}
|
||||||
for _, alias := range aliases {
|
for _, alias := range aliases {
|
||||||
network.Aliases = append(network.Aliases, alias.(string))
|
a, ok := alias.(string)
|
||||||
|
if !ok {
|
||||||
|
return &Network{}, fmt.Errorf("cannot unmarshal '%v' to type %T into a string value", aliases, aliases)
|
||||||
|
}
|
||||||
|
network.Aliases = append(network.Aliases, a)
|
||||||
}
|
}
|
||||||
case "ipv4_address":
|
case "ipv4_address":
|
||||||
network.IPv4Address = mapValue.(string)
|
network.IPv4Address, ok = mapValue.(string)
|
||||||
|
if !ok {
|
||||||
|
return &Network{}, fmt.Errorf("cannot unmarshal '%v' to type %T into a string value", network, network)
|
||||||
|
}
|
||||||
case "ipv6_address":
|
case "ipv6_address":
|
||||||
network.IPv6Address = mapValue.(string)
|
network.IPv6Address, ok = mapValue.(string)
|
||||||
|
if !ok {
|
||||||
|
return &Network{}, fmt.Errorf("cannot unmarshal '%v' to type %T into a string value", network, network)
|
||||||
|
}
|
||||||
default:
|
default:
|
||||||
// Ignorer unknown keys ?
|
// Ignorer unknown keys ?
|
||||||
continue
|
continue
|
||||||
|
|
|
@ -45,10 +45,12 @@ func Test_bitbucket(t *testing.T) {
|
||||||
|
|
||||||
g.It("Should return client with default endpoint", func() {
|
g.It("Should return client with default endpoint", func() {
|
||||||
forge, _ := New(&Opts{Client: "4vyW6b49Z", Secret: "a5012f6c6"})
|
forge, _ := New(&Opts{Client: "4vyW6b49Z", Secret: "a5012f6c6"})
|
||||||
g.Assert(forge.(*config).url).Equal(DefaultURL)
|
|
||||||
g.Assert(forge.(*config).API).Equal(DefaultAPI)
|
f, _ := forge.(*config)
|
||||||
g.Assert(forge.(*config).Client).Equal("4vyW6b49Z")
|
g.Assert(f.url).Equal(DefaultURL)
|
||||||
g.Assert(forge.(*config).Secret).Equal("a5012f6c6")
|
g.Assert(f.API).Equal(DefaultAPI)
|
||||||
|
g.Assert(f.Client).Equal("4vyW6b49Z")
|
||||||
|
g.Assert(f.Secret).Equal("a5012f6c6")
|
||||||
})
|
})
|
||||||
|
|
||||||
g.It("Should return the netrc file", func() {
|
g.It("Should return the netrc file", func() {
|
||||||
|
|
|
@ -57,8 +57,10 @@ func Test_gitea(t *testing.T) {
|
||||||
URL: "http://localhost:8080",
|
URL: "http://localhost:8080",
|
||||||
SkipVerify: true,
|
SkipVerify: true,
|
||||||
})
|
})
|
||||||
g.Assert(forge.(*Gitea).url).Equal("http://localhost:8080")
|
|
||||||
g.Assert(forge.(*Gitea).SkipVerify).Equal(true)
|
f, _ := forge.(*Gitea)
|
||||||
|
g.Assert(f.url).Equal("http://localhost:8080")
|
||||||
|
g.Assert(f.SkipVerify).Equal(true)
|
||||||
})
|
})
|
||||||
g.It("Should handle malformed url", func() {
|
g.It("Should handle malformed url", func() {
|
||||||
_, err := New(Opts{URL: "%gh&%ij"})
|
_, err := New(Opts{URL: "%gh&%ij"})
|
||||||
|
|
|
@ -434,7 +434,8 @@ func (c *client) newClientToken(ctx context.Context, token string) *github.Clien
|
||||||
)
|
)
|
||||||
tc := oauth2.NewClient(ctx, ts)
|
tc := oauth2.NewClient(ctx, ts)
|
||||||
if c.SkipVerify {
|
if c.SkipVerify {
|
||||||
tc.Transport.(*oauth2.Transport).Base = &http.Transport{
|
tp, _ := tc.Transport.(*oauth2.Transport)
|
||||||
|
tp.Base = &http.Transport{
|
||||||
Proxy: http.ProxyFromEnvironment,
|
Proxy: http.ProxyFromEnvironment,
|
||||||
TLSClientConfig: &tls.Config{
|
TLSClientConfig: &tls.Config{
|
||||||
InsecureSkipVerify: true,
|
InsecureSkipVerify: true,
|
||||||
|
|
|
@ -51,11 +51,12 @@ func Test_github(t *testing.T) {
|
||||||
Secret: "I1NiIsInR5",
|
Secret: "I1NiIsInR5",
|
||||||
SkipVerify: true,
|
SkipVerify: true,
|
||||||
})
|
})
|
||||||
g.Assert(forge.(*client).url).Equal("http://localhost:8080")
|
f, _ := forge.(*client)
|
||||||
g.Assert(forge.(*client).API).Equal("http://localhost:8080/api/v3/")
|
g.Assert(f.url).Equal("http://localhost:8080")
|
||||||
g.Assert(forge.(*client).Client).Equal("0ZXh0IjoiI")
|
g.Assert(f.API).Equal("http://localhost:8080/api/v3/")
|
||||||
g.Assert(forge.(*client).Secret).Equal("I1NiIsInR5")
|
g.Assert(f.Client).Equal("0ZXh0IjoiI")
|
||||||
g.Assert(forge.(*client).SkipVerify).Equal(true)
|
g.Assert(f.Secret).Equal("I1NiIsInR5")
|
||||||
|
g.Assert(f.SkipVerify).Equal(true)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
|
@ -203,10 +203,12 @@ func (q *fifo) Info(_ context.Context) InfoT {
|
||||||
stats.Stats.Complete = 0 // TODO: implement this
|
stats.Stats.Complete = 0 // TODO: implement this
|
||||||
|
|
||||||
for e := q.pending.Front(); e != nil; e = e.Next() {
|
for e := q.pending.Front(); e != nil; e = e.Next() {
|
||||||
stats.Pending = append(stats.Pending, e.Value.(*model.Task))
|
task, _ := e.Value.(*model.Task)
|
||||||
|
stats.Pending = append(stats.Pending, task)
|
||||||
}
|
}
|
||||||
for e := q.waitingOnDeps.Front(); e != nil; e = e.Next() {
|
for e := q.waitingOnDeps.Front(); e != nil; e = e.Next() {
|
||||||
stats.WaitingOnDeps = append(stats.WaitingOnDeps, e.Value.(*model.Task))
|
task, _ := e.Value.(*model.Task)
|
||||||
|
stats.WaitingOnDeps = append(stats.WaitingOnDeps, task)
|
||||||
}
|
}
|
||||||
for _, entry := range q.running {
|
for _, entry := range q.running {
|
||||||
stats.Running = append(stats.Running, entry.item)
|
stats.Running = append(stats.Running, entry.item)
|
||||||
|
@ -243,7 +245,7 @@ func (q *fifo) process() {
|
||||||
q.resubmitExpiredPipelines()
|
q.resubmitExpiredPipelines()
|
||||||
q.filterWaiting()
|
q.filterWaiting()
|
||||||
for pending, worker := q.assignToWorker(); pending != nil && worker != nil; pending, worker = q.assignToWorker() {
|
for pending, worker := q.assignToWorker(); pending != nil && worker != nil; pending, worker = q.assignToWorker() {
|
||||||
task := pending.Value.(*model.Task)
|
task, _ := pending.Value.(*model.Task)
|
||||||
task.AgentID = worker.agentID
|
task.AgentID = worker.agentID
|
||||||
delete(q.workers, worker)
|
delete(q.workers, worker)
|
||||||
q.pending.Remove(pending)
|
q.pending.Remove(pending)
|
||||||
|
@ -261,7 +263,7 @@ func (q *fifo) filterWaiting() {
|
||||||
var nextWaiting *list.Element
|
var nextWaiting *list.Element
|
||||||
for e := q.waitingOnDeps.Front(); e != nil; e = nextWaiting {
|
for e := q.waitingOnDeps.Front(); e != nil; e = nextWaiting {
|
||||||
nextWaiting = e.Next()
|
nextWaiting = e.Next()
|
||||||
task := e.Value.(*model.Task)
|
task, _ := e.Value.(*model.Task)
|
||||||
q.pending.PushBack(task)
|
q.pending.PushBack(task)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -271,7 +273,7 @@ func (q *fifo) filterWaiting() {
|
||||||
var nextPending *list.Element
|
var nextPending *list.Element
|
||||||
for e := q.pending.Front(); e != nil; e = nextPending {
|
for e := q.pending.Front(); e != nil; e = nextPending {
|
||||||
nextPending = e.Next()
|
nextPending = e.Next()
|
||||||
task := e.Value.(*model.Task)
|
task, _ := e.Value.(*model.Task)
|
||||||
if q.depsInQueue(task) {
|
if q.depsInQueue(task) {
|
||||||
log.Debug().Msgf("queue: waiting due to unmet dependencies %v", task.ID)
|
log.Debug().Msgf("queue: waiting due to unmet dependencies %v", task.ID)
|
||||||
q.waitingOnDeps.PushBack(task)
|
q.waitingOnDeps.PushBack(task)
|
||||||
|
@ -289,7 +291,7 @@ func (q *fifo) assignToWorker() (*list.Element, *worker) {
|
||||||
var next *list.Element
|
var next *list.Element
|
||||||
for e := q.pending.Front(); e != nil; e = next {
|
for e := q.pending.Front(); e != nil; e = next {
|
||||||
next = e.Next()
|
next = e.Next()
|
||||||
task := e.Value.(*model.Task)
|
task, _ := e.Value.(*model.Task)
|
||||||
log.Debug().Msgf("queue: trying to assign task: %v with deps %v", task.ID, task.Dependencies)
|
log.Debug().Msgf("queue: trying to assign task: %v with deps %v", task.ID, task.Dependencies)
|
||||||
|
|
||||||
for w := range q.workers {
|
for w := range q.workers {
|
||||||
|
@ -372,7 +374,7 @@ func (q *fifo) removeFromPending(taskID string) {
|
||||||
var next *list.Element
|
var next *list.Element
|
||||||
for e := q.pending.Front(); e != nil; e = next {
|
for e := q.pending.Front(); e != nil; e = next {
|
||||||
next = e.Next()
|
next = e.Next()
|
||||||
task := e.Value.(*model.Task)
|
task, _ := e.Value.(*model.Task)
|
||||||
if task.ID == taskID {
|
if task.ID == taskID {
|
||||||
log.Debug().Msgf("queue: %s is removed from pending", taskID)
|
log.Debug().Msgf("queue: %s is removed from pending", taskID)
|
||||||
q.pending.Remove(e)
|
q.pending.Remove(e)
|
||||||
|
|
|
@ -70,7 +70,7 @@ func TestFifo(t *testing.T) {
|
||||||
func TestFifoExpire(t *testing.T) {
|
func TestFifoExpire(t *testing.T) {
|
||||||
want := &model.Task{ID: "1"}
|
want := &model.Task{ID: "1"}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
q.extension = 0
|
q.extension = 0
|
||||||
assert.NoError(t, q.Push(noContext, want))
|
assert.NoError(t, q.Push(noContext, want))
|
||||||
info := q.Info(noContext)
|
info := q.Info(noContext)
|
||||||
|
@ -95,7 +95,7 @@ func TestFifoExpire(t *testing.T) {
|
||||||
func TestFifoWait(t *testing.T) {
|
func TestFifoWait(t *testing.T) {
|
||||||
want := &model.Task{ID: "1"}
|
want := &model.Task{ID: "1"}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.Push(noContext, want))
|
assert.NoError(t, q.Push(noContext, want))
|
||||||
|
|
||||||
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
@ -148,7 +148,7 @@ func TestFifoDependencies(t *testing.T) {
|
||||||
DepStatus: make(map[string]model.StatusValue),
|
DepStatus: make(map[string]model.StatusValue),
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task1}))
|
||||||
|
|
||||||
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
@ -184,7 +184,7 @@ func TestFifoErrors(t *testing.T) {
|
||||||
RunOn: []string{"success", "failure"},
|
RunOn: []string{"success", "failure"},
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
@ -233,7 +233,7 @@ func TestFifoErrors2(t *testing.T) {
|
||||||
DepStatus: make(map[string]model.StatusValue),
|
DepStatus: make(map[string]model.StatusValue),
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
for i := 0; i < 2; i++ {
|
for i := 0; i < 2; i++ {
|
||||||
|
@ -280,7 +280,7 @@ func TestFifoErrorsMultiThread(t *testing.T) {
|
||||||
DepStatus: make(map[string]model.StatusValue),
|
DepStatus: make(map[string]model.StatusValue),
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
obtainedWorkCh := make(chan *model.Task)
|
obtainedWorkCh := make(chan *model.Task)
|
||||||
|
@ -371,7 +371,7 @@ func TestFifoTransitiveErrors(t *testing.T) {
|
||||||
DepStatus: make(map[string]model.StatusValue),
|
DepStatus: make(map[string]model.StatusValue),
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
@ -421,7 +421,7 @@ func TestFifoCancel(t *testing.T) {
|
||||||
RunOn: []string{"success", "failure"},
|
RunOn: []string{"success", "failure"},
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
_, _ = q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
_, _ = q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
@ -441,7 +441,7 @@ func TestFifoPause(t *testing.T) {
|
||||||
ID: "1",
|
ID: "1",
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
var wg sync.WaitGroup
|
var wg sync.WaitGroup
|
||||||
wg.Add(1)
|
wg.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
|
@ -473,7 +473,7 @@ func TestFifoPauseResume(t *testing.T) {
|
||||||
ID: "1",
|
ID: "1",
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
q.Pause()
|
q.Pause()
|
||||||
assert.NoError(t, q.Push(noContext, task1))
|
assert.NoError(t, q.Push(noContext, task1))
|
||||||
q.Resume()
|
q.Resume()
|
||||||
|
@ -499,7 +499,7 @@ func TestWaitingVsPending(t *testing.T) {
|
||||||
RunOn: []string{"success", "failure"},
|
RunOn: []string{"success", "failure"},
|
||||||
}
|
}
|
||||||
|
|
||||||
q := New(context.Background()).(*fifo)
|
q, _ := New(context.Background()).(*fifo)
|
||||||
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
assert.NoError(t, q.PushAtOnce(noContext, []*model.Task{task2, task3, task1}))
|
||||||
|
|
||||||
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
got, _ := q.Poll(noContext, 1, func(*model.Task) bool { return true })
|
||||||
|
|
|
@ -23,7 +23,7 @@ import (
|
||||||
|
|
||||||
// AuthorizeAgent authorizes requests from agent to access the queue.
|
// AuthorizeAgent authorizes requests from agent to access the queue.
|
||||||
func AuthorizeAgent(c *gin.Context) {
|
func AuthorizeAgent(c *gin.Context) {
|
||||||
secret := c.MustGet("agent").(string)
|
secret, _ := c.MustGet("agent").(string)
|
||||||
if secret == "" {
|
if secret == "" {
|
||||||
c.String(401, "invalid or empty token.")
|
c.String(401, "invalid or empty token.")
|
||||||
return
|
return
|
||||||
|
|
|
@ -27,7 +27,8 @@ type Setter interface {
|
||||||
|
|
||||||
// FromContext returns the Store associated with this context.
|
// FromContext returns the Store associated with this context.
|
||||||
func FromContext(c context.Context) Store {
|
func FromContext(c context.Context) Store {
|
||||||
return c.Value(key).(Store)
|
store, _ := c.Value(key).(Store)
|
||||||
|
return store
|
||||||
}
|
}
|
||||||
|
|
||||||
// TryFromContext try to return the Store associated with this context.
|
// TryFromContext try to return the Store associated with this context.
|
||||||
|
|
Loading…
Reference in a new issue