mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-10-26 17:14:23 +01:00 
			
		
		
		
	Add "View workflow file" to Actions list page (#34538)
This PR adds "View workflow file" to Actions list page, and replaces the redundant link. Related #34530 --------- Co-authored-by: wxiaoguang <wxiaoguang@gmail.com>
This commit is contained in:
		
							parent
							
								
									b0936f4f41
								
							
						
					
					
						commit
						4cb0c641ce
					
				| @ -43,21 +43,23 @@ func IsWorkflow(path string) bool { | ||||
| 	return strings.HasPrefix(path, ".gitea/workflows") || strings.HasPrefix(path, ".github/workflows") | ||||
| } | ||||
| 
 | ||||
| func ListWorkflows(commit *git.Commit) (git.Entries, error) { | ||||
| 	tree, err := commit.SubTree(".gitea/workflows") | ||||
| func ListWorkflows(commit *git.Commit) (string, git.Entries, error) { | ||||
| 	rpath := ".gitea/workflows" | ||||
| 	tree, err := commit.SubTree(rpath) | ||||
| 	if _, ok := err.(git.ErrNotExist); ok { | ||||
| 		tree, err = commit.SubTree(".github/workflows") | ||||
| 		rpath = ".github/workflows" | ||||
| 		tree, err = commit.SubTree(rpath) | ||||
| 	} | ||||
| 	if _, ok := err.(git.ErrNotExist); ok { | ||||
| 		return nil, nil | ||||
| 		return "", nil, nil | ||||
| 	} | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return "", nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	entries, err := tree.ListEntriesRecursiveFast() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 		return "", nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	ret := make(git.Entries, 0, len(entries)) | ||||
| @ -66,7 +68,7 @@ func ListWorkflows(commit *git.Commit) (git.Entries, error) { | ||||
| 			ret = append(ret, entry) | ||||
| 		} | ||||
| 	} | ||||
| 	return ret, nil | ||||
| 	return rpath, ret, nil | ||||
| } | ||||
| 
 | ||||
| func GetContentFromEntry(entry *git.TreeEntry) ([]byte, error) { | ||||
| @ -102,7 +104,7 @@ func DetectWorkflows( | ||||
| 	payload api.Payloader, | ||||
| 	detectSchedule bool, | ||||
| ) ([]*DetectedWorkflow, []*DetectedWorkflow, error) { | ||||
| 	entries, err := ListWorkflows(commit) | ||||
| 	_, entries, err := ListWorkflows(commit) | ||||
| 	if err != nil { | ||||
| 		return nil, nil, err | ||||
| 	} | ||||
| @ -147,7 +149,7 @@ func DetectWorkflows( | ||||
| } | ||||
| 
 | ||||
| func DetectScheduledWorkflows(gitRepo *git.Repository, commit *git.Commit) ([]*DetectedWorkflow, error) { | ||||
| 	entries, err := ListWorkflows(commit) | ||||
| 	_, entries, err := ListWorkflows(commit) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
|  | ||||
| @ -3815,6 +3815,7 @@ runs.expire_log_message = Logs have been purged because they were too old. | ||||
| runs.delete = Delete workflow run | ||||
| runs.delete.description = Are you sure you want to permanently delete this workflow run? This action cannot be undone. | ||||
| runs.not_done = This workflow run is not done. | ||||
| runs.view_workflow_file = View workflow file | ||||
| 
 | ||||
| workflow.disable = Disable Workflow | ||||
| workflow.disable_success = Workflow '%s' disabled successfully. | ||||
|  | ||||
| @ -126,7 +126,7 @@ func prepareWorkflowDispatchTemplate(ctx *context.Context, commit *git.Commit) ( | ||||
| 
 | ||||
| 	var curWorkflow *model.Workflow | ||||
| 
 | ||||
| 	entries, err := actions.ListWorkflows(commit) | ||||
| 	_, entries, err := actions.ListWorkflows(commit) | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("ListWorkflows", err) | ||||
| 		return nil | ||||
|  | ||||
| @ -64,6 +64,36 @@ func View(ctx *context_module.Context) { | ||||
| 	ctx.HTML(http.StatusOK, tplViewActions) | ||||
| } | ||||
| 
 | ||||
| func ViewWorkflowFile(ctx *context_module.Context) { | ||||
| 	runIndex := getRunIndex(ctx) | ||||
| 	run, err := actions_model.GetRunByIndex(ctx, ctx.Repo.Repository.ID, runIndex) | ||||
| 	if err != nil { | ||||
| 		ctx.NotFoundOrServerError("GetRunByIndex", func(err error) bool { | ||||
| 			return errors.Is(err, util.ErrNotExist) | ||||
| 		}, err) | ||||
| 		return | ||||
| 	} | ||||
| 	commit, err := ctx.Repo.GitRepo.GetCommit(run.CommitSHA) | ||||
| 	if err != nil { | ||||
| 		ctx.NotFoundOrServerError("GetCommit", func(err error) bool { | ||||
| 			return errors.Is(err, util.ErrNotExist) | ||||
| 		}, err) | ||||
| 		return | ||||
| 	} | ||||
| 	rpath, entries, err := actions.ListWorkflows(commit) | ||||
| 	if err != nil { | ||||
| 		ctx.ServerError("ListWorkflows", err) | ||||
| 		return | ||||
| 	} | ||||
| 	for _, entry := range entries { | ||||
| 		if entry.Name() == run.WorkflowID { | ||||
| 			ctx.Redirect(fmt.Sprintf("%s/src/commit/%s/%s/%s", ctx.Repo.RepoLink, url.PathEscape(run.CommitSHA), util.PathEscapeSegments(rpath), util.PathEscapeSegments(run.WorkflowID))) | ||||
| 			return | ||||
| 		} | ||||
| 	} | ||||
| 	ctx.NotFound(nil) | ||||
| } | ||||
| 
 | ||||
| type LogCursor struct { | ||||
| 	Step     int   `json:"step"` | ||||
| 	Cursor   int64 `json:"cursor"` | ||||
|  | ||||
| @ -1445,6 +1445,7 @@ func registerWebRoutes(m *web.Router) { | ||||
| 				m.Post("/rerun", reqRepoActionsWriter, actions.Rerun) | ||||
| 				m.Get("/logs", actions.Logs) | ||||
| 			}) | ||||
| 			m.Get("/workflow", actions.ViewWorkflowFile) | ||||
| 			m.Post("/cancel", reqRepoActionsWriter, actions.Cancel) | ||||
| 			m.Post("/approve", reqRepoActionsWriter, actions.Approve) | ||||
| 			m.Post("/delete", reqRepoActionsWriter, actions.Delete) | ||||
|  | ||||
| @ -31,16 +31,6 @@ import ( | ||||
| 	"github.com/nektos/act/pkg/model" | ||||
| ) | ||||
| 
 | ||||
| func getActionWorkflowPath(commit *git.Commit) string { | ||||
| 	paths := []string{".gitea/workflows", ".github/workflows"} | ||||
| 	for _, treePath := range paths { | ||||
| 		if _, err := commit.SubTree(treePath); err == nil { | ||||
| 			return treePath | ||||
| 		} | ||||
| 	} | ||||
| 	return "" | ||||
| } | ||||
| 
 | ||||
| func getActionWorkflowEntry(ctx *context.APIContext, commit *git.Commit, folder string, entry *git.TreeEntry) *api.ActionWorkflow { | ||||
| 	cfgUnit := ctx.Repo.Repository.MustGetUnit(ctx, unit.TypeActions) | ||||
| 	cfg := cfgUnit.ActionsConfig() | ||||
| @ -109,14 +99,12 @@ func ListActionWorkflows(ctx *context.APIContext) ([]*api.ActionWorkflow, error) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	entries, err := actions.ListWorkflows(defaultBranchCommit) | ||||
| 	folder, entries, err := actions.ListWorkflows(defaultBranchCommit) | ||||
| 	if err != nil { | ||||
| 		ctx.APIError(http.StatusNotFound, err.Error()) | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	folder := getActionWorkflowPath(defaultBranchCommit) | ||||
| 
 | ||||
| 	workflows := make([]*api.ActionWorkflow, len(entries)) | ||||
| 	for i, entry := range entries { | ||||
| 		workflows[i] = getActionWorkflowEntry(ctx, defaultBranchCommit, folder, entry) | ||||
| @ -185,7 +173,7 @@ func DispatchActionWorkflow(ctx reqctx.RequestContext, doer *user_model.User, re | ||||
| 	} | ||||
| 
 | ||||
| 	// get workflow entry from runTargetCommit | ||||
| 	entries, err := actions.ListWorkflows(runTargetCommit) | ||||
| 	_, entries, err := actions.ListWorkflows(runTargetCommit) | ||||
| 	if err != nil { | ||||
| 		return err | ||||
| 	} | ||||
|  | ||||
| @ -39,10 +39,7 @@ | ||||
| 				<div class="ui dropdown jump tw-p-2"> | ||||
| 					{{svg "octicon-kebab-horizontal"}} | ||||
| 					<div class="menu flex-items-menu"> | ||||
| 						<!-- TODO: This redundant link should be replaced by something else in future, | ||||
| 						because have not figured out how to add "View Workflow" or anything similar to GitHub. | ||||
| 						Related: https://github.com/go-gitea/gitea/pull/34530 --> | ||||
| 						<a class="item" href="{{$run.Link}}">{{svg "octicon-play"}}{{ctx.Locale.Tr "view"}}</a> | ||||
| 						<a class="item" href="{{$run.Link}}/workflow">{{svg "octicon-play"}}{{ctx.Locale.Tr "actions.runs.view_workflow_file"}}</a> | ||||
| 						{{if and $.AllowDeleteWorkflowRuns $run.Status.IsDone}} | ||||
| 							<a class="item link-action" | ||||
| 								data-url="{{$run.Link}}/delete" | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user