From e90b50a3ad5d71ce55c4af7c0aa296bc0c19c1d3 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sat, 20 Sep 2025 12:48:48 +0200 Subject: [PATCH 1/4] rm unused --- server/pipeline/step_status.go | 33 ------------ server/pipeline/step_status_test.go | 82 ----------------------------- 2 files changed, 115 deletions(-) diff --git a/server/pipeline/step_status.go b/server/pipeline/step_status.go index 364384a05c3..31ac5b8dd14 100644 --- a/server/pipeline/step_status.go +++ b/server/pipeline/step_status.go @@ -16,8 +16,6 @@ package pipeline import ( - "time" - "go.woodpecker-ci.org/woodpecker/v3/pipeline" "go.woodpecker-ci.org/woodpecker/v3/pipeline/rpc" "go.woodpecker-ci.org/woodpecker/v3/server/model" @@ -43,12 +41,6 @@ func UpdateStepStatus(store store.Store, step *model.Step, state rpc.StepState) return store.StepUpdate(step) } -func UpdateStepToStatusStarted(store store.Store, step model.Step, state rpc.StepState) (*model.Step, error) { - step.Started = state.Started - step.State = model.StatusRunning - return &step, store.StepUpdate(&step) -} - func UpdateStepToStatusSkipped(store store.Store, step model.Step, finished int64) (*model.Step, error) { step.State = model.StatusSkipped if step.Started != 0 { @@ -57,28 +49,3 @@ func UpdateStepToStatusSkipped(store store.Store, step model.Step, finished int6 } return &step, store.StepUpdate(&step) } - -func UpdateStepStatusToDone(store store.Store, step model.Step, state rpc.StepState) (*model.Step, error) { - step.Finished = state.Finished - step.Error = state.Error - step.ExitCode = state.ExitCode - if state.Started == 0 { - step.State = model.StatusSkipped - } else { - step.State = model.StatusSuccess - } - if step.ExitCode != 0 || step.Error != "" { - step.State = model.StatusFailure - } - return &step, store.StepUpdate(&step) -} - -func UpdateStepToStatusKilled(store store.Store, step model.Step) (*model.Step, error) { - step.State = model.StatusKilled - step.Finished = time.Now().Unix() - if step.Started == 0 { - step.Started = step.Finished - } - step.ExitCode = pipeline.ExitCodeKilled - return &step, store.StepUpdate(&step) -} diff --git a/server/pipeline/step_status_test.go b/server/pipeline/step_status_test.go index 1d621288024..2af5a158c23 100644 --- a/server/pipeline/step_status_test.go +++ b/server/pipeline/step_status_test.go @@ -149,16 +149,6 @@ func TestUpdateStepStatusExitedWithCode(t *testing.T) { assert.Equal(t, 1, step.ExitCode) } -func TestUpdateStepToStatusStarted(t *testing.T) { - t.Parallel() - - state := rpc.StepState{Started: int64(42)} - step, _ := UpdateStepToStatusStarted(mockStoreStep(t), model.Step{}, state) - - assert.Equal(t, model.StatusRunning, step.State) - assert.EqualValues(t, 42, step.Started) -} - func TestUpdateStepToStatusSkipped(t *testing.T) { t.Parallel() @@ -180,75 +170,3 @@ func TestUpdateStepToStatusSkippedButStarted(t *testing.T) { assert.Equal(t, model.StatusSuccess, step.State) assert.EqualValues(t, 1, step.Finished) } - -func TestUpdateStepStatusToDoneSkipped(t *testing.T) { - t.Parallel() - - state := rpc.StepState{ - Finished: int64(34), - } - - step, _ := UpdateStepStatusToDone(mockStoreStep(t), model.Step{}, state) - - assert.Equal(t, model.StatusSkipped, step.State) - assert.EqualValues(t, 34, step.Finished) - assert.Empty(t, step.Error) - assert.Equal(t, 0, step.ExitCode) -} - -func TestUpdateStepStatusToDoneSuccess(t *testing.T) { - t.Parallel() - - state := rpc.StepState{ - Started: int64(42), - Finished: int64(34), - } - - step, _ := UpdateStepStatusToDone(mockStoreStep(t), model.Step{}, state) - - assert.Equal(t, model.StatusSuccess, step.State) - assert.EqualValues(t, 34, step.Finished) - assert.Empty(t, step.Error) - assert.Equal(t, 0, step.ExitCode) -} - -func TestUpdateStepStatusToDoneFailureWithError(t *testing.T) { - t.Parallel() - - state := rpc.StepState{Error: "an error"} - - step, _ := UpdateStepStatusToDone(mockStoreStep(t), model.Step{}, state) - - assert.Equal(t, model.StatusFailure, step.State) -} - -func TestUpdateStepStatusToDoneFailureWithExitCode(t *testing.T) { - t.Parallel() - - state := rpc.StepState{ExitCode: 43} - - step, _ := UpdateStepStatusToDone(mockStoreStep(t), model.Step{}, state) - - assert.Equal(t, model.StatusFailure, step.State) -} - -func TestUpdateStepToStatusKilledStarted(t *testing.T) { - t.Parallel() - - now := time.Now().Unix() - - step, _ := UpdateStepToStatusKilled(mockStoreStep(t), model.Step{}) - - assert.Equal(t, model.StatusKilled, step.State) - assert.LessOrEqual(t, now, step.Finished) - assert.Equal(t, step.Finished, step.Started) - assert.Equal(t, 137, step.ExitCode) -} - -func TestUpdateStepToStatusKilledNotStarted(t *testing.T) { - t.Parallel() - - step, _ := UpdateStepToStatusKilled(mockStoreStep(t), model.Step{Started: int64(1)}) - - assert.EqualValues(t, 1, step.Started) -} From 1e46db7f77dd1ec747d365f3df9265f37182fb56 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sat, 20 Sep 2025 12:56:08 +0200 Subject: [PATCH 2/4] Add `StepFinished` to log service --- server/grpc/rpc.go | 4 ++++ server/services/log/file/file.go | 2 ++ server/services/log/service.go | 1 + server/store/datastore/log.go | 2 ++ 4 files changed, 9 insertions(+) diff --git a/server/grpc/rpc.go b/server/grpc/rpc.go index dc576ae1cf8..c70e3edc2ae 100644 --- a/server/grpc/rpc.go +++ b/server/grpc/rpc.go @@ -188,6 +188,10 @@ func (s *RPC) Update(c context.Context, strWorkflowID string, state rpc.StepStat log.Error().Err(err).Msg("rpc.update: cannot update step") } + if state.Exited { + server.Config.Services.LogStore.StepFinished(step) + } + if currentPipeline.Workflows, err = s.store.WorkflowGetTree(currentPipeline); err != nil { log.Error().Err(err).Msg("cannot build tree from step list") return err diff --git a/server/services/log/file/file.go b/server/services/log/file/file.go index 3bc5b8a2b62..c150b4b531f 100644 --- a/server/services/log/file/file.go +++ b/server/services/log/file/file.go @@ -102,3 +102,5 @@ func (l logStore) LogAppend(step *model.Step, logEntries []*model.LogEntry) erro func (l logStore) LogDelete(step *model.Step) error { return os.Remove(l.filePath(step.ID)) } + +func (l logStore) StepFinished(_ *model.Step) {} diff --git a/server/services/log/service.go b/server/services/log/service.go index e922b89eef0..c4d98a84501 100644 --- a/server/services/log/service.go +++ b/server/services/log/service.go @@ -6,4 +6,5 @@ type Service interface { LogFind(step *model.Step) ([]*model.LogEntry, error) LogAppend(step *model.Step, logEntries []*model.LogEntry) error LogDelete(step *model.Step) error + StepFinished(step *model.Step) } diff --git a/server/store/datastore/log.go b/server/store/datastore/log.go index ade01c08c8e..36cc0829df9 100644 --- a/server/store/datastore/log.go +++ b/server/store/datastore/log.go @@ -56,3 +56,5 @@ func logDelete(sess *xorm.Session, stepID int64) error { _, err := sess.Where("step_id = ?", stepID).Delete(new(model.LogEntry)) return err } + +func (s storage) StepFinished(_ *model.Step) {} From 436303ffaeede05916e8f58c41cf75398b0ba30e Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sat, 20 Sep 2025 13:02:26 +0200 Subject: [PATCH 3/4] mocks --- pipeline/rpc/proto/woodpecker.pb.go | 9 ++++----- pipeline/rpc/proto/woodpecker_grpc.pb.go | 3 +-- server/pipeline/step_status_test.go | 1 - server/store/mocks/store.go | 5 +++++ server/store/store.go | 1 + 5 files changed, 11 insertions(+), 8 deletions(-) diff --git a/pipeline/rpc/proto/woodpecker.pb.go b/pipeline/rpc/proto/woodpecker.pb.go index be14acffe55..d0563df3104 100644 --- a/pipeline/rpc/proto/woodpecker.pb.go +++ b/pipeline/rpc/proto/woodpecker.pb.go @@ -15,19 +15,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.36.6 -// protoc v6.31.1 +// protoc-gen-go v1.36.9 +// protoc v6.32.0 // source: woodpecker.proto package proto import ( + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" unsafe "unsafe" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/pipeline/rpc/proto/woodpecker_grpc.pb.go b/pipeline/rpc/proto/woodpecker_grpc.pb.go index 9c21c298d77..e332e9fe7db 100644 --- a/pipeline/rpc/proto/woodpecker_grpc.pb.go +++ b/pipeline/rpc/proto/woodpecker_grpc.pb.go @@ -16,14 +16,13 @@ // Code generated by protoc-gen-go-grpc. DO NOT EDIT. // versions: // - protoc-gen-go-grpc v1.5.1 -// - protoc v6.31.1 +// - protoc v6.32.0 // source: woodpecker.proto package proto import ( context "context" - grpc "google.golang.org/grpc" codes "google.golang.org/grpc/codes" status "google.golang.org/grpc/status" diff --git a/server/pipeline/step_status_test.go b/server/pipeline/step_status_test.go index 2af5a158c23..03f08cd15f9 100644 --- a/server/pipeline/step_status_test.go +++ b/server/pipeline/step_status_test.go @@ -17,7 +17,6 @@ package pipeline import ( "testing" - "time" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/mock" diff --git a/server/store/mocks/store.go b/server/store/mocks/store.go index 260fc98384b..1a9fead5a4f 100644 --- a/server/store/mocks/store.go +++ b/server/store/mocks/store.go @@ -2424,6 +2424,11 @@ func (_m *Store) StepFind(_a0 *model.Pipeline, _a1 int) (*model.Step, error) { return r0, r1 } +// StepFinished provides a mock function with given fields: _a0 +func (_m *Store) StepFinished(_a0 *model.Step) { + _m.Called(_a0) +} + // StepList provides a mock function with given fields: _a0 func (_m *Store) StepList(_a0 *model.Pipeline) ([]*model.Step, error) { ret := _m.Called(_a0) diff --git a/server/store/store.go b/server/store/store.go index 98fe07d1c11..5c25f1e0eb8 100644 --- a/server/store/store.go +++ b/server/store/store.go @@ -149,6 +149,7 @@ type Store interface { LogFind(*model.Step) ([]*model.LogEntry, error) LogAppend(*model.Step, []*model.LogEntry) error LogDelete(*model.Step) error + StepFinished(*model.Step) // Tasks // TaskList TODO: paginate & opt filter From 17732e28f6b26cf1f5a847f63ab46ffd412f4373 Mon Sep 17 00:00:00 2001 From: qwerty287 Date: Sat, 20 Sep 2025 13:19:13 +0200 Subject: [PATCH 4/4] only format openapi-related dirs --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d4bc8109f4d..fa0f0ff712f 100644 --- a/Makefile +++ b/Makefile @@ -116,7 +116,8 @@ generate: install-tools generate-openapi ## Run all code generations CGO_ENABLED=0 go generate ./... generate-openapi: install-tools ## Run openapi code generation and format it - go run github.com/swaggo/swag/cmd/swag fmt + go run github.com/swaggo/swag/cmd/swag fmt -d cmd/server/ + go run github.com/swaggo/swag/cmd/swag fmt -d server/ CGO_ENABLED=0 go generate cmd/server/openapi.go generate-license-header: install-tools