Upgrading this site from Gatsby version 2 to version 4

Known stuff to do

  • Take care of existing Dependabot PRs (verify builds in Amplify, my god these take a long time)
  • Clean up some old branches
  • Clean up old Amplify connected branches (automatic, see below)
  • Make a fresh branch for the upgrade process
  • Make a fresh connected build in Amplify for upgrade branch (automatic, see below)
  • Follow the Gatsby Upgrade Guide
  • Fix any broken functionality from upgrade breaking changes
  • PR and deploy production site

Stuff I didn't know

The dependabot-generated PRs will auto-delete the branch after merge. Saves cleanup later, neat!

I mostly use npm for work and other projects, but for this one I use yarn. I noticed that the default auto-detection settings in Amplify used yarn for the build command, so I stick with that locally as well. Just in case.

amplify.yml

version: 0.1
frontend:
  phases:
    preBuild:
      commands:
        - cd public-site
        - yarn install
    build:
      commands:
        - yarn build
  artifacts:
    baseDirectory: public-site/public
    files:
      - "**/*"
  cache:
    paths:
      - public-site/node_modules/**/*

Deleting the connected branch in Github also removes the Amplify branch-based preview. You may need to refresh to see the change in Amplify Console.

Additionally, I have a branch name-matching configuration that will pick up any branch that starts with feat/ in Github, and create a preview environment in Amplify. It works really seamlessly.

Using yarn to upgrade interactive to latest... is problematic. Gatsby v4 is now the latest. I don't know an easy way to automatically update just to what gatsby 3 would want (or to what versions need only gatsby 3)

It was easier to just update everything to latest. Including skipping Gatsby 3 and going right for Gatsby 4. I still have two plugins not working:

  • gatsby-remark-copy-relative-linked-files
  • gatsby-plugin-robots-txt

Amplify was using node v12 by default. In order to force it to use node 14+ (required by Gatsby v4), I had to do 2 things.

  • Create a .nvmrc file
  • Add 2 steps in the Amplify build settings yaml

.nvmrc

v14.17.1

amplify.yml

version: 0.1
frontend:
  phases:
    preBuild:
      commands:
        - cd public-site
        - nvm install
        - nvm use
        - yarn install
    build:
      commands:
        - yarn build
  artifacts:
    baseDirectory: public-site/public
    files:
      - "**/*"
  cache:
    paths:
      - public-site/node_modules/**/*