DEV Community

loading...

Adding Spell Checking to my Blog’s Build Process with GitHub Actions and cSpell

seankilleen profile image Sean Killeen Originally published at seankilleen.com on ・3 min read

I’m always worried I’ll have a typo in my blog posts, and I suspected I had a few lying around in these pages. I don’t like that, so I decided to fix it and automate it.

The solution involves:

  • The great cSpell tool
  • A VS Code Extension, Code Spell Checker, that gives me cSpell-based checking within the IDE
  • A config file to allow for ignoring some words/patterns or adding words to a dictionary
  • A GitHub Action to run as part of my pull requests

Installing the Code Spell Checker Extension

In the extensions window, search for Code Spell Checker and install it (extension ID: streetsidesoftware.code-spell-checker)

Now, you’ll start getting feedback on what needs fixing when you have a file open. It’s really helpful.

Create a Config File

  • Add a cSpell.json file to the root of your repository to capture words to add to the dictionary. My example cSpell file can be found here

Run As Part of a Build

We’ll utilize GitHub actions for this.

  • Create a GitHub Action workflow by creating a file in your repo at .github/workflows/housekeeping.yml (.github is a folder in this case.)

Add the following, changing the values as they suit you:

name: Housekeeping

on:
  push:
    branches:
      - main # Modify if you use a different main branch name, such as the legacy "master" name.
  pull_request:
    branches:
      - main # Modify if you use a different main branch name, such as the legacy "master" name.

jobs:
  spellchecking:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        name: Check out the code
      - uses: actions/setup-node@v1
        name: Run spell check
        with:
          node-version: "12"
      - run: npm install -g cspell
      - run: cspell --config ./cSpell.json "**/*.md"

Enter fullscreen mode Exit fullscreen mode

What’s is this GitHub Action file doing?

  • It runs on any main branch commit or any PR against my main branch
  • It runs the GitHub action on an Ubuntu instance
  • It checks out all my code for the blog, which includes all the markdown files
  • It pulls a Docker container that is published to Docker Hub, which has been set up by someone else to set up Node (thanks, people who care about OSS!)
  • It runs a command to install cSpell globally within the container
  • It runs cSpell in the container on all my markdown files, using my config file. When it finds an error, it returns a non-zero exit code, which fails the build.

Once I committed this file to a PR, I saw the checking begin.

Wash, Rinse, Repeat

The first time I enabled this with a PR, I got a lot of failures, as one might expect. I kept making small commits over time and eventually I got there. I ran cspell --config ./cSpell.json "**/*.md" from my terminal as I went and kept making changes until the issues dropped to zero.

Voila!

Now, I get local spell-check support within VS Code and build time support via GitHub Actions. For free! 1.

Happy spelling!

By free, I mean thanks to someone else’s very hard work that they are often under-compensated and under-supported for. Go look into contributing to open source projects, or consider donating to an author or group that has enabled you to work better.

Discussion (0)

pic
Editor guide