aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--models/actions/run.go11
-rw-r--r--services/actions/commit_status.go71
-rw-r--r--templates/repo/commit_status.tmpl3
3 files changed, 62 insertions, 23 deletions
diff --git a/models/actions/run.go b/models/actions/run.go
index d5ab45a519..a711cfee2e 100644
--- a/models/actions/run.go
+++ b/models/actions/run.go
@@ -128,6 +128,17 @@ func (run *ActionRun) GetPushEventPayload() (*api.PushPayload, error) {
return nil, fmt.Errorf("event %s is not a push event", run.Event)
}
+func (run *ActionRun) GetPullRequestEventPayload() (*api.PullRequestPayload, error) {
+ if run.Event == webhook_module.HookEventPullRequest {
+ var payload api.PullRequestPayload
+ if err := json.Unmarshal([]byte(run.EventPayload), &payload); err != nil {
+ return nil, err
+ }
+ return &payload, nil
+ }
+ return nil, fmt.Errorf("event %s is not a pull request event", run.Event)
+}
+
func updateRepoRunsNumbers(ctx context.Context, repo *repo_model.Repository) error {
_, err := db.GetEngine(ctx).ID(repo.ID).
SetExpr("num_action_runs",
diff --git a/services/actions/commit_status.go b/services/actions/commit_status.go
index 4f31349352..84de106eec 100644
--- a/services/actions/commit_status.go
+++ b/services/actions/commit_status.go
@@ -21,35 +21,60 @@ func CreateCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) er
}
run := job.Run
- if run.Event != webhook_module.HookEventPush {
- return nil
- }
+ var (
+ sha string
+ creatorID int64
+ )
- payload, err := run.GetPushEventPayload()
- if err != nil {
- return fmt.Errorf("GetPushEventPayload: %w", err)
- }
+ switch run.Event {
+ case webhook_module.HookEventPush:
+ payload, err := run.GetPushEventPayload()
+ if err != nil {
+ return fmt.Errorf("GetPushEventPayload: %w", err)
+ }
- // Since the payload comes from json data, we should check if it's broken, or it will cause panic
- switch {
- case payload.Repo == nil:
- return fmt.Errorf("repo is missing in event payload")
- case payload.Pusher == nil:
- return fmt.Errorf("pusher is missing in event payload")
- case payload.HeadCommit == nil:
- return fmt.Errorf("head commit is missing in event payload")
- }
+ // Since the payload comes from json data, we should check if it's broken, or it will cause panic
+ switch {
+ case payload.Repo == nil:
+ return fmt.Errorf("repo is missing in event payload")
+ case payload.Pusher == nil:
+ return fmt.Errorf("pusher is missing in event payload")
+ case payload.HeadCommit == nil:
+ return fmt.Errorf("head commit is missing in event payload")
+ }
- creator, err := user_model.GetUserByID(ctx, payload.Pusher.ID)
- if err != nil {
- return fmt.Errorf("GetUserByID: %w", err)
+ sha = payload.HeadCommit.ID
+ creatorID = payload.Pusher.ID
+ case webhook_module.HookEventPullRequest:
+ payload, err := run.GetPullRequestEventPayload()
+ if err != nil {
+ return fmt.Errorf("GetPullRequestEventPayload: %w", err)
+ }
+
+ switch {
+ case payload.PullRequest == nil:
+ return fmt.Errorf("pull request is missing in event payload")
+ case payload.PullRequest.Head == nil:
+ return fmt.Errorf("head of pull request is missing in event payload")
+ case payload.PullRequest.Head.Repository == nil:
+ return fmt.Errorf("head repository of pull request is missing in event payload")
+ case payload.PullRequest.Head.Repository.Owner == nil:
+ return fmt.Errorf("owner of head repository of pull request is missing in evnt payload")
+ }
+
+ sha = payload.PullRequest.Head.Sha
+ creatorID = payload.PullRequest.Head.Repository.Owner.ID
+ default:
+ return nil
}
repo := run.Repo
- sha := payload.HeadCommit.ID
ctxname := job.Name
state := toCommitStatus(job.Status)
-
+ creator, err := user_model.GetUserByID(ctx, creatorID)
+ if err != nil {
+ return fmt.Errorf("GetUserByID: %w", err)
+ }
if statuses, _, err := git_model.GetLatestCommitStatus(ctx, repo.ID, sha, db.ListOptions{}); err == nil {
for _, v := range statuses {
if v.Context == ctxname {
@@ -65,14 +90,14 @@ func CreateCommitStatus(ctx context.Context, job *actions_model.ActionRunJob) er
if err := git_model.NewCommitStatus(ctx, git_model.NewCommitStatusOptions{
Repo: repo,
- SHA: payload.HeadCommit.ID,
+ SHA: sha,
Creator: creator,
CommitStatus: &git_model.CommitStatus{
SHA: sha,
TargetURL: run.Link(),
Description: "",
Context: ctxname,
- CreatorID: payload.Pusher.ID,
+ CreatorID: creatorID,
State: state,
},
}); err != nil {
diff --git a/templates/repo/commit_status.tmpl b/templates/repo/commit_status.tmpl
index fbf064527d..470869b381 100644
--- a/templates/repo/commit_status.tmpl
+++ b/templates/repo/commit_status.tmpl
@@ -1,6 +1,9 @@
{{if eq .State "pending"}}
{{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}}
{{end}}
+{{if eq .State "running"}}
+ {{svg "octicon-dot-fill" 18 "commit-status icon text yellow"}}
+{{end}}
{{if eq .State "success"}}
{{svg "octicon-check" 18 "commit-status icon text green"}}
{{end}}