mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-04 08:34:30 +01:00 
			
		
		
		
	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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user