diff --git a/modules/structs/repo_actions.go b/modules/structs/repo_actions.go index a39cb3d19e..b60ec8ad17 100644 --- a/modules/structs/repo_actions.go +++ b/modules/structs/repo_actions.go @@ -7,17 +7,28 @@ import ( "time" ) -// Tag represents a repository tag +// ActionTask represents a ActionTask type ActionTask struct { - ID int64 `json:"id"` - JobName string `json:"job_name"` - WorkflowID string `json:"workflow_id"` - Title string `json:"title"` - Status string `json:"status"` - Commit string `json:"commit"` - Duration string `json:"duration"` + Id int64 `json:"id"` + Name string `json:"name"` + HeadBranch string `json:"head_branch"` + HeadSha string `json:"head_sha"` + RunNumber int64 `json:"run_number"` + Event string `json:"event"` + DisplayTitle string `json:"display_title"` + Status string `json:"status"` + WorkflowID string `json:"workflow_id"` + Url string `json:"url"` // swagger:strfmt date-time - Started time.Time `json:"started,omitempty"` + CreatedAt time.Time `json:"created_at,omitempty"` // swagger:strfmt date-time - Stopped time.Time `json:"stopped,omitempty"` + UpdatedAt time.Time `json:"updated_at,omitempty"` + // swagger:strfmt date-time + RunStartedAt time.Time `json:"run_started_at,omitempty"` +} + +// ActionTaskResponse returns a ActionTask +type ActionTaskResponse struct { + Entries []*ActionTask `json:"workflow_runs"` + TotalCount int64 `json:"total_count"` } diff --git a/routers/api/v1/repo/actions.go b/routers/api/v1/repo/actions.go index fbf863ac5e..878a62af31 100644 --- a/routers/api/v1/repo/actions.go +++ b/routers/api/v1/repo/actions.go @@ -56,14 +56,27 @@ func ListActionTasks(ctx *context.APIContext) { } tasks, err := actions_model.FindTasks(ctx, opts) if err != nil { - ctx.Error(http.StatusInternalServerError, "GetTags", err) + ctx.Error(http.StatusInternalServerError, "ListActionTasks", err) return } - apiActionTasks := make([]*api.ActionTask, len(tasks)) + res := new(api.ActionTaskResponse) + + res.Entries = make([]*api.ActionTask, len(tasks)) for i := range tasks { - apiActionTasks[i] = convert.ToActionTask(ctx, ctx.Repo.Repository, tasks[i]) + res.Entries[i] = convert.ToActionTask(ctx, ctx.Repo.Repository, tasks[i]) } - ctx.JSON(http.StatusOK, &apiActionTasks) + opts = actions_model.FindTaskOptions{ + RepoID: ctx.Repo.Repository.ID, + Status: actions_model.StatusUnknown, // Unknown means all + IDOrderDesc: true, + } + res.TotalCount, err = actions_model.CountTasks(ctx, opts) + if err != nil { + ctx.Error(http.StatusInternalServerError, "ListActionTasks", err) + return + } + + ctx.JSON(http.StatusOK, &res) } diff --git a/services/convert/convert.go b/services/convert/convert.go index 85b017aa29..13a6041e07 100644 --- a/services/convert/convert.go +++ b/services/convert/convert.go @@ -185,16 +185,21 @@ func ToActionTask(ctx context.Context, repo *repo_model.Repository, t *actions_m if err := t.LoadAttributes(ctx); err != nil { log.Warn("LoadAttributes of ActionTask: %v", err) } + return &api.ActionTask{ - ID: t.Job.Run.Index, - JobName: t.Job.Name, - WorkflowID: t.Job.Run.WorkflowID, - Title: t.Job.Run.Title, - Status: t.Status.String(), - Commit: t.CommitSHA, - Duration: t.Duration().String(), - Started: t.Started.AsLocalTime(), - Stopped: t.Stopped.AsLocalTime(), + Id: t.ID, + Name: t.Job.Name, + HeadBranch: t.Job.Run.PrettyRef(), + HeadSha: t.Job.CommitSHA, + RunNumber: t.Job.Run.Index, + Event: t.Job.Run.TriggerEvent, + DisplayTitle: t.Job.Run.Title, + Status: t.Status.String(), + WorkflowID: t.Job.Run.WorkflowID, + Url: t.GetRunLink(), + CreatedAt: t.Created.AsLocalTime(), + UpdatedAt: t.Updated.AsLocalTime(), + RunStartedAt: t.Started.AsLocalTime(), } }