@@ -5,6 +5,7 @@ package actions
55
66import (
77 "archive/zip"
8+ "bytes"
89 "compress/gzip"
910 "context"
1011 "errors"
@@ -812,13 +813,8 @@ func Run(ctx *context_module.Context) {
812813 return
813814 }
814815
815- // get workflow entry from default branch commit
816- defaultBranchCommit , err := ctx .Repo .GitRepo .GetBranchCommit (ctx .Repo .Repository .DefaultBranch )
817- if err != nil {
818- ctx .Error (http .StatusInternalServerError , err .Error ())
819- return
820- }
821- entries , err := actions .ListWorkflows (defaultBranchCommit )
816+ // get workflow entry from runTargetCommit
817+ entries , err := actions .ListWorkflows (runTargetCommit )
822818 if err != nil {
823819 ctx .Error (http .StatusInternalServerError , err .Error ())
824820 return
@@ -928,3 +924,73 @@ func Run(ctx *context_module.Context) {
928924 ctx .Flash .Success (ctx .Tr ("actions.workflow.run_success" , workflowID ))
929925 ctx .Redirect (redirectURL )
930926}
927+
928+ func DispatchInputs (ctx * context_module.Context ) {
929+ workflowID := ctx .FormString ("workflow" )
930+ if len (workflowID ) == 0 {
931+ ctx .ServerError ("workflow" , nil )
932+ return
933+ }
934+
935+ ref := ctx .FormString ("ref" )
936+ if len (ref ) == 0 {
937+ ctx .ServerError ("ref" , nil )
938+ return
939+ }
940+
941+ // get target commit of run from specified ref
942+ refName := git .RefName (ref )
943+ var runTargetCommit * git.Commit
944+ var err error
945+ if refName .IsTag () {
946+ runTargetCommit , err = ctx .Repo .GitRepo .GetTagCommit (refName .TagName ())
947+ } else if refName .IsBranch () {
948+ runTargetCommit , err = ctx .Repo .GitRepo .GetBranchCommit (refName .BranchName ())
949+ } else {
950+ ctx .Flash .Error (ctx .Tr ("form.git_ref_name_error" , ref ))
951+ return
952+ }
953+ if err != nil {
954+ ctx .Flash .Error (ctx .Tr ("form.target_ref_not_exist" , ref ))
955+ return
956+ }
957+
958+ // get workflow entry from runTargetCommit
959+ entries , err := actions .ListWorkflows (runTargetCommit )
960+ if err != nil {
961+ ctx .Error (http .StatusInternalServerError , err .Error ())
962+ return
963+ }
964+
965+ var curWorkflow * model.Workflow
966+
967+ // find workflow from commit
968+ for _ , entry := range entries {
969+ if entry .Name () == workflowID {
970+ content , err := actions .GetContentFromEntry (entry )
971+ if err != nil {
972+ ctx .Error (http .StatusInternalServerError , err .Error ())
973+ return
974+ }
975+ curWorkflow , err = model .ReadWorkflow (bytes .NewReader (content ))
976+ if err != nil {
977+ ctx .ServerError ("workflow" , err )
978+ return
979+ }
980+ break
981+ }
982+ }
983+
984+ if curWorkflow == nil {
985+ ctx .Flash .Error (ctx .Tr ("actions.workflow.not_found" , workflowID ))
986+ return
987+ }
988+
989+ workflowDispatchConfig := workflowDispatchConfig (curWorkflow )
990+ if workflowDispatchConfig == nil {
991+ return
992+ }
993+ ctx .Data ["WorkflowDispatchConfig" ] = workflowDispatchConfig
994+
995+ ctx .HTML (http .StatusOK , tplDispatchInputsActions )
996+ }
0 commit comments