This has been forked from aurelien-baudet/workflow-dispatch for the bump to Node 16 and $GITHUB_OUTPUT, as well as potential future fixes/features.
This action triggers another GitHub Actions workflow, using the workflow_dispatch
event.
The workflow must be configured for this event type e.g. on: [workflow_dispatch]
This allows you to chain workflows, the classic use case is have a CI build workflow, trigger a CD release/deploy workflow when it completes. Allowing you to maintain separate workflows for CI and CD, and pass data between them as required.
For details of the workflow_dispatch
even see this blog post introducing this type of trigger
Note 1. The GitHub UI will report flows triggered by this action as "manually triggered" even though they have been run programmatically via another workflow and the API
Note 2. If you want to reference the target workflow by ID, you will need to list them with the following REST API call curl https://api.github.com/repos/{{owner}}/{{repo}}/actions/workflows -H "Authorization: token {{pat-token}}"
Required. The name or the filename or ID of the workflow to trigger and run.
Required. A GitHub access token (PAT) with write access to the repo in question.
NOTE. The automatically provided token e.g.
${{ secrets.GITHUB_TOKEN }}
can not be used, GitHub prevents this token from being able to fire theworkflow_dispatch
andrepository_dispatch
event. The reasons are explained in the docs.
The solution is to manually create a PAT and store it as a secret e.g.${{ secrets.PERSONAL_TOKEN }}
Optional. The inputs to pass to the workflow (if any are configured), this must be a JSON encoded string, e.g.
{ "myInput": "foobar" }
.All values must be strings (even if they are used as booleans or numbers in the triggered workflow). The triggered workflow should use
fromJson
function to get the right type
Optional. The Git reference used with the triggered workflow run. The reference can be a branch, tag, or a commit SHA. If omitted the context ref of the triggering workflow is used. If you want to trigger on pull requests and run the target workflow in the context of the pull request branch, set the ref to
${{ github.event.pull_request.head.ref }}
Optional. The default behavior is to trigger workflows in the same repo as the triggering workflow, if you wish to trigger in another GitHub repo "externally", then provide the owner + repo name with slash between them e.g.
microsoft/vscode
Optional. The default behavior is to get the remote run ID based on the latest workflow name and date, if you have multiple of the same workflow running at the same time it can point to an incorrect run id. You can specify the run name to fetch the run ID based on the actual run name.
Optional. If
true
, this action will actively poll the workflow run to get the result of the triggered workflow. It is enabled by default. If the triggered workflow fails due to eitherfailure
,timed_out
orcancelled
then the step that has triggered the other workflow will be marked as failed too.
Optional. The time to wait to mark triggered workflow has timed out. The time must be suffixed by the time unit e.g.
10m
. Time unit can bes
for seconds,m
for minutes andh
for hours. It has no effect ifwait-for-completion
isfalse
. Default is1h
Optional. The time to wait between two polls for getting run status. The time must be suffixed by the time unit e.g.
10m
. Time unit can bes
for seconds,m
for minutes andh
for hours. It has no effect ifwait-for-completion
isfalse
. Default is1m
./!\ Do not use a value that is too small to avoid
API Rate limit exceeded
Optional. If
true
, it displays in logs the URL of the triggered workflow. It is useful to follow the progress of the triggered workflow. It is enabled by default.
Optional. The time to wait for getting the workflow run URL. If the timeout is reached, it doesn't fail and continues. Displaying the workflow URL is just for information purpose. The time must be suffixed by the time unit e.g.
10m
. Time unit can bes
for seconds,m
for minutes andh
for hours. It has no effect ifdisplay-workflow-run-url
isfalse
. Default is10m
Optional. The time to wait between two polls for getting workflow run URL. The time must be suffixed by the time unit e.g.
10m
. Time unit can bes
for seconds,m
for minutes andh
for hours. It has no effect ifdisplay-workflow-run-url
isfalse
. Default is1m
./!\ Do not use a value that is too small to avoid
API Rate limit exceeded
Optional. Indicate what to do with logs of the triggered workflow:
ignore
: Do not retrieve log of triggered workflow at all (default).Only available when
wait-for-completion
istrue
.Default is
ignore
.
The URL of the workflow run that has been triggered. It may be undefined if the URL couldn't be retrieved (timeout reached) or if
wait-for-completion
anddisplay-workflow-run-url
are > bothfalse
The result of the triggered workflow. May be one of
success
,failure
,cancelled
,timed_out
,skipped
,neutral
,action_required
. The step in your workflow will fail if the triggered workflow completes withfailure
,cancelled
ortimed_out
. Other workflow conlusion are considered success. Only available ifwait-for-completion
istrue
- name: Invoke workflow without inputs. Wait for result
uses: RentTheRunway/workflow-dispatch@v3
with:
workflow: My Workflow
token: ${{ secrets.PERSONAL_TOKEN }}
- name: Invoke workflow without inputs. Don't wait for result
uses: RentTheRunway/workflow-dispatch@v3
with:
workflow: My Workflow
token: ${{ secrets.PERSONAL_TOKEN }}
wait-for-completion: false
- name: Invoke workflow with inputs
uses: RentTheRunway/workflow-dispatch@v3
with:
workflow: Another Workflow
token: ${{ secrets.PERSONAL_TOKEN }}
inputs: '{ "message": "blah blah", "debug": true }'
- name: Invoke workflow in another repo with inputs
uses: RentTheRunway/workflow-dispatch@v3
with:
workflow: Some Workflow
repo: benc-uk/example
token: ${{ secrets.PERSONAL_TOKEN }}
inputs: '{ "message": "blah blah", "debug": true }'
- name: Invoke workflow and handle result
id: trigger-step
uses: RentTheRunway/workflow-dispatch@v3
with:
workflow: Another Workflow
token: ${{ secrets.PERSONAL_TOKEN }}
- name: Another step that can handle the result
if: always()
run: echo "Another Workflow conclusion: ${{ steps.trigger-step.outputs.workflow-conclusion }}"
Thanks to: