From 2081ca85db2fb28ede0e305f351f1d08d425ee0a Mon Sep 17 00:00:00 2001 From: qwerty287 <80460567+qwerty287@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:49:03 +0200 Subject: [PATCH] Refactor JSON and SDK fields (#3968) --- cmd/server/docs/docs.go | 43 +++----- docs/docs/91-migrations.md | 1 + server/model/cron.go | 16 +-- server/model/feed.go | 6 +- server/model/pipeline.go | 10 +- server/model/step.go | 4 +- server/model/workflow.go | 4 +- .../migration/034_rename_start_end_time.go | 59 ++++++++++ server/store/datastore/migration/migration.go | 1 + .../components/repo/pipeline/PipelineLog.vue | 12 +-- .../repo/pipeline/PipelineStepDuration.vue | 6 +- .../repo/pipeline/PipelineStepList.vue | 2 +- web/src/compositions/usePipeline.ts | 8 +- web/src/lib/api/types/pipeline.ts | 22 ++-- web/src/utils/helpers.ts | 2 +- woodpecker-go/woodpecker/types.go | 101 ++++++++---------- 16 files changed, 164 insertions(+), 133 deletions(-) create mode 100644 server/store/datastore/migration/034_rename_start_end_time.go diff --git a/cmd/server/docs/docs.go b/cmd/server/docs/docs.go index 3113408cc..2b8437fd1 100644 --- a/cmd/server/docs/docs.go +++ b/cmd/server/docs/docs.go @@ -4415,8 +4415,7 @@ const docTemplate = `{ "branch": { "type": "string" }, - "created_at": { - "description": "TODO change JSON field to \"created\" in 3.0", + "created": { "type": "integer" }, "creator_id": { @@ -4458,15 +4457,13 @@ const docTemplate = `{ "commit": { "type": "string" }, - "created_at": { - "description": "TODO change JSON field to \"created\" in 3.0", + "created": { "type": "integer" }, "event": { "type": "string" }, - "finished_at": { - "description": "TODO change JSON field to \"finished\" in 3.0", + "finished": { "type": "integer" }, "id": { @@ -4487,8 +4484,7 @@ const docTemplate = `{ "repo_id": { "type": "integer" }, - "started_at": { - "description": "TODO change JSON field to \"started\" in 3.0", + "started": { "type": "integer" }, "status": { @@ -4645,8 +4641,7 @@ const docTemplate = `{ "commit": { "type": "string" }, - "created_at": { - "description": "TODO change JSON field to \"created\" in 3.0", + "created": { "type": "integer" }, "deploy_task": { @@ -4664,8 +4659,7 @@ const docTemplate = `{ "event": { "$ref": "#/definitions/WebhookEvent" }, - "finished_at": { - "description": "TODO change JSON field to \"finished\" in 3.0", + "finished": { "type": "integer" }, "forge_url": { @@ -4698,8 +4692,7 @@ const docTemplate = `{ "refspec": { "type": "string" }, - "reviewed_at": { - "description": "TODO change JSON field to \"reviewed\" in 3.0", + "reviewed": { "type": "integer" }, "reviewed_by": { @@ -4709,8 +4702,7 @@ const docTemplate = `{ "description": "uses reported user for webhooks and name of cron for cron pipelines", "type": "string" }, - "started_at": { - "description": "TODO change JSON field to \"started\" in 3.0", + "started": { "type": "integer" }, "status": { @@ -4722,8 +4714,7 @@ const docTemplate = `{ "title": { "type": "string" }, - "updated_at": { - "description": "TODO change JSON field to \"updated\" in 3.0", + "updated": { "type": "integer" }, "variables": { @@ -5012,15 +5003,15 @@ const docTemplate = `{ "Step": { "type": "object", "properties": { - "end_time": { - "type": "integer" - }, "error": { "type": "string" }, "exit_code": { "type": "integer" }, + "finished": { + "type": "integer" + }, "id": { "type": "integer" }, @@ -5036,7 +5027,7 @@ const docTemplate = `{ "ppid": { "type": "integer" }, - "start_time": { + "started": { "type": "integer" }, "state": { @@ -5196,9 +5187,6 @@ const docTemplate = `{ "$ref": "#/definitions/Step" } }, - "end_time": { - "type": "integer" - }, "environ": { "type": "object", "additionalProperties": { @@ -5208,6 +5196,9 @@ const docTemplate = `{ "error": { "type": "string" }, + "finished": { + "type": "integer" + }, "id": { "type": "integer" }, @@ -5223,7 +5214,7 @@ const docTemplate = `{ "platform": { "type": "string" }, - "start_time": { + "started": { "type": "integer" }, "state": { diff --git a/docs/docs/91-migrations.md b/docs/docs/91-migrations.md index 33b716173..d9af52e34 100644 --- a/docs/docs/91-migrations.md +++ b/docs/docs/91-migrations.md @@ -25,6 +25,7 @@ Some versions need some changes to the server configuration or the pipeline conf - Deprecated `environment` filter, use `when.evaluate` - Removed `WOODPECKER_WEBHOOK_HOST` in favor of `WOODPECKER_EXPERT_WEBHOOK_HOST` - Migrated to rfc9421 for webhook signatures +- Renamed `start_time`, `end_time`, `created_at`, `started_at`, `finished_at` and `reviewed_at` JSON fields to `started`, `finished`, `created`, `started`, `finished`, `reviewed` ## 2.0.0 diff --git a/server/model/cron.go b/server/model/cron.go index fb72665c7..cdce73ef3 100644 --- a/server/model/cron.go +++ b/server/model/cron.go @@ -21,14 +21,14 @@ import ( ) type Cron struct { - ID int64 `json:"id" xorm:"pk autoincr 'id'"` - Name string `json:"name" xorm:"name UNIQUE(s) INDEX"` - RepoID int64 `json:"repo_id" xorm:"repo_id UNIQUE(s) INDEX"` - CreatorID int64 `json:"creator_id" xorm:"creator_id INDEX"` - NextExec int64 `json:"next_exec" xorm:"next_exec"` - Schedule string `json:"schedule" xorm:"schedule NOT NULL"` // @weekly, 3min, ... - Created int64 `json:"created_at" xorm:"created NOT NULL DEFAULT 0"` // TODO change JSON field to "created" in 3.0 - Branch string `json:"branch" xorm:"branch"` + ID int64 `json:"id" xorm:"pk autoincr 'id'"` + Name string `json:"name" xorm:"name UNIQUE(s) INDEX"` + RepoID int64 `json:"repo_id" xorm:"repo_id UNIQUE(s) INDEX"` + CreatorID int64 `json:"creator_id" xorm:"creator_id INDEX"` + NextExec int64 `json:"next_exec" xorm:"next_exec"` + Schedule string `json:"schedule" xorm:"schedule NOT NULL"` // @weekly, 3min, ... + Created int64 `json:"created" xorm:"created NOT NULL DEFAULT 0"` + Branch string `json:"branch" xorm:"branch"` } // @name Cron // TableName returns the database table name for xorm. diff --git a/server/model/feed.go b/server/model/feed.go index 0dd4b5d3a..04357fc4e 100644 --- a/server/model/feed.go +++ b/server/model/feed.go @@ -22,9 +22,9 @@ type Feed struct { Number int64 `json:"number,omitempty" xorm:"pipeline_number"` Event string `json:"event,omitempty" xorm:"pipeline_event"` Status string `json:"status,omitempty" xorm:"pipeline_status"` - Created int64 `json:"created_at,omitempty" xorm:"pipeline_created"` // TODO change JSON field to "created" in 3.0 - Started int64 `json:"started_at,omitempty" xorm:"pipeline_started"` // TODO change JSON field to "started" in 3.0 - Finished int64 `json:"finished_at,omitempty" xorm:"pipeline_finished"` // TODO change JSON field to "finished" in 3.0 + Created int64 `json:"created,omitempty" xorm:"pipeline_created"` + Started int64 `json:"started,omitempty" xorm:"pipeline_started"` + Finished int64 `json:"finished,omitempty" xorm:"pipeline_finished"` Commit string `json:"commit,omitempty" xorm:"pipeline_commit"` Branch string `json:"branch,omitempty" xorm:"pipeline_branch"` Ref string `json:"ref,omitempty" xorm:"pipeline_ref"` diff --git a/server/model/pipeline.go b/server/model/pipeline.go index 5106308de..a073ad15f 100644 --- a/server/model/pipeline.go +++ b/server/model/pipeline.go @@ -28,10 +28,10 @@ type Pipeline struct { Event WebhookEvent `json:"event" xorm:"event"` Status StatusValue `json:"status" xorm:"INDEX 'status'"` Errors []*types.PipelineError `json:"errors" xorm:"json 'errors'"` - Created int64 `json:"created_at" xorm:"'created' NOT NULL DEFAULT 0 created"` // TODO change JSON field to "created" in 3.0 - Updated int64 `json:"updated_at" xorm:"'updated' NOT NULL DEFAULT 0 updated"` // TODO change JSON field to "updated" in 3.0 - Started int64 `json:"started_at" xorm:"started"` // TODO change JSON field to "started" in 3.0 - Finished int64 `json:"finished_at" xorm:"finished"` // TODO change JSON field to "finished" in 3.0 + Created int64 `json:"created" xorm:"'created' NOT NULL DEFAULT 0 created"` + Updated int64 `json:"updated" xorm:"'updated' NOT NULL DEFAULT 0 updated"` + Started int64 `json:"started" xorm:"started"` + Finished int64 `json:"finished" xorm:"finished"` DeployTo string `json:"deploy_to" xorm:"deploy"` DeployTask string `json:"deploy_task" xorm:"deploy_task"` Commit string `json:"commit" xorm:"commit"` @@ -46,7 +46,7 @@ type Pipeline struct { Email string `json:"author_email" xorm:"email"` ForgeURL string `json:"forge_url" xorm:"forge_url"` Reviewer string `json:"reviewed_by" xorm:"reviewer"` - Reviewed int64 `json:"reviewed_at" xorm:"reviewed"` // TODO change JSON field to "reviewed" in 3.0 + Reviewed int64 `json:"reviewed" xorm:"reviewed"` Workflows []*Workflow `json:"workflows,omitempty" xorm:"-"` ChangedFiles []string `json:"changed_files,omitempty" xorm:"LONGTEXT 'changed_files'"` AdditionalVariables map[string]string `json:"variables,omitempty" xorm:"json 'additional_variables'"` diff --git a/server/model/step.go b/server/model/step.go index 97189e733..dba0d3bac 100644 --- a/server/model/step.go +++ b/server/model/step.go @@ -36,8 +36,8 @@ type Step struct { Error string `json:"error,omitempty" xorm:"TEXT 'error'"` Failure string `json:"-" xorm:"failure"` ExitCode int `json:"exit_code" xorm:"exit_code"` - Started int64 `json:"start_time,omitempty" xorm:"started"` - Finished int64 `json:"end_time,omitempty" xorm:"stopped"` + Started int64 `json:"started,omitempty" xorm:"started"` + Finished int64 `json:"finished,omitempty" xorm:"finished"` Type StepType `json:"type,omitempty" xorm:"type"` } // @name Step diff --git a/server/model/workflow.go b/server/model/workflow.go index 7efd5f151..e6029ab69 100644 --- a/server/model/workflow.go +++ b/server/model/workflow.go @@ -23,8 +23,8 @@ type Workflow struct { Name string `json:"name" xorm:"name"` State StatusValue `json:"state" xorm:"state"` Error string `json:"error,omitempty" xorm:"TEXT 'error'"` - Started int64 `json:"start_time,omitempty" xorm:"started"` - Finished int64 `json:"end_time,omitempty" xorm:"stopped"` + Started int64 `json:"started,omitempty" xorm:"started"` + Finished int64 `json:"finished,omitempty" xorm:"finished"` AgentID int64 `json:"agent_id,omitempty" xorm:"agent_id"` Platform string `json:"platform,omitempty" xorm:"platform"` Environ map[string]string `json:"environ,omitempty" xorm:"json 'environ'"` diff --git a/server/store/datastore/migration/034_rename_start_end_time.go b/server/store/datastore/migration/034_rename_start_end_time.go new file mode 100644 index 000000000..2bc968f6b --- /dev/null +++ b/server/store/datastore/migration/034_rename_start_end_time.go @@ -0,0 +1,59 @@ +// 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 ( + "fmt" + + "src.techknowlogick.com/xormigrate" + "xorm.io/xorm" +) + +type stepV033 struct { + Finished int64 `xorm:"stopped"` +} + +func (stepV033) TableName() string { + return "steps" +} + +type workflowV033 struct { + Finished int64 `xorm:"stopped"` +} + +func (workflowV033) TableName() string { + return "workflows" +} + +var renameStartEndTime = xormigrate.Migration{ + ID: "rename-start-end-time", + MigrateSession: func(sess *xorm.Session) (err error) { + if err := sess.Sync(new(stepV033), new(workflowV033)); err != nil { + return fmt.Errorf("sync models failed: %w", err) + } + + // Step + if err := renameColumn(sess, "steps", "stopped", "finished"); err != nil { + return err + } + + // Workflow + if err := renameColumn(sess, "workflows", "stopped", "finished"); err != nil { + return err + } + + return nil + }, +} diff --git a/server/store/datastore/migration/migration.go b/server/store/datastore/migration/migration.go index a2a42b96b..da9b1f732 100644 --- a/server/store/datastore/migration/migration.go +++ b/server/store/datastore/migration/migration.go @@ -64,6 +64,7 @@ var migrationTasks = []*xormigrate.Migration{ &unifyColumnsTables, &alterTableRegistriesFixRequiredFields, &cronWithoutSec, + &renameStartEndTime, } var allBeans = []any{ diff --git a/web/src/components/repo/pipeline/PipelineLog.vue b/web/src/components/repo/pipeline/PipelineLog.vue index 3a9bca987..5fa128cb6 100644 --- a/web/src/components/repo/pipeline/PipelineLog.vue +++ b/web/src/components/repo/pipeline/PipelineLog.vue @@ -13,7 +13,7 @@