Manual workflow triggers in Github Actions Manual workflow triggers in Github Actions kubernetes kubernetes

Manual workflow triggers in Github Actions


Is there a way to trigger a workflow manually in Github Actions?

You might consider, from July2020:

GitHub Actions: Manual triggers with workflow_dispatch

(Note: or multiple workflows, through the new Composite Run Steps, August 2020)

You can now create workflows that are manually triggered with the new workflow_dispatch event.
You will then see a 'Run workflow' button on the Actions tab, enabling you to easily trigger a run.

https://i2.wp.com/user-images.githubusercontent.com/1865328/86147571-2de93700-babf-11ea-8a08-e4beffd3abe9.png?ssl=1

You can choose which branch the workflow is run on.

philippe adds in the comments:

One thing that's not mentioned in the documentation: the workflow must exist on the default branch for the "Run workflow" button to appear.
Once you add it there, you can continue developing the action on its own branch and the changes will take effect when run using the button

The documentation goes on:

In addition, you can optionally specify inputs, which GitHub will present as form elements in the UI. Workflow dispatch inputs are specified with the same format as action inputs.

For example:

on:   workflow_dispatch:    inputs:      logLevel:        description: 'Log level'             required: true        default: 'warning'      tags:        description: 'Test scenario tags'  

The triggered workflow receives the inputs in the github.event context.

For example:

jobs:  printInputs:    runs-on: ubuntu-latest    steps:    - run: |        echo "Log level: ${{ github.event.inputs.logLevel }}"        echo "Tags: ${{ github.event.inputs.tags }}" 

shim adds in the comments:

You can add workflow_dispatch to a workflow that also has other triggers (like on push and / or schedule)

For instance:

on: workflow_dispatch: push:   branches:     - master pull_request:   types: [opened, synchronize, reopened]


EDITED :

Great tweet explaining the use of workflow dispatch :https://twitter.com/github/status/1321859709075394563?s=19


Is there a way to trigger a workflow manually in Github Actions?

I've got a little hack to do so...

With the watch event, you can manually trigger an action by star or unstar the repo. The code for the event in your workflow is :

on:  watch    types: [started]

I know it's weird but it works! Nevertheless, it's not the best way if it's a public repo with potential stars.


How can I split my development and my production workflows to achieve what I want, either on Github Actions, Docker or Kubernetes?

In Github Actions I mean, you can do multiple workflows / jobs and filter by targeted branches or events. You can combine multiple events for example trigger a workflow for push and with a cron on midnight.


Update: For a slash command style "ChatOps" solution see slash-command-dispatch action. This can allow you to trigger workflows with slash commands (e.g. /deploy) from issue and pull request comments.

Here is a basic example for a deploy slash command. REPO_ACCESS_TOKEN is a repo scoped Personal Access Token

name: Slash Command Dispatchon:  issue_comment:    types: [created]jobs:  slashCommandDispatch:    runs-on: ubuntu-latest    steps:      - name: Slash Command Dispatch        uses: peter-evans/slash-command-dispatch@v1        with:          token: ${{ secrets.REPO_ACCESS_TOKEN }}          commands: deploy

The command can be processed in this workflow.

name: Deploy Commandon:  repository_dispatch:    types: [deploy-command]

There are many more options and different setups. See slash-command-dispatch for full usage instructions.

Original Answer:A repository_dispatch workflow can be manually triggered by a call to the GitHub API as follows.

on:  repository_dispatch:    types: [production-deploy]
  • [username] is a GitHub username
  • [token] is a repo scoped Personal Access Token
  • [repository] is the name of the repository the workflow resides in.
curl -XPOST -u "[username]:[token]" \  -H "Accept: application/vnd.github.everest-preview+json" \  -H "Content-Type: application/json" \  https://api.github.com/repos/[username]/[repository]/dispatches \  --data '{"event_type": "production-deploy"}'