Easy update and deployment workflow for Ghost themes with GitHub

As of now, I am still running my custom Ghost theme, although I plan on changing it soon. (Edit: I did).

It’s open-source and available on GitHub at angristan/Casper-XYZ. I update it regularly and keep it synced with the original Casper theme.

A few months ago, the Ghost team came up with action-deploy-theme, an GitHub action to deploy a theme to a Ghost website automatically, right from GitHub!

I have been enjoying it for a while now, so let me share how it works.

This will work with any Ghost theme. The first step is to push it to a GitHub repo. It doesn’t matter if it’s public or not.

The action lives in .github/workflows/deploy-theme.yml:

name: Deploy Theme
      - master
    runs-on: ubuntu-18.04
      - uses: actions/[email protected]
      - uses: TryGhost/[email protected]
          api-url: ${{ secrets.GHOST_ADMIN_API_URL }}
          api-key: ${{ secrets.GHOST_ADMIN_API_KEY }}
          theme-name: "casper-master"

It uses the Ghost Admin API to interact with the website.

API keys are available after adding a custom integration:

We need the Admin API key, not the Content API key.

We need the Admin API key, not the Content API key.

Once that’s done, we need to add these in the repo’s secrets:

And now on, every commit to the master branch will deploy an updated version of the theme.

Once the action has successfully run, I usually check in the design settings of my blog to see if the theme has been updated, and then I clear the different cache systems I have in front of the blog.

I really enjoy this workflow. I don’t have to manually build and upload the theme anymore. 👏