aboutsummaryrefslogtreecommitdiffstats
path: root/templates/repo
diff options
context:
space:
mode:
author胖梁 <418094911@qq.com>2024-08-19 10:38:40 +0800
committerGitHub <noreply@github.com>2024-08-18 22:38:40 -0400
commit36232b69db312e16a43d1134ff98ab5d65bf80da (patch)
treedb8dbc6be86b17e282bd83eb21832c649d1e42dd /templates/repo
parent561b5c504f0651a4efa78a25a7a9119a77851939 (diff)
downloadgitea-36232b69db312e16a43d1134ff98ab5d65bf80da.tar.gz
gitea-36232b69db312e16a43d1134ff98ab5d65bf80da.zip
Actions support workflow dispatch event (#28163)
fix #23668 My plan: * In the `actions.list` method, if workflow is selected and IsAdmin, check whether the on event contains `workflow_dispatch`. If so, display a `Run workflow` button to allow the user to manually trigger the run. * Providing a form that allows users to select target brach or tag, and these parameters can be configured in yaml * Simple form validation, `required` input cannot be empty * Add a route `/actions/run`, and an `actions.Run` method to handle * Add `WorkflowDispatchPayload` struct to pass the Webhook event payload to the runner when triggered, this payload carries the `inputs` values and other fields, doc: [workflow_dispatch payload](https://docs.github.com/en/webhooks/webhook-events-and-payloads#workflow_dispatch) Other PRs * the `Workflow.WorkflowDispatchConfig()` method still return non-nil when workflow_dispatch is not defined. I submitted a PR https://gitea.com/gitea/act/pulls/85 to fix it. Still waiting for them to process. Behavior should be same with github, but may cause confusion. Here's a quick reminder. * [Doc](https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#workflow_dispatch) Said: This event will `only` trigger a workflow run if the workflow file is `on the default branch`. * If the workflow yaml file only exists in a non-default branch, it cannot be triggered. (It will not even show up in the workflow list) * If the same workflow yaml file exists in each branch at the same time, the version of the default branch is used. Even if `Use workflow from` selects another branch ![image](https://github.com/go-gitea/gitea/assets/3114995/4bf596f3-426b-48e8-9b8f-0f6d18defd79) ```yaml name: Docker Image CI on: workflow_dispatch: inputs: logLevel: description: 'Log level' required: true default: 'warning' type: choice options: - info - warning - debug tags: description: 'Test scenario tags' required: false type: boolean boolean_default_true: description: 'Test scenario tags' required: true type: boolean default: true boolean_default_false: description: 'Test scenario tags' required: false type: boolean default: false environment: description: 'Environment to run tests against' type: environment required: true default: 'environment values' number_required_1: description: 'number ' type: number required: true default: '100' number_required_2: description: 'number' type: number required: true default: '100' number_required_3: description: 'number' type: number required: true default: '100' number_1: description: 'number' type: number required: false number_2: description: 'number' type: number required: false number_3: description: 'number' type: number required: false env: inputs_logLevel: ${{ inputs.logLevel }} inputs_tags: ${{ inputs.tags }} inputs_boolean_default_true: ${{ inputs.boolean_default_true }} inputs_boolean_default_false: ${{ inputs.boolean_default_false }} inputs_environment: ${{ inputs.environment }} inputs_number_1: ${{ inputs.number_1 }} inputs_number_2: ${{ inputs.number_2 }} inputs_number_3: ${{ inputs.number_3 }} inputs_number_required_1: ${{ inputs.number_required_1 }} inputs_number_required_2: ${{ inputs.number_required_2 }} inputs_number_required_3: ${{ inputs.number_required_3 }} jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - run: ls -la - run: env | grep inputs - run: echo ${{ inputs.logLevel }} - run: echo ${{ inputs.boolean_default_false }} ``` ![image](https://github.com/go-gitea/gitea/assets/3114995/a58a842d-a0ff-4618-bc6d-83a9596d07c8) ![image](https://github.com/go-gitea/gitea/assets/3114995/44a7cca5-7bd4-42a9-8723-91751a501c88) --------- Co-authored-by: TKaxv_7S <954067342@qq.com> Co-authored-by: silverwind <me@silverwind.io> Co-authored-by: Denys Konovalov <kontakt@denyskon.de> Co-authored-by: Lunny Xiao <xiaolunwen@gmail.com>
Diffstat (limited to 'templates/repo')
-rw-r--r--templates/repo/actions/list.tmpl5
-rw-r--r--templates/repo/actions/workflow_dispatch.tmpl78
2 files changed, 83 insertions, 0 deletions
diff --git a/templates/repo/actions/list.tmpl b/templates/repo/actions/list.tmpl
index b66d0e360a..7d782c0ade 100644
--- a/templates/repo/actions/list.tmpl
+++ b/templates/repo/actions/list.tmpl
@@ -76,6 +76,11 @@
</button>
{{end}}
</div>
+
+ {{if .WorkflowDispatchConfig}}
+ {{template "repo/actions/workflow_dispatch" .}}
+ {{end}}
+
{{template "repo/actions/runs_list" .}}
</div>
</div>
diff --git a/templates/repo/actions/workflow_dispatch.tmpl b/templates/repo/actions/workflow_dispatch.tmpl
new file mode 100644
index 0000000000..21f3ef2077
--- /dev/null
+++ b/templates/repo/actions/workflow_dispatch.tmpl
@@ -0,0 +1,78 @@
+<div class="ui blue info message tw-flex tw-justify-between tw-items-center">
+ <span class="ui text middle">{{ctx.Locale.Tr "actions.workflow.has_workflow_dispatch"}}</span>
+ <button class="ui mini button show-modal" data-modal="#runWorkflowDispatchModal">{{ctx.Locale.Tr "actions.workflow.run"}}{{svg "octicon-triangle-down" 14 "dropdown icon"}}</button>
+</div>
+<div id="runWorkflowDispatchModal" class="ui tiny modal">
+ <div class="content">
+ <form id="runWorkflowDispatchForm" class="ui form" action="{{$.Link}}/run?workflow={{$.CurWorkflow}}&actor={{$.CurActor}}&status={{.Status}}" method="post">
+ {{.CsrfTokenHtml}}
+ <div class="ui inline field required tw-flex tw-items-center">
+ <span class="ui inline required field">
+ <label>{{ctx.Locale.Tr "actions.workflow.from_ref"}}:</label>
+ </span>
+ <div class="ui inline field dropdown button select-branch branch-selector-dropdown ellipsis-items-nowrap">
+ <input type="hidden" name="ref" value="refs/heads/{{index .Branches 0}}">
+ {{svg "octicon-git-branch" 14}}
+ <div class="default text">{{index .Branches 0}}</div>
+ {{svg "octicon-triangle-down" 14 "dropdown icon"}}
+ <div class="menu transition">
+ <div class="ui icon search input">
+ <i class="icon">{{svg "octicon-filter" 16}}</i>
+ <input name="search" type="text" placeholder="{{ctx.Locale.Tr "repo.filter_branch_and_tag"}}...">
+ </div>
+ <div class="branch-tag-tab">
+ <a class="branch-tag-item reference column muted active" href="#" data-target="#branch-list">
+ {{svg "octicon-git-branch" 16 "tw-mr-1"}} {{ctx.Locale.Tr "repo.branches"}}
+ </a>
+ <a class="branch-tag-item reference column muted" href="#" data-target="#tag-list">
+ {{svg "octicon-tag" 16 "tw-mr-1"}} {{ctx.Locale.Tr "repo.tags"}}
+ </a>
+ </div>
+ <div class="branch-tag-divider"></div>
+ <div id="branch-list" class="scrolling menu reference-list-menu">
+ {{range .Branches}}
+ <div class="item" data-value="refs/heads/{{.}}" title="{{.}}">{{.}}</div>
+ {{else}}
+ <div class="item">{{ctx.Locale.Tr "no_results_found"}}</div>
+ {{end}}
+ </div>
+ <div id="tag-list" class="scrolling menu reference-list-menu tw-hidden">
+ {{range .Tags}}
+ <div class="item" data-value="refs/tags/{{.}}" title="{{.}}">{{.}}</div>
+ {{else}}
+ <div class="item">{{ctx.Locale.Tr "no_results_found"}}</div>
+ {{end}}
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <div class="divider"></div>
+
+ {{range $item := .WorkflowDispatchConfig.Inputs}}
+ <div class="ui field {{if .Required}}required{{end}}">
+ {{if eq .Type "choice"}}
+ <label>{{.Description}}:</label>
+ <select class="ui selection type dropdown" name="{{.Name}}">
+ {{range .Options}}
+ <option value="{{.}}" {{if eq $item.Default .}}selected{{end}} >{{.}}</option>
+ {{end}}
+ </select>
+ {{else if eq .Type "boolean"}}
+ <div class="ui inline checkbox">
+ <label>{{.Description}}</label>
+ <input type="checkbox" name="{{.Name}}" {{if eq .Default "true"}}checked{{end}}>
+ </div>
+ {{else if eq .Type "number"}}
+ <label>{{.Description}}:</label>
+ <input name="{{.Name}}" value="{{.Default}}" {{if .Required}}required{{end}}>
+ {{else}}
+ <label>{{.Description}}:</label>
+ <input name="{{.Name}}" value="{{.Default}}" {{if .Required}}required{{end}}>
+ {{end}}
+ </div>
+ {{end}}
+ <button class="ui tiny primary button" type="submit">Submit</button>
+ </form>
+ </div>
+</div>