@@ -5,6 +5,7 @@ package actions
5
5
6
6
import (
7
7
"archive/zip"
8
+ "bytes"
8
9
"compress/gzip"
9
10
"context"
10
11
"errors"
@@ -812,13 +813,8 @@ func Run(ctx *context_module.Context) {
812
813
return
813
814
}
814
815
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 )
822
818
if err != nil {
823
819
ctx .Error (http .StatusInternalServerError , err .Error ())
824
820
return
@@ -928,3 +924,73 @@ func Run(ctx *context_module.Context) {
928
924
ctx .Flash .Success (ctx .Tr ("actions.workflow.run_success" , workflowID ))
929
925
ctx .Redirect (redirectURL )
930
926
}
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