From 561a7cf520b534198636d1a2fa1589b5eb3dfdfe Mon Sep 17 00:00:00 2001 From: sillyguodong <33891828+sillyguodong@users.noreply.github.com> Date: Wed, 24 Apr 2024 02:55:25 +0800 Subject: [PATCH] Interpolate runs-on with variables when scheduling tasks (#30640) Follow #29468 1. Interpolate runs-on with variables when scheduling tasks. 2. The `GetVariablesOfRun` function will check if the `Repo` of the run is nil. --------- Co-authored-by: Giteabot (cherry picked from commit 2f6b1c46a1a4a90f56ca0f3ad7840e8e70daeab5) Conflicts: services/actions/schedule_tasks.go trivial conflict because of 'Add vars context to cron jobs (#3059)' --- models/actions/run.go | 22 ++++++++++++++++------ models/actions/variable.go | 5 +++++ services/actions/schedule_tasks.go | 7 ++----- 3 files changed, 23 insertions(+), 11 deletions(-) diff --git a/models/actions/run.go b/models/actions/run.go index 493bd0173c..397455e41d 100644 --- a/models/actions/run.go +++ b/models/actions/run.go @@ -98,13 +98,10 @@ func (run *ActionRun) LoadAttributes(ctx context.Context) error { return nil } - if run.Repo == nil { - repo, err := repo_model.GetRepositoryByID(ctx, run.RepoID) - if err != nil { - return err - } - run.Repo = repo + if err := run.LoadRepo(ctx); err != nil { + return err } + if err := run.Repo.LoadAttributes(ctx); err != nil { return err } @@ -120,6 +117,19 @@ func (run *ActionRun) LoadAttributes(ctx context.Context) error { return nil } +func (run *ActionRun) LoadRepo(ctx context.Context) error { + if run == nil || run.Repo != nil { + return nil + } + + repo, err := repo_model.GetRepositoryByID(ctx, run.RepoID) + if err != nil { + return err + } + run.Repo = repo + return nil +} + func (run *ActionRun) Duration() time.Duration { return calculateDuration(run.Started, run.Stopped, run.Status) + run.PreviousDuration } diff --git a/models/actions/variable.go b/models/actions/variable.go index b0a455e675..8aff844659 100644 --- a/models/actions/variable.go +++ b/models/actions/variable.go @@ -92,6 +92,11 @@ func DeleteVariable(ctx context.Context, id int64) error { func GetVariablesOfRun(ctx context.Context, run *ActionRun) (map[string]string, error) { variables := map[string]string{} + if err := run.LoadRepo(ctx); err != nil { + log.Error("LoadRepo: %v", err) + return nil, err + } + // Global globalVariables, err := db.Find[ActionVariable](ctx, FindVariablesOpts{}) if err != nil { diff --git a/services/actions/schedule_tasks.go b/services/actions/schedule_tasks.go index 33013e9a9d..18f3324fd2 100644 --- a/services/actions/schedule_tasks.go +++ b/services/actions/schedule_tasks.go @@ -132,13 +132,10 @@ func CreateScheduleTask(ctx context.Context, cron *actions_model.ActionSchedule) Status: actions_model.StatusWaiting, } - if err := run.LoadAttributes(ctx); err != nil { - log.Error("LoadAttributes: %v", err) - } - vars, err := actions_model.GetVariablesOfRun(ctx, run) if err != nil { - log.Error("GetVariablesOfSchedule: %v", err) + log.Error("GetVariablesOfRun: %v", err) + return err } // Parse the workflow specification from the cron schedule