Skip to content

Commit 1df4989

Browse files
committed
move code to act/jobparser, support scheduled actions
1 parent 384f6b1 commit 1df4989

File tree

3 files changed

+33
-43
lines changed

3 files changed

+33
-43
lines changed

models/actions/utils.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,3 +82,19 @@ func calculateDuration(started, stopped timeutil.TimeStamp, status Status) time.
8282
}
8383
return timeSince(s).Truncate(time.Second)
8484
}
85+
86+
func (s *ActionSchedule) ToActionRun() *ActionRun {
87+
return &ActionRun{
88+
Title: s.Title,
89+
RepoID: s.RepoID,
90+
Repo: s.Repo,
91+
OwnerID: s.OwnerID,
92+
WorkflowID: s.WorkflowID,
93+
TriggerUserID: s.TriggerUserID,
94+
TriggerUser: s.TriggerUser,
95+
Ref: s.Ref,
96+
CommitSHA: s.CommitSHA,
97+
Event: s.Event,
98+
EventPayload: s.EventPayload,
99+
}
100+
}

services/actions/notifier_helper.go

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ import (
2828
webhook_module "code.gitea.io/gitea/modules/webhook"
2929
"code.gitea.io/gitea/services/convert"
3030
notify_service "code.gitea.io/gitea/services/notify"
31-
"gopkg.in/yaml.v3"
3231

33-
"github.com/nektos/act/pkg/exprparser"
3432
"github.com/nektos/act/pkg/jobparser"
3533
"github.com/nektos/act/pkg/model"
3634
)
@@ -318,7 +316,9 @@ func handleWorkflows(
318316
Status: actions_model.StatusWaiting,
319317
}
320318

321-
if err := evaluateExpressionsForRun(run, dwf); err != nil {
319+
if runName, err := parseRunName(run, dwf); err == nil {
320+
run.Title = runName
321+
} else {
322322
log.Error("evaluateExpressionsForRun: %v", err)
323323
continue
324324
}
@@ -517,9 +517,11 @@ func handleSchedules(
517517
run := &actions_model.ActionSchedule{
518518
Title: strings.SplitN(commit.CommitMessage, "\n", 2)[0],
519519
RepoID: input.Repo.ID,
520+
Repo: input.Repo,
520521
OwnerID: input.Repo.OwnerID,
521522
WorkflowID: dwf.EntryName,
522523
TriggerUserID: user_model.ActionsUserID,
524+
TriggerUser: user_model.NewActionsUser(),
523525
Ref: ref,
524526
CommitSHA: commit.ID.String(),
525527
Event: input.Event,
@@ -528,8 +530,10 @@ func handleSchedules(
528530
Content: dwf.Content,
529531
}
530532

531-
if runName, err := parseRunNameFromDetectedWorkflow(dwf); err == nil {
533+
if runName, err := parseRunName(run.ToActionRun(), dwf); err == nil {
532534
run.Title = runName
535+
} else {
536+
log.Error("ParseRunName: %v", err)
533537
}
534538

535539
crons = append(crons, run)
@@ -571,55 +575,23 @@ func DetectAndHandleSchedules(ctx context.Context, repo *repo_model.Repository)
571575
return handleSchedules(ctx, scheduleWorkflows, commit, notifyInput, repo.DefaultBranch)
572576
}
573577

574-
func newExpressionEvaluatorForRun(r *actions_model.ActionRun) (*jobparser.ExpressionEvaluator, error) {
578+
func parseRunName(r *actions_model.ActionRun, w *actions_module.DetectedWorkflow) (string, error) {
575579
ghCtx := &model.GithubContext{}
576580
gitCtx := GenerateGiteaContext(r, nil)
577581

578582
gitCtxRaw, err := json.Marshal(gitCtx)
579583
if err != nil {
580584
log.Error("NewInterpolatorForRun: %v", err)
581-
return nil, err
585+
return "", err
582586
}
583587

584588
err = json.Unmarshal(gitCtxRaw, ghCtx)
585589
if err != nil {
586590
log.Error("NewInterpolatorForRun: %v", err)
587-
return nil, err
588-
}
589-
590-
interp := exprparser.NewInterpeter(&exprparser.EvaluationEnvironment{Github: ghCtx}, exprparser.Config{})
591-
ee := jobparser.NewExpressionEvaluator(interp)
592-
return ee, nil
593-
}
594-
595-
func parseRunNameFromDetectedWorkflow(w *actions_module.DetectedWorkflow) (string, error) {
596-
var data map[string]any
597-
var value string
598-
599-
if err := yaml.Unmarshal(w.Content, &data); err != nil {
600-
log.Error("parseRunNameFromDetectedWorkflow: %v", err)
601591
return "", err
602592
}
603593

604-
if v, ok := data["run-name"]; ok {
605-
value = v.(string)
606-
} else {
607-
return "", fmt.Errorf("run-name not found in workflow")
608-
}
609-
610-
return value, nil
611-
}
612-
613-
func evaluateExpressionsForRun(r *actions_model.ActionRun, w *actions_module.DetectedWorkflow) error {
614-
if runName, err := parseRunNameFromDetectedWorkflow(w); err == nil {
615-
ee, err := newExpressionEvaluatorForRun(r)
616-
if err != nil {
617-
log.Error("newExpressionEvaluatorForRun: %v", err)
618-
return err
619-
}
620-
r.Title = ee.Interpolate(runName)
621-
} else {
622-
log.Error("parseRunNameFromDetectedWorkflow: %v", err)
623-
}
624-
return nil
594+
title, _ := jobparser.ParseRunName(w.Content, jobparser.WithGitContext(ghCtx))
595+
log.Info("title: %s", title)
596+
return title, nil
625597
}

services/actions/workflow.go

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -265,8 +265,10 @@ func DispatchActionWorkflow(ctx reqctx.RequestContext, doer *user_model.User, re
265265
Status: actions_model.StatusWaiting,
266266
}
267267

268-
if err := evaluateExpressionsForRun(run, dwf); err != nil {
269-
log.Error("evaluateExpressionsForRun: %v", err)
268+
if runName, err := parseRunName(run, dwf); err == nil {
269+
run.Title = runName
270+
} else {
271+
log.Error("ParseRunName: %v", err)
270272
}
271273

272274
// cancel running jobs of the same workflow

0 commit comments

Comments
 (0)