From 6df53243aa592f2e970b634084f30b4b34e708e1 Mon Sep 17 00:00:00 2001 From: Jason Song Date: Wed, 12 Oct 2022 14:46:06 +0800 Subject: [PATCH] feat: create task steps --- go.mod | 2 +- go.sum | 4 +-- models/bots/task.go | 41 ++++++++++++++++++++++++++++++- models/bots/task_step.go | 5 ++-- routers/api/bots/runner/runner.go | 4 +-- 5 files changed, 48 insertions(+), 8 deletions(-) diff --git a/go.mod b/go.mod index b5b2fa1a67..e55905aaa1 100644 --- a/go.mod +++ b/go.mod @@ -319,4 +319,4 @@ exclude github.com/gofrs/uuid v4.0.0+incompatible exclude github.com/goccy/go-json v0.4.11 -replace github.com/nektos/act => gitea.com/gitea/act v0.0.0-20221008102131-d89ab14fb580 +replace github.com/nektos/act => gitea.com/gitea/act v0.0.0-20221012054755-c2c76e19a725 diff --git a/go.sum b/go.sum index ab76cd6ef2..3467e1ffc6 100644 --- a/go.sum +++ b/go.sum @@ -81,8 +81,8 @@ contrib.go.opencensus.io/resource v0.1.1/go.mod h1:F361eGI91LCmW1I/Saf+rX0+OFcig dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078 h1:cliQ4HHsCo6xi2oWZYKWW4bly/Ory9FuTpFPRxj/mAg= git.sr.ht/~mariusor/go-xsd-duration v0.0.0-20220703122237-02e73435a078/go.mod h1:g/V2Hjas6Z1UHUp4yIx6bATpNzJ7DYtD0FG3+xARWxs= -gitea.com/gitea/act v0.0.0-20221008102131-d89ab14fb580 h1:F/VSl4oP5Gqe0FQ2i6BX/ODIhBc/cxfp5p5yA8pOSb4= -gitea.com/gitea/act v0.0.0-20221008102131-d89ab14fb580/go.mod h1:lpzib6X73FHLSaTqTakan1xcsCAVhlZvPSpLns7jkRo= +gitea.com/gitea/act v0.0.0-20221012054755-c2c76e19a725 h1:H5lZ5fqSXAZ082wBKfqaME070sw5DeNwT8Bwyfa5mcc= +gitea.com/gitea/act v0.0.0-20221012054755-c2c76e19a725/go.mod h1:lpzib6X73FHLSaTqTakan1xcsCAVhlZvPSpLns7jkRo= gitea.com/gitea/proto-go v0.0.0-20221010094818-eedee304e2b9 h1:roFxcMnXJrjZvHBfba5Py6Jin9VTTute0WwzRXhJnQs= gitea.com/gitea/proto-go v0.0.0-20221010094818-eedee304e2b9/go.mod h1:hD8YwSHusjwjEEgubW6XFvnZuNhMZTHz6lwjfltEt/Y= gitea.com/go-chi/binding v0.0.0-20220309004920-114340dabecb h1:Yy0Bxzc8R2wxiwXoG/rECGplJUSpXqCsog9PuJFgiHs= diff --git a/models/bots/task.go b/models/bots/task.go index 073fdcb29f..6a31214330 100644 --- a/models/bots/task.go +++ b/models/bots/task.go @@ -6,11 +6,14 @@ package bots import ( "context" + "fmt" "code.gitea.io/gitea/core" "code.gitea.io/gitea/models/db" "code.gitea.io/gitea/modules/timeutil" runnerv1 "gitea.com/gitea/proto-go/runner/v1" + + "github.com/nektos/act/pkg/jobparser" ) // Task represents a distribution of job @@ -54,7 +57,7 @@ func (task *Task) LoadAttributes(ctx context.Context) error { return task.Job.LoadAttributes(ctx) } -func CreateTask(runner *Runner) (*Task, bool, error) { +func CreateTaskForRunner(runner *Runner) (*Task, bool, error) { ctx, commiter, err := db.TxContext() if err != nil { return nil, false, err @@ -91,10 +94,31 @@ func CreateTask(runner *Runner) (*Task, bool, error) { Started: now, } + var wolkflowJob *jobparser.Job + if gots, err := jobparser.Parse(job.WorkflowPayload); err != nil { + return nil, false, fmt.Errorf("parse workflow of job %d: %w", job.ID, err) + } else if len(gots) != 1 { + return nil, false, fmt.Errorf("workflow of job %d: not signle workflow", job.ID) + } else { + _, wolkflowJob = gots[0].Job() + } + if err := db.Insert(ctx, task); err != nil { return nil, false, err } + steps := make([]*TaskStep, len(wolkflowJob.Steps)) + for i, v := range wolkflowJob.Steps { + steps[i] = &TaskStep{ + Name: v.String(), + TaskID: task.ID, + Number: int64(i), + } + } + if err := db.Insert(ctx, steps); err != nil { + return nil, false, err + } + job.TaskID = task.ID if _, err := db.GetEngine(ctx).ID(job.ID).Update(job); err != nil { return nil, false, err @@ -112,6 +136,21 @@ func CreateTask(runner *Runner) (*Task, bool, error) { return task, true, nil } +func UpdateTask(state *runnerv1.TaskState) error { + //ctx, commiter, err := db.TxContext() + //if err != nil { + // return err + //} + //defer commiter.Close() + // + //task := &Task{ + // ID: state.Id, + // Result: state.Result, + // Stopped: timeutil.TimeStamp(state.StoppedAt.AsTime().Unix()), + //} + return nil +} + func isSubset(set, subset []string) bool { m := make(map[string]struct{}, len(set)) for _, v := range set { diff --git a/models/bots/task_step.go b/models/bots/task_step.go index c54cb6f913..8bd2f9f304 100644 --- a/models/bots/task_step.go +++ b/models/bots/task_step.go @@ -13,8 +13,9 @@ import ( // TaskStep represents a step of Task type TaskStep struct { ID int64 - TaskID int64 - Number int64 + Name string + TaskID int64 `xorm:"index unique(task_number)"` + Number int64 `xorm:"index unique(task_number)"` Result runnerv1.Result LogIndex int64 LogLength int64 diff --git a/routers/api/bots/runner/runner.go b/routers/api/bots/runner/runner.go index 9af96bcd78..96c42106d7 100644 --- a/routers/api/bots/runner/runner.go +++ b/routers/api/bots/runner/runner.go @@ -189,9 +189,9 @@ func (s *Service) UpdateLog( } func (s *Service) pickTask(ctx context.Context, runner *bots_model.Runner) (*runnerv1.Task, bool, error) { - t, ok, err := bots_model.CreateTask(runner) + t, ok, err := bots_model.CreateTaskForRunner(runner) if err != nil { - return nil, false, fmt.Errorf("CreateTask: %w", err) + return nil, false, fmt.Errorf("CreateTaskForRunner: %w", err) } if !ok { return nil, false, nil