logo
podcast Podcast
get help Get Unstuck

Have one GitHub Action trigger another

It doesn't work by default

Joel Clermont
Joel Clermont
2024-11-20

Aaron has documented a helpful GitHub action we use for merging from a long-running development branch into production, all within the GitHub UI.

This saves us time from having to either open and immediately merge a PR or run commands locally. But one limitation I bumped into is that when this action runs, and the merge and push happen in main, our other workflows that normally trigger when code is pushed to main do not run. Why is this?

GitHub is trying to be helpful here. They want to prevent an infinite loop where one action calls another action, which calls the first action, and so on. Since actions are billable, I appreciate this guardrail.

But what if you want to trigger another action from within an action, and you trust you won't cause an infinite loop?

Three small changes are needed from Aaron's action to make this work:

  1. Add actions: write to the workflow's permissions.
  2. Generate a personal access token with repo permissions, and save it to your repository's secrets with a descriptive name.
  3. Add two parameters to the checkout step in your workflow:
    • persist-credentials: true
    • token: ${​{ secrets.YOUR_SECRET_NAME }}.

The persist-credentials parameter is helpful so that future steps, like merging and pushing to main, will automatically use this personal access token.

With these three small changes in place, now when I kick off the merge workflow, our normal CI and deploy workflows will kick off when merged to main automatically.

Here to help,

Joel

P.S. Aaron has also written a great book on securing your Laravel app, and it's free to download!

Toss a coin in the jar if you found this helpful.
Want a tip like this in your inbox every weekday? Sign up below 👇🏼
email
No spam. Only real-world advice you can use.