George Griffiths
Posted on June 23, 2021
I recently launched a re-write of my brothers Guitar teaching business website: cgguitar.co.uk, during this rewrite I implemented a feature where I wanted to fetch YouTube playlists at build time.
To achieve my goals, I wanted to scheduled builds of my Netlify website periodically.
Netlify doesn't have this feature built in, however what Netlify does have is a 'webhook' which you can call trigger to your build.
In this post I offer two ways to trigger this build, using Github Actions or CircleCI. Using Github Actions can have a significant downside, depending on the use case, continue read to find more about that!
Finding your build hook in Netlify
Login to Netlify and navigate to your site settings and local the "Build & deploy" section, your build hook will be in there.
You can test this out by making a curl request in your terminal, you should see it trigger your Netlify website build:
curl -X POST -d {} https://api.netlify.com/build_hooks/$NETLIFY_BUILD_HOOK_TOKEN
Important: Ensure you keep
NETLIFY_BUILD_HOOK_TOKEN
secret, otherwise anyone can call your build and potentially cause you to go over your build quota.
Can Github Actions do this?
Github actions let you perform continuous integration in Github, they seem like a perfect fit here...
In your Github repository, in the following folder .github/workflows
, you could create:
name: Scheduled build
on:
schedule:
- cron: '00 15 * * *'
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Trigger our build webhook on Netlify
run: curl -s -X POST "https://api.netlify.com/build_hooks/${TOKEN}"
env:
TOKEN: ${{ secrets.NETLIFY_BUILD_HOOK_TOKEN }}
The above configuration will run every day at around 15:00.
You will want to secure your build_hook
token in a secret on Github.
I did this originally and thought job done right? Well, not quite.
Github Actions are disabled on projects after 60 days if there is no activity on the repository, meaning bye bye scheduled builds.
The above limitation might be okay, depending on your use case, but for my case where I wanted to make sure I was fetching the latest videos from a YouTube playlist, this was no good because the website's code itself may not be updating very often, but there may be new videos added.
Using CircleCI instead
One alternative to Github actions is to use CircleCI to do this instead, it has a generous free tier too so there should be no charge for this.
You can create a configuration like this:
- Create a folder in your Git repository called
.circleci
- Create a file called
config.yml
Populate the config.yml
with something like the following (you can use a different image if you wish). This will build every day at 3PM.
version: 2
defaults: &defaults
machine:
image: circleci/classic:201710-02
steps:
- run: curl -X POST -d {} https://api.netlify.com/build_hooks/$NETLIFY_BUILD_HOOK_TOKEN
jobs:
docker:
<<: *defaults
workflows:
version: 2
autobuild:
triggers:
- schedule:
cron: "0 14 * * *"
filters:
branches:
only:
- main
jobs:
- docker
Now you can create a project in CircleCI and you should be able to test your build.
NETLIFY_BUILD_HOOK_TOKEN
will need to be set as an environment variable, in a similar way to Github, in the setting of CircleCI for your project.
If you want to read more of my work, please follow me on Twitter @griffadev, or get me a coffee if you feel like it ☕.
Posted on June 23, 2021
Join Our Newsletter. No Spam, Only the good stuff.
Sign up to receive the latest update from our blog.