Fix ref to trigger Actions (#22679)
If triggered by PR, the ref should be `pull/<index>/head` instead of `repo.DefaultBranch`. And improve UI: <img width="493" alt="image" src="https://user-images.githubusercontent.com/9418365/215731280-312564f2-2450-45d0-b986-1accb0670976.png"> Related to #21937.
This commit is contained in:
		
							parent
							
								
									fd29071e57
								
							
						
					
					
						commit
						707ecec715
					
				|  | @ -6,11 +6,13 @@ package actions | ||||||
| import ( | import ( | ||||||
| 	"context" | 	"context" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"strings" | ||||||
| 	"time" | 	"time" | ||||||
| 
 | 
 | ||||||
| 	"code.gitea.io/gitea/models/db" | 	"code.gitea.io/gitea/models/db" | ||||||
| 	repo_model "code.gitea.io/gitea/models/repo" | 	repo_model "code.gitea.io/gitea/models/repo" | ||||||
| 	user_model "code.gitea.io/gitea/models/user" | 	user_model "code.gitea.io/gitea/models/user" | ||||||
|  | 	"code.gitea.io/gitea/modules/git" | ||||||
| 	"code.gitea.io/gitea/modules/json" | 	"code.gitea.io/gitea/modules/json" | ||||||
| 	api "code.gitea.io/gitea/modules/structs" | 	api "code.gitea.io/gitea/modules/structs" | ||||||
| 	"code.gitea.io/gitea/modules/timeutil" | 	"code.gitea.io/gitea/modules/timeutil" | ||||||
|  | @ -63,6 +65,24 @@ func (run *ActionRun) Link() string { | ||||||
| 	return fmt.Sprintf("%s/actions/runs/%d", run.Repo.Link(), run.Index) | 	return fmt.Sprintf("%s/actions/runs/%d", run.Repo.Link(), run.Index) | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | // RefLink return the url of run's ref
 | ||||||
|  | func (run *ActionRun) RefLink() string { | ||||||
|  | 	refName := git.RefName(run.Ref) | ||||||
|  | 	if refName.RefGroup() == "pull" { | ||||||
|  | 		return run.Repo.Link() + "/pulls/" + refName.ShortName() | ||||||
|  | 	} | ||||||
|  | 	return git.RefURL(run.Repo.Link(), run.Ref) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | // PrettyRef return #id for pull ref or ShortName for others
 | ||||||
|  | func (run *ActionRun) PrettyRef() string { | ||||||
|  | 	refName := git.RefName(run.Ref) | ||||||
|  | 	if refName.RefGroup() == "pull" { | ||||||
|  | 		return "#" + strings.TrimSuffix(strings.TrimPrefix(run.Ref, git.PullPrefix), "/head") | ||||||
|  | 	} | ||||||
|  | 	return refName.ShortName() | ||||||
|  | } | ||||||
|  | 
 | ||||||
| // LoadAttributes load Repo TriggerUser if not loaded
 | // LoadAttributes load Repo TriggerUser if not loaded
 | ||||||
| func (run *ActionRun) LoadAttributes(ctx context.Context) error { | func (run *ActionRun) LoadAttributes(ctx context.Context) error { | ||||||
| 	if run == nil { | 	if run == nil { | ||||||
|  |  | ||||||
|  | @ -67,7 +67,6 @@ type notifyInput struct { | ||||||
| func newNotifyInput(repo *repo_model.Repository, doer *user_model.User, event webhook_module.HookEventType) *notifyInput { | func newNotifyInput(repo *repo_model.Repository, doer *user_model.User, event webhook_module.HookEventType) *notifyInput { | ||||||
| 	return ¬ifyInput{ | 	return ¬ifyInput{ | ||||||
| 		Repo:  repo, | 		Repo:  repo, | ||||||
| 		Ref:   repo.DefaultBranch, |  | ||||||
| 		Doer:  doer, | 		Doer:  doer, | ||||||
| 		Event: event, | 		Event: event, | ||||||
| 	} | 	} | ||||||
|  | @ -90,6 +89,9 @@ func (input *notifyInput) WithPayload(payload api.Payloader) *notifyInput { | ||||||
| 
 | 
 | ||||||
| func (input *notifyInput) WithPullRequest(pr *issues_model.PullRequest) *notifyInput { | func (input *notifyInput) WithPullRequest(pr *issues_model.PullRequest) *notifyInput { | ||||||
| 	input.PullRequest = pr | 	input.PullRequest = pr | ||||||
|  | 	if input.Ref == "" { | ||||||
|  | 		input.Ref = pr.GetGitRefName() | ||||||
|  | 	} | ||||||
| 	return input | 	return input | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | @ -124,8 +126,13 @@ func notify(ctx context.Context, input *notifyInput) error { | ||||||
| 	} | 	} | ||||||
| 	defer gitRepo.Close() | 	defer gitRepo.Close() | ||||||
| 
 | 
 | ||||||
|  | 	ref := input.Ref | ||||||
|  | 	if ref == "" { | ||||||
|  | 		ref = input.Repo.DefaultBranch | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
| 	// Get the commit object for the ref
 | 	// Get the commit object for the ref
 | ||||||
| 	commit, err := gitRepo.GetCommit(input.Ref) | 	commit, err := gitRepo.GetCommit(ref) | ||||||
| 	if err != nil { | 	if err != nil { | ||||||
| 		return fmt.Errorf("gitRepo.GetCommit: %w", err) | 		return fmt.Errorf("gitRepo.GetCommit: %w", err) | ||||||
| 	} | 	} | ||||||
|  | @ -152,7 +159,7 @@ func notify(ctx context.Context, input *notifyInput) error { | ||||||
| 			OwnerID:           input.Repo.OwnerID, | 			OwnerID:           input.Repo.OwnerID, | ||||||
| 			WorkflowID:        id, | 			WorkflowID:        id, | ||||||
| 			TriggerUserID:     input.Doer.ID, | 			TriggerUserID:     input.Doer.ID, | ||||||
| 			Ref:               input.Ref, | 			Ref:               ref, | ||||||
| 			CommitSHA:         commit.ID.String(), | 			CommitSHA:         commit.ID.String(), | ||||||
| 			IsForkPullRequest: input.PullRequest != nil && input.PullRequest.IsFromFork(), | 			IsForkPullRequest: input.PullRequest != nil && input.PullRequest.IsFromFork(), | ||||||
| 			Event:             input.Event, | 			Event:             input.Event, | ||||||
|  |  | ||||||
|  | @ -7,8 +7,15 @@ | ||||||
| 			<div class="issue-item-main f1 fc df"> | 			<div class="issue-item-main f1 fc df"> | ||||||
| 				<div class="issue-item-top-row"> | 				<div class="issue-item-top-row"> | ||||||
| 					<a class="index ml-0 mr-2" href="{{if .HTMLURL}}{{.HTMLURL}}{{else}}{{$.Link}}/{{.Index}}{{end}}"> | 					<a class="index ml-0 mr-2" href="{{if .HTMLURL}}{{.HTMLURL}}{{else}}{{$.Link}}/{{.Index}}{{end}}"> | ||||||
| 						{{.Title}} <span class="ui label">{{RefShortName .Ref}}</span> | 						{{.Title}} | ||||||
| 					</a> | 					</a> | ||||||
|  | 					<span class="ui label"> | ||||||
|  | 						{{if .RefLink}} | ||||||
|  | 							<a href="{{.RefLink}}">{{.PrettyRef}}</a> | ||||||
|  | 						{{else}} | ||||||
|  | 							{{.PrettyRef}} | ||||||
|  | 						{{end}} | ||||||
|  | 					</span> | ||||||
| 				</div> | 				</div> | ||||||
| 				<div class="desc issue-item-bottom-row df ac fw my-1"> | 				<div class="desc issue-item-bottom-row df ac fw my-1"> | ||||||
| 					<b>{{if not $.CurWorkflow}}{{.WorkflowID}} {{end}}#{{.Index}}</b>: {{$.locale.Tr "actions.runs.commit"}} | 					<b>{{if not $.CurWorkflow}}{{.WorkflowID}} {{end}}#{{.Index}}</b>: {{$.locale.Tr "actions.runs.commit"}} | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue