Hi there, this blog post explains how to manually trigger builds of GitHub actions.
Why would you want to do that?
Instead of just waiting for a code change or a GitHub workflow change? Well, for example the last time your build on master ran, maybe some of the servers used by your build were down (example: npm registry, some API you're using for tests, etc..).
For now GitHub says that there's no way to manually trigger a build, while this question was asked on StackOverflow and some people are even using CURL to trigger manual builds.
But I have found a better way! With my solution, once you'll have it set up, the ⭐️ button of your GitHub repository will trigger a build every time YOU (and only you) will star the repository.
You can do that as many times as you want.
Yes, it's a VERY hacky solution but it works pretty well. ✨
How to do manual trigger
Let's dig into it.
The ⭐️ button is used to launch the workflow if it's possible, like this.
Update your workflow file to include:
on:
watch:
types: [started]
So the workflow will be executed each time you star, or unstar and star again the repo.
If we combine that by a useful advice from Samira in Stack Overflow, you can launch your workflow only if it's the owner who trigger the action.
if: github.actor == github.event.repository.owner.login
It prevents to execute the action by others and only by maintainers for example.
Next you can add your job(s) to do and additional services.
At the end, we have the following workflow...
name: Test
on:
watch:
types: [started]
jobs:
build:
runs-on: ubuntu-latest
if: github.actor == github.event.repository.owner.login
steps:
- name: Checkout repository
uses: actions/checkout@v2
# add more ...
It's a starter, so you can adapt it for an existing workflow or start a new one with this.
Few notes
There is the possibility to combine two events.
For example you can set your workflow with the watch event and on each push, to have the both ways.
name: Test
on:
push:
branches:
- master
watch:
types: [started]
Here it run the process for each push on master branch and on star of the repo.
Don't forget that if you want to re-run a workflow which have failed,
you can re-run all the checks with a UI button set for a failed workflow just like that...
It depends on what you really want to do.
Moreover, you can launch the full workflow with the watch event or only some particular steps if you add a conditional if on a step like this:
name: Test
on:
watch:
types: [started]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v2
- name: Step 2
if: github.actor == github.event.repository.owner.login
In this case, it will run step 2 only if the repo is starred by the owner.
Don't forget that the ⭐️ button launch the workflow from the default branch (master) only.
Notice that there is permissions to avoid actions in the repository or to avoid the third party to run your actions in the settings of the repo.
Update: Suggested by Emilien in comments, we can also configure the workflow only for collaborators by creating another job which will be needed to check if it's a collaborator of the project or the workflow will fail.
jobs:
authorize:
runs-on: ubuntu-latest
steps:
- uses: octokit/request-action@v2.0.0
with:
route: GET /repos/:repository/collaborators/${{ github.actor }}
repository: ${{ github.repository }}
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
build:
needs: [authorize]
runs-on: ubuntu-latest
steps:
- ...
Good to know...
GitHub just released their action APIs which should allow soon either GitHub or browser extensions to add "trigger workflow" buttons on their UI.
I hope you liked this post and special thanks to Vincent who pushed me to write it :)
Top comments (14)
GitHub has added
workflow_dispatch
event for manually trigger.FYI: github.blog/changelog/2020-07-06-g...
Another alternative is to add an event hook for the
on: respository_dispatch
event which should let you trigger builds. See the docs here: help.github.com/en/actions/automat...Oh yes, thanks !
My solution use simplicity with the star button which already here and nothing to implement more than the workflow.
The repository_dispatch event has advantage to target other branch than master contrary to the watch event with the star.
Spot on.
thanks @jefftriplett i put together an easy example repo based on this: github.com/drewmullen/actions-play...
Get a solution to allows to all repository collaborators:
Nice ! I add it on the post :)
Thx, even though I'll most likely not use the "star method", your article is a good reference collection regarding github action triggers.
Do you have a reference/example at hand how to write the condition to check if the stargazer is in the team of an org (or in a list of users?)
Thanks, my article hasn't vocation to deliver the best method and as I said, it's really hacky, but good to know and also there are other options.
I haven’t an example right now but you can easily do a step with the logic of checking if the user is part of a list of the users in the language you prefer.
Execute the file and save the result as variable and return a boolean if it's true or false. And the following steps will be conditioned according to the result.
Maybe this example can helps you :
In this case, in your workflow, you will be able to reuse the name of the branch if you want to do a step only on this branch :
Hi all!
I'm hoping posting here won't be a problem.
I wanted to share a small project that I've been working on with a buddy that solves this problem.
actionspanel.app/
ActionsPanel uses this same
repository_dispatch
API but does so with a GitHub App token so that you don't need to worry about managing your own PAT. This also makes it much easier to trigger your actions across teams with multiple people. Then you don't need to share the PAT with each other or each create your own PATs.You configure your buttons with a declarative yaml file that you leave in the repo, and ActionsPanel will read that file and dynamically create your UI for you to trigger your actions.
We'd love to get your feedback on this project. It's very simple still but solves the core problem of triggering your actions.
If you do have feedback or any questions, feel free to post in this thread, or email us directly at support (at) actionspanel (dot) app
Looking forward to your feedback!
Is it open source?
Asking for repo write permissions from a closed source code project is a little too much for me.
I needed to add
:
to the end ofwatch
to get this to work.Did nobody actually try this code, or is there some stricter Action language interpretation on my end?
It was already tested by me because I add a gif demo of the watch event. GitHub Actions is based on yaml language. It's a typo, I update the article thanks.
Looks good but it will spam your followers feed, if you have a large amount of followers right?
Good question, in fact no, because it's only notifying on discussions about :
of the starred repository.
Further details just here :)