mirror of
https://github.com/woodpecker-ci/woodpecker.git
synced 2026-05-04 20:25:07 +00:00
Fix ignoring failures (#6155)
This commit is contained in:
@@ -53,7 +53,7 @@ func (p *Step) Running() bool {
|
||||
|
||||
// Failing returns true if the process state is failed, killed or error.
|
||||
func (p *Step) Failing() bool {
|
||||
return p.Failure == FailureFail && (p.State == StatusError || p.State == StatusKilled || p.State == StatusFailure)
|
||||
return p.State == StatusError || p.State == StatusKilled || p.State == StatusFailure
|
||||
}
|
||||
|
||||
// StepType identifies the type of step.
|
||||
|
||||
@@ -31,9 +31,9 @@ func TestStepStatus(t *testing.T) {
|
||||
|
||||
step.Failure = FailureIgnore
|
||||
step.State = StatusError
|
||||
assert.Equal(t, step.Failing(), false)
|
||||
assert.Equal(t, step.Failing(), true)
|
||||
step.State = StatusFailure
|
||||
assert.Equal(t, step.Failing(), false)
|
||||
assert.Equal(t, step.Failing(), true)
|
||||
step.Failure = FailureFail
|
||||
step.State = StatusError
|
||||
assert.Equal(t, step.Failing(), true)
|
||||
|
||||
@@ -25,7 +25,9 @@ func WorkflowStatus(steps []*model.Step) model.StatusValue {
|
||||
status := model.StatusSuccess
|
||||
|
||||
for _, p := range steps {
|
||||
status = MergeStatusValues(status, p.State)
|
||||
if p.Failure == model.FailureFail || !p.Failing() {
|
||||
status = MergeStatusValues(status, p.State)
|
||||
}
|
||||
}
|
||||
|
||||
return status
|
||||
|
||||
@@ -25,6 +25,160 @@ import (
|
||||
store_mocks "go.woodpecker-ci.org/woodpecker/v3/server/store/mocks"
|
||||
)
|
||||
|
||||
func TestWorkflowStatus(t *testing.T) {
|
||||
tests := []struct {
|
||||
s []*model.Step
|
||||
e model.StatusValue
|
||||
}{
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusFailure,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusSuccess,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
},
|
||||
e: model.StatusSuccess,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusFailure,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusFailure,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusPending,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
},
|
||||
e: model.StatusPending,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusPending,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusSuccess,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
},
|
||||
e: model.StatusPending,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusRunning,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusRunning,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusRunning,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
},
|
||||
e: model.StatusRunning,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusRunning,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
},
|
||||
e: model.StatusRunning,
|
||||
},
|
||||
{
|
||||
s: []*model.Step{
|
||||
{
|
||||
State: model.StatusRunning,
|
||||
Failure: model.FailureFail,
|
||||
},
|
||||
{
|
||||
State: model.StatusPending,
|
||||
Failure: model.FailureIgnore,
|
||||
},
|
||||
},
|
||||
e: model.StatusRunning,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
assert.Equal(t, tt.e, WorkflowStatus(tt.s))
|
||||
}
|
||||
}
|
||||
|
||||
func TestUpdateWorkflowStatusToRunning(t *testing.T) {
|
||||
t.Run("should update workflow to running status", func(t *testing.T) {
|
||||
workflow := model.Workflow{
|
||||
|
||||
Reference in New Issue
Block a user