Refactor JSON and SDK fields (#3968)

This commit is contained in:
qwerty287 2024-08-07 10:49:03 +02:00 committed by GitHub
parent 2d1bc9f15c
commit 2081ca85db
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
16 changed files with 164 additions and 133 deletions

View file

@ -4415,8 +4415,7 @@ const docTemplate = `{
"branch": { "branch": {
"type": "string" "type": "string"
}, },
"created_at": { "created": {
"description": "TODO change JSON field to \"created\" in 3.0",
"type": "integer" "type": "integer"
}, },
"creator_id": { "creator_id": {
@ -4458,15 +4457,13 @@ const docTemplate = `{
"commit": { "commit": {
"type": "string" "type": "string"
}, },
"created_at": { "created": {
"description": "TODO change JSON field to \"created\" in 3.0",
"type": "integer" "type": "integer"
}, },
"event": { "event": {
"type": "string" "type": "string"
}, },
"finished_at": { "finished": {
"description": "TODO change JSON field to \"finished\" in 3.0",
"type": "integer" "type": "integer"
}, },
"id": { "id": {
@ -4487,8 +4484,7 @@ const docTemplate = `{
"repo_id": { "repo_id": {
"type": "integer" "type": "integer"
}, },
"started_at": { "started": {
"description": "TODO change JSON field to \"started\" in 3.0",
"type": "integer" "type": "integer"
}, },
"status": { "status": {
@ -4645,8 +4641,7 @@ const docTemplate = `{
"commit": { "commit": {
"type": "string" "type": "string"
}, },
"created_at": { "created": {
"description": "TODO change JSON field to \"created\" in 3.0",
"type": "integer" "type": "integer"
}, },
"deploy_task": { "deploy_task": {
@ -4664,8 +4659,7 @@ const docTemplate = `{
"event": { "event": {
"$ref": "#/definitions/WebhookEvent" "$ref": "#/definitions/WebhookEvent"
}, },
"finished_at": { "finished": {
"description": "TODO change JSON field to \"finished\" in 3.0",
"type": "integer" "type": "integer"
}, },
"forge_url": { "forge_url": {
@ -4698,8 +4692,7 @@ const docTemplate = `{
"refspec": { "refspec": {
"type": "string" "type": "string"
}, },
"reviewed_at": { "reviewed": {
"description": "TODO change JSON field to \"reviewed\" in 3.0",
"type": "integer" "type": "integer"
}, },
"reviewed_by": { "reviewed_by": {
@ -4709,8 +4702,7 @@ const docTemplate = `{
"description": "uses reported user for webhooks and name of cron for cron pipelines", "description": "uses reported user for webhooks and name of cron for cron pipelines",
"type": "string" "type": "string"
}, },
"started_at": { "started": {
"description": "TODO change JSON field to \"started\" in 3.0",
"type": "integer" "type": "integer"
}, },
"status": { "status": {
@ -4722,8 +4714,7 @@ const docTemplate = `{
"title": { "title": {
"type": "string" "type": "string"
}, },
"updated_at": { "updated": {
"description": "TODO change JSON field to \"updated\" in 3.0",
"type": "integer" "type": "integer"
}, },
"variables": { "variables": {
@ -5012,15 +5003,15 @@ const docTemplate = `{
"Step": { "Step": {
"type": "object", "type": "object",
"properties": { "properties": {
"end_time": {
"type": "integer"
},
"error": { "error": {
"type": "string" "type": "string"
}, },
"exit_code": { "exit_code": {
"type": "integer" "type": "integer"
}, },
"finished": {
"type": "integer"
},
"id": { "id": {
"type": "integer" "type": "integer"
}, },
@ -5036,7 +5027,7 @@ const docTemplate = `{
"ppid": { "ppid": {
"type": "integer" "type": "integer"
}, },
"start_time": { "started": {
"type": "integer" "type": "integer"
}, },
"state": { "state": {
@ -5196,9 +5187,6 @@ const docTemplate = `{
"$ref": "#/definitions/Step" "$ref": "#/definitions/Step"
} }
}, },
"end_time": {
"type": "integer"
},
"environ": { "environ": {
"type": "object", "type": "object",
"additionalProperties": { "additionalProperties": {
@ -5208,6 +5196,9 @@ const docTemplate = `{
"error": { "error": {
"type": "string" "type": "string"
}, },
"finished": {
"type": "integer"
},
"id": { "id": {
"type": "integer" "type": "integer"
}, },
@ -5223,7 +5214,7 @@ const docTemplate = `{
"platform": { "platform": {
"type": "string" "type": "string"
}, },
"start_time": { "started": {
"type": "integer" "type": "integer"
}, },
"state": { "state": {

View file

@ -25,6 +25,7 @@ Some versions need some changes to the server configuration or the pipeline conf
- Deprecated `environment` filter, use `when.evaluate` - Deprecated `environment` filter, use `when.evaluate`
- Removed `WOODPECKER_WEBHOOK_HOST` in favor of `WOODPECKER_EXPERT_WEBHOOK_HOST` - Removed `WOODPECKER_WEBHOOK_HOST` in favor of `WOODPECKER_EXPERT_WEBHOOK_HOST`
- Migrated to rfc9421 for webhook signatures - 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 ## 2.0.0

View file

@ -27,7 +27,7 @@ type Cron struct {
CreatorID int64 `json:"creator_id" xorm:"creator_id INDEX"` CreatorID int64 `json:"creator_id" xorm:"creator_id INDEX"`
NextExec int64 `json:"next_exec" xorm:"next_exec"` NextExec int64 `json:"next_exec" xorm:"next_exec"`
Schedule string `json:"schedule" xorm:"schedule NOT NULL"` // @weekly, 3min, ... 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 Created int64 `json:"created" xorm:"created NOT NULL DEFAULT 0"`
Branch string `json:"branch" xorm:"branch"` Branch string `json:"branch" xorm:"branch"`
} // @name Cron } // @name Cron

View file

@ -22,9 +22,9 @@ type Feed struct {
Number int64 `json:"number,omitempty" xorm:"pipeline_number"` Number int64 `json:"number,omitempty" xorm:"pipeline_number"`
Event string `json:"event,omitempty" xorm:"pipeline_event"` Event string `json:"event,omitempty" xorm:"pipeline_event"`
Status string `json:"status,omitempty" xorm:"pipeline_status"` 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 Created int64 `json:"created,omitempty" xorm:"pipeline_created"`
Started int64 `json:"started_at,omitempty" xorm:"pipeline_started"` // TODO change JSON field to "started" in 3.0 Started int64 `json:"started,omitempty" xorm:"pipeline_started"`
Finished int64 `json:"finished_at,omitempty" xorm:"pipeline_finished"` // TODO change JSON field to "finished" in 3.0 Finished int64 `json:"finished,omitempty" xorm:"pipeline_finished"`
Commit string `json:"commit,omitempty" xorm:"pipeline_commit"` Commit string `json:"commit,omitempty" xorm:"pipeline_commit"`
Branch string `json:"branch,omitempty" xorm:"pipeline_branch"` Branch string `json:"branch,omitempty" xorm:"pipeline_branch"`
Ref string `json:"ref,omitempty" xorm:"pipeline_ref"` Ref string `json:"ref,omitempty" xorm:"pipeline_ref"`

View file

@ -28,10 +28,10 @@ type Pipeline struct {
Event WebhookEvent `json:"event" xorm:"event"` Event WebhookEvent `json:"event" xorm:"event"`
Status StatusValue `json:"status" xorm:"INDEX 'status'"` Status StatusValue `json:"status" xorm:"INDEX 'status'"`
Errors []*types.PipelineError `json:"errors" xorm:"json 'errors'"` 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 Created int64 `json:"created" xorm:"'created' NOT NULL DEFAULT 0 created"`
Updated int64 `json:"updated_at" xorm:"'updated' NOT NULL DEFAULT 0 updated"` // TODO change JSON field to "updated" in 3.0 Updated int64 `json:"updated" xorm:"'updated' NOT NULL DEFAULT 0 updated"`
Started int64 `json:"started_at" xorm:"started"` // TODO change JSON field to "started" in 3.0 Started int64 `json:"started" xorm:"started"`
Finished int64 `json:"finished_at" xorm:"finished"` // TODO change JSON field to "finished" in 3.0 Finished int64 `json:"finished" xorm:"finished"`
DeployTo string `json:"deploy_to" xorm:"deploy"` DeployTo string `json:"deploy_to" xorm:"deploy"`
DeployTask string `json:"deploy_task" xorm:"deploy_task"` DeployTask string `json:"deploy_task" xorm:"deploy_task"`
Commit string `json:"commit" xorm:"commit"` Commit string `json:"commit" xorm:"commit"`
@ -46,7 +46,7 @@ type Pipeline struct {
Email string `json:"author_email" xorm:"email"` Email string `json:"author_email" xorm:"email"`
ForgeURL string `json:"forge_url" xorm:"forge_url"` ForgeURL string `json:"forge_url" xorm:"forge_url"`
Reviewer string `json:"reviewed_by" xorm:"reviewer"` 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:"-"` Workflows []*Workflow `json:"workflows,omitempty" xorm:"-"`
ChangedFiles []string `json:"changed_files,omitempty" xorm:"LONGTEXT 'changed_files'"` ChangedFiles []string `json:"changed_files,omitempty" xorm:"LONGTEXT 'changed_files'"`
AdditionalVariables map[string]string `json:"variables,omitempty" xorm:"json 'additional_variables'"` AdditionalVariables map[string]string `json:"variables,omitempty" xorm:"json 'additional_variables'"`

View file

@ -36,8 +36,8 @@ type Step struct {
Error string `json:"error,omitempty" xorm:"TEXT 'error'"` Error string `json:"error,omitempty" xorm:"TEXT 'error'"`
Failure string `json:"-" xorm:"failure"` Failure string `json:"-" xorm:"failure"`
ExitCode int `json:"exit_code" xorm:"exit_code"` ExitCode int `json:"exit_code" xorm:"exit_code"`
Started int64 `json:"start_time,omitempty" xorm:"started"` Started int64 `json:"started,omitempty" xorm:"started"`
Finished int64 `json:"end_time,omitempty" xorm:"stopped"` Finished int64 `json:"finished,omitempty" xorm:"finished"`
Type StepType `json:"type,omitempty" xorm:"type"` Type StepType `json:"type,omitempty" xorm:"type"`
} // @name Step } // @name Step

View file

@ -23,8 +23,8 @@ type Workflow struct {
Name string `json:"name" xorm:"name"` Name string `json:"name" xorm:"name"`
State StatusValue `json:"state" xorm:"state"` State StatusValue `json:"state" xorm:"state"`
Error string `json:"error,omitempty" xorm:"TEXT 'error'"` Error string `json:"error,omitempty" xorm:"TEXT 'error'"`
Started int64 `json:"start_time,omitempty" xorm:"started"` Started int64 `json:"started,omitempty" xorm:"started"`
Finished int64 `json:"end_time,omitempty" xorm:"stopped"` Finished int64 `json:"finished,omitempty" xorm:"finished"`
AgentID int64 `json:"agent_id,omitempty" xorm:"agent_id"` AgentID int64 `json:"agent_id,omitempty" xorm:"agent_id"`
Platform string `json:"platform,omitempty" xorm:"platform"` Platform string `json:"platform,omitempty" xorm:"platform"`
Environ map[string]string `json:"environ,omitempty" xorm:"json 'environ'"` Environ map[string]string `json:"environ,omitempty" xorm:"json 'environ'"`

View file

@ -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
},
}

View file

@ -64,6 +64,7 @@ var migrationTasks = []*xormigrate.Migration{
&unifyColumnsTables, &unifyColumnsTables,
&alterTableRegistriesFixRequiredFields, &alterTableRegistriesFixRequiredFields,
&cronWithoutSec, &cronWithoutSec,
&renameStartEndTime,
} }
var allBeans = []any{ var allBeans = []any{

View file

@ -13,7 +13,7 @@
<div class="flex flex-row items-center ml-auto gap-x-2"> <div class="flex flex-row items-center ml-auto gap-x-2">
<IconButton <IconButton
v-if="step?.end_time !== undefined && hasLogs" v-if="step?.finished !== undefined && hasLogs"
:is-loading="downloadInProgress" :is-loading="downloadInProgress"
:title="$t('repo.pipeline.actions.log_download')" :title="$t('repo.pipeline.actions.log_download')"
class="!hover:bg-white !hover:bg-opacity-10" class="!hover:bg-white !hover:bg-opacity-10"
@ -21,14 +21,14 @@
@click="download" @click="download"
/> />
<IconButton <IconButton
v-if="step?.end_time !== undefined && hasLogs && hasPushPermission" v-if="step?.finished !== undefined && hasLogs && hasPushPermission"
:title="$t('repo.pipeline.actions.log_delete')" :title="$t('repo.pipeline.actions.log_delete')"
class="!hover:bg-white !hover:bg-opacity-10" class="!hover:bg-white !hover:bg-opacity-10"
icon="trash" icon="trash"
@click="deleteLogs" @click="deleteLogs"
/> />
<IconButton <IconButton
v-if="step?.end_time === undefined" v-if="step?.finished === undefined"
:title=" :title="
autoScroll ? $t('repo.pipeline.actions.log_auto_scroll_off') : $t('repo.pipeline.actions.log_auto_scroll') autoScroll ? $t('repo.pipeline.actions.log_auto_scroll_off') : $t('repo.pipeline.actions.log_auto_scroll')
" "
@ -89,13 +89,13 @@
<div class="m-auto text-xl text-wp-text-alt-100"> <div class="m-auto text-xl text-wp-text-alt-100">
<span v-if="step?.state === 'skipped'">{{ $t('repo.pipeline.actions.canceled') }}</span> <span v-if="step?.state === 'skipped'">{{ $t('repo.pipeline.actions.canceled') }}</span>
<span v-else-if="!step?.start_time">{{ $t('repo.pipeline.step_not_started') }}</span> <span v-else-if="!step?.started">{{ $t('repo.pipeline.step_not_started') }}</span>
<div v-else-if="!loadedLogs">{{ $t('repo.pipeline.loading') }}</div> <div v-else-if="!loadedLogs">{{ $t('repo.pipeline.loading') }}</div>
<div v-else-if="log?.length === 0">{{ $t('repo.pipeline.no_logs') }}</div> <div v-else-if="log?.length === 0">{{ $t('repo.pipeline.no_logs') }}</div>
</div> </div>
<div <div
v-if="step?.end_time !== undefined" v-if="step?.finished !== undefined"
class="flex items-center w-full bg-wp-code-100 text-md text-wp-code-text-alt-100 p-4 font-bold" class="flex items-center w-full bg-wp-code-100 text-md text-wp-code-text-alt-100 p-4 font-bold"
> >
<PipelineStatusIcon :status="step.state" class="!h-4 !w-4" /> <PipelineStatusIcon :status="step.state" class="!h-4 !w-4" />
@ -350,7 +350,7 @@ watch(stepSlug, async () => {
watch(step, async (newStep, oldStep) => { watch(step, async (newStep, oldStep) => {
if (oldStep?.name === newStep?.name) { if (oldStep?.name === newStep?.name) {
if (oldStep?.end_time !== newStep?.end_time && autoScroll.value) { if (oldStep?.finished !== newStep?.finished && autoScroll.value) {
scrollDown(); scrollDown();
} }

View file

@ -19,8 +19,8 @@ const workflow = toRef(props, 'workflow');
const { durationAsNumber } = useDate(); const { durationAsNumber } = useDate();
const durationRaw = computed(() => { const durationRaw = computed(() => {
const start = (step.value ? step.value?.start_time : workflow.value?.start_time) || 0; const start = (step.value ? step.value?.started : workflow.value?.started) || 0;
const end = (step.value ? step.value?.end_time : workflow.value?.end_time) || 0; const end = (step.value ? step.value?.finished : workflow.value?.finished) || 0;
if (end === 0 && start === 0) { if (end === 0 && start === 0) {
return undefined; return undefined;
@ -43,5 +43,5 @@ const duration = computed(() => {
return durationAsNumber(durationElapsed.value || 0); return durationAsNumber(durationElapsed.value || 0);
}); });
const started = computed(() => (step.value ? step.value?.start_time : workflow.value?.start_time) !== undefined); const started = computed(() => (step.value ? step.value?.started : workflow.value?.started) !== undefined);
</script> </script>

View file

@ -82,7 +82,7 @@
<PipelineStatusIcon :status="workflow.state" class="!h-4 !w-4" /> <PipelineStatusIcon :status="workflow.state" class="!h-4 !w-4" />
<span class="truncate">{{ workflow.name }}</span> <span class="truncate">{{ workflow.name }}</span>
<PipelineStepDuration <PipelineStepDuration
v-if="workflow.start_time !== workflow.end_time" v-if="workflow.started !== workflow.finished"
:workflow="workflow" :workflow="workflow"
class="mr-1 pr-2px" class="mr-1 pr-2px"
/> />

View file

@ -14,7 +14,7 @@ export default (pipeline: Ref<Pipeline | undefined>) => {
return undefined; return undefined;
} }
const start = pipeline.value.created_at || 0; const start = pipeline.value.created || 0;
return start * 1000; return start * 1000;
}); });
@ -44,8 +44,8 @@ export default (pipeline: Ref<Pipeline | undefined>) => {
return undefined; return undefined;
} }
const start = pipeline.value.started_at || 0; const start = pipeline.value.started || 0;
const end = pipeline.value.finished_at || pipeline.value.updated_at || 0; const end = pipeline.value.finished || pipeline.value.updated || 0;
if (start === 0 || end === 0) { if (start === 0 || end === 0) {
return 0; return 0;
@ -109,7 +109,7 @@ export default (pipeline: Ref<Pipeline | undefined>) => {
return undefined; return undefined;
} }
const start = pipeline.value.created_at || 0; const start = pipeline.value.created || 0;
return toLocaleString(new Date(start * 1000)); return toLocaleString(new Date(start * 1000));
}); });

View file

@ -25,16 +25,16 @@ export interface Pipeline {
errors?: PipelineError[]; errors?: PipelineError[];
// When the pipeline request was received. // When the pipeline request was received.
created_at: number; created: number;
// When the pipeline was updated last time in database. // When the pipeline was updated last time in database.
updated_at: number; updated: number;
// When the pipeline began execution. // When the pipeline began execution.
started_at: number; started: number;
// When the pipeline was finished. // When the pipeline was finished.
finished_at: number; finished: number;
// Where the deployment should go. // Where the deployment should go.
deploy_to: string; deploy_to: string;
@ -76,13 +76,9 @@ export interface Pipeline {
// This url will point to the repository state associated with the pipeline's commit. // This url will point to the repository state associated with the pipeline's commit.
forge_url: string; forge_url: string;
signed: boolean;
verified: boolean;
reviewed_by: string; reviewed_by: string;
reviewed_at: number; reviewed: number;
// The steps associated with this pipeline. // The steps associated with this pipeline.
// A pipeline will have multiple steps if a matrix pipeline was used or if a rebuild was requested. // A pipeline will have multiple steps if a matrix pipeline was used or if a rebuild was requested.
@ -110,8 +106,8 @@ export interface PipelineWorkflow {
name: string; name: string;
state: PipelineStatus; state: PipelineStatus;
environ?: Record<string, string>; environ?: Record<string, string>;
start_time?: number; started?: number;
end_time?: number; finished?: number;
agent_id?: number; agent_id?: number;
error?: string; error?: string;
children: PipelineStep[]; children: PipelineStep[];
@ -126,8 +122,8 @@ export interface PipelineStep {
name: string; name: string;
state: PipelineStatus; state: PipelineStatus;
exit_code: number; exit_code: number;
start_time?: number; started?: number;
end_time?: number; finished?: number;
error?: string; error?: string;
type?: StepType; type?: StepType;
} }

View file

@ -46,7 +46,7 @@ export function isStepRunning(step: PipelineStep): boolean {
* @returns {number} 0 if created at the same time, < 0 if b was create before a, > 0 otherwise * @returns {number} 0 if created at the same time, < 0 if b was create before a, > 0 otherwise
*/ */
export function comparePipelines(a: Pipeline, b: Pipeline): number { export function comparePipelines(a: Pipeline, b: Pipeline): number {
return (b.created_at || -1) - (a.created_at || -1); return (b.created || -1) - (a.created || -1);
} }
/** /**

View file

@ -75,8 +75,6 @@ type (
Event string `json:"event"` Event string `json:"event"`
Status string `json:"status"` Status string `json:"status"`
Errors []*PipelineError `json:"errors"` Errors []*PipelineError `json:"errors"`
// Deprecated TODO remove in 3.x
Enqueued int64 `json:"enqueued_at"`
Created int64 `json:"created_at"` Created int64 `json:"created_at"`
Updated int64 `json:"updated_at"` Updated int64 `json:"updated_at"`
Started int64 `json:"started_at"` Started int64 `json:"started_at"`
@ -86,7 +84,6 @@ type (
Branch string `json:"branch"` Branch string `json:"branch"`
Ref string `json:"ref"` Ref string `json:"ref"`
Refspec string `json:"refspec"` Refspec string `json:"refspec"`
CloneURL string `json:"clone_url"`
Title string `json:"title"` Title string `json:"title"`
Message string `json:"message"` Message string `json:"message"`
Timestamp int64 `json:"timestamp"` Timestamp int64 `json:"timestamp"`
@ -137,10 +134,6 @@ type (
Address string `json:"address"` Address string `json:"address"`
Username string `json:"username"` Username string `json:"username"`
Password string `json:"password,omitempty"` Password string `json:"password,omitempty"`
// 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. // Secret represents a secret variable, such as a password or token.
@ -161,9 +154,9 @@ type (
Number int64 `json:"number,omitempty"` Number int64 `json:"number,omitempty"`
Event string `json:"event,omitempty"` Event string `json:"event,omitempty"`
Status string `json:"status,omitempty"` Status string `json:"status,omitempty"`
Created int64 `json:"created_at,omitempty"` Created int64 `json:"created,omitempty"`
Started int64 `json:"started_at,omitempty"` Started int64 `json:"started,omitempty"`
Finished int64 `json:"finished_at,omitempty"` Finished int64 `json:"finished,omitempty"`
Commit string `json:"commit,omitempty"` Commit string `json:"commit,omitempty"`
Branch string `json:"branch,omitempty"` Branch string `json:"branch,omitempty"`
Ref string `json:"ref,omitempty"` Ref string `json:"ref,omitempty"`
@ -183,30 +176,20 @@ type (
Commit string `json:"commit,omitempty"` Commit string `json:"commit,omitempty"`
} }
//nolint:godot QueueStats struct {
// TODO: use dedicated struct in 3.x Workers int `json:"worker_count"`
// QueueStats struct { Pending int `json:"pending_count"`
// Workers int `json:"worker_count"` WaitingOnDeps int `json:"waiting_on_deps_count"`
// Pending int `json:"pending_count"` Running int `json:"running_count"`
// WaitingOnDeps int `json:"waiting_on_deps_count"` Complete int `json:"completed_count"`
// Running int `json:"running_count"` }
// Complete int `json:"completed_count"`
// }
// Info provides queue stats. // Info provides queue stats.
Info struct { Info struct {
Pending []Task `json:"pending"` Pending []Task `json:"pending"`
WaitingOnDeps []Task `json:"waiting_on_deps"` WaitingOnDeps []Task `json:"waiting_on_deps"`
Running []Task `json:"running"` Running []Task `json:"running"`
// TODO: use dedicated struct in 3.x Stats QueueStats `json:"stats"`
// Stats QueueStats `json:"stats"`
Stats struct {
Workers int `json:"worker_count"`
Pending int `json:"pending_count"`
WaitingOnDeps int `json:"waiting_on_deps_count"`
Running int `json:"running_count"`
Complete int `json:"completed_count"`
} `json:"stats"`
Paused bool `json:"paused,omitempty"` Paused bool `json:"paused,omitempty"`
} }
@ -233,7 +216,7 @@ type (
CreatorID int64 `json:"creator_id"` CreatorID int64 `json:"creator_id"`
NextExec int64 `json:"next_exec"` NextExec int64 `json:"next_exec"`
Schedule string `json:"schedule"` Schedule string `json:"schedule"`
Created int64 `json:"created_at"` Created int64 `json:"created"`
Branch string `json:"branch"` Branch string `json:"branch"`
} }