Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Manual workflow triggers in Github Actions

I am setting up Github Actions for a project repository.

The workflow consists of the following steps:

  • Building a docker image
  • Pushing the image to a container registry
  • Rollout a Kubernetes deployment.

However, I have two different Kubernetes deployments: one for development, and one for production. Hence, I have also two Github Action workflows.

The Github Action workflow for development is triggered everytime that a commit is pushed:

on:   push:     branches:     - master 

But I don't want that for my production workflow. I would need a manual trigger, like a Send to production button. I didn't see anything close to that in the docs.


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

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

like image 504
Antoine C. Avatar asked Nov 19 '19 11:11

Antoine C.


People also ask

How do I manually trigger a GitHub Actions workflow?

On GitHub.com, navigate to the main page of the repository. Under your repository name, click Actions. In the left sidebar, click the workflow you want to run. Above the list of workflow runs, select Run workflow.

How do I trigger a workflow from another workflow in GitHub Actions?

If you do want to trigger a workflow from within a workflow run, you can use a personal access token instead of GITHUB_TOKEN to trigger events that require a token. You'll need to create a personal access token and store it as a secret.

What is Workflow_dispatch GitHub Actions?

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.

How do I schedule a workflow action in GitHub?

Go to your GitHub repository (create one if required). Go to the Actions tab and create a new action workflow. Add your Cron schedule and task to it. Commit the change.


2 Answers

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] 
like image 125
VonC Avatar answered Sep 30 '22 04:09

VonC


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.

like image 33
Sarah Abderemane Avatar answered Sep 30 '22 06:09

Sarah Abderemane