I’m remaking this website in the open. Follow along, if you wish: Writing, RSS, Source
In The Work Before the Work, I set up automatic deploys with Netlify. But I have plans to automate much more than deploys.
One of the useful benefits of a static site (a website that is only static files and doesn’t require a backing server or database) is that it can be built and deployed just about anywhere, and those locations can be different. Netlify provides an amazingly simple publishing experience, using continuous integration and continuous deployment (CI/CD): push or merge to master and my site is automatically built (CI) and deployed (CD). But I wanted to extend beyond that simplicity for a few reasons. First, I want my CI pipeline to include more than just building the site. Eventually, I want to continuously audit for accessibility, performance, and other factors in the usability and quality of what I’m publishing. Second, I’ve been itching to play with GitHub Actions. Third, Netlify’s generous free plan, available for open source projects, has a limit of 300 “build minutes”/month. That’s likely fine for right now (building and deploying only takes ~0.5 build minutes right now), but the additional CI work will start consuming a lot more.
I drew up a plan for where I want to go:
First, we’re just going to tackle the build and deploy steps:
That diagram illustrates that upon pushing changes (to a branch with an associated pull request or to master), the site will be built and then either deployed to a preview (if a push to a pull request) or production (if a push to master). If a step fails at any point, the flow stops. Finally, either the successful deploy or failure is communicated via a comment on the pull request or commit.
Before doing anything else, I need to disable automatic deploys. Going forward, I only want to deploy the site (or a preview) when it’s gone through all of those green checkmarks in the flow diagram. In Netlify, this is as easy as toggling a “stop builds” switch in my site settings.
Next, I create a GitHub workflow, starting from the blank starter. First, I add a step to install dependencies and then build the site. Then I search the GitHub Actions Marketplace for “netlify” and find Netlify Actions, which will make it simple to deploy the site (or a preview). Following the guidance on the README, I configure the action with my options and secrets.
Finally, I create a pull request to test it. The workflow kicks off as soon as I submit, and 30 seconds later I have a deploy preview available from Netlify:
That’s good enough for a starting point, but the information in the prior deploy entries is really useful, and I’d like to include it in my deploy message, to make future troubleshooting easier. To be continued…