Skip to content

Commit

Permalink
add spell checking GitHub action
Browse files Browse the repository at this point in the history
  • Loading branch information
pdaoust committed Feb 2, 2024
1 parent 608d81b commit 21d69a9
Showing 1 changed file with 166 additions and 0 deletions.
166 changes: 166 additions & 0 deletions .github/workflows/spelling.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,166 @@
name: Check Spelling

# Comment management is handled through a secondary job, for details see:
# https://github.com/check-spelling/check-spelling/wiki/Feature%3A-Restricted-Permissions
#
# `jobs.comment-push` runs when a push is made to a repository and the `jobs.spelling` job needs to make a comment
# (in odd cases, it might actually run just to collapse a comment, but that's fairly rare)
# it needs `contents: write` in order to add a comment.
#
# `jobs.comment-pr` runs when a pull_request is made to a repository and the `jobs.spelling` job needs to make a comment
# or collapse a comment (in the case where it had previously made a comment and now no longer needs to show a comment)
# it needs `pull-requests: write` in order to manipulate those comments.

# Updating pull request branches is managed via comment handling.
# For details, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-expect-list
#
# These elements work together to make it happen:
#
# `on.issue_comment`
# This event listens to comments by users asking to update the metadata.
#
# `jobs.update`
# This job runs in response to an issue_comment and will push a new commit
# to update the spelling metadata.
#
# `with.experimental_apply_changes_via_bot`
# Tells the action to support and generate messages that enable it
# to make a commit to update the spelling metadata.
#
# `with.ssh_key`
# In order to trigger workflows when the commit is made, you can provide a
# secret (typically, a write-enabled github deploy key).
#
# For background, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Update-with-deploy-key

# Sarif reporting
#
# Access to Sarif reports is generally restricted (by GitHub) to members of the repository.
#
# Requires enabling `security-events: write`
# and configuring the action with `use_sarif: 1`
#
# For information on the feature, see: https://github.com/check-spelling/check-spelling/wiki/Feature:-Sarif-output

# Minimal workflow structure:
#
# on:
# push:
# ...
# pull_request_target:
# ...
# jobs:
# # you only want the spelling job, all others should be omitted
# spelling:
# # remove `security-events: write` and `use_sarif: 1`
# # remove `experimental_apply_changes_via_bot: 1`
# ... otherwise adjust the `with:` as you wish

on:
push:
branches:
- "**"
tags-ignore:
- "**"
pull_request_target:
branches:
- "**"
types:
- 'opened'
- 'reopened'
- 'synchronize'
issue_comment:
types:
- 'created'

jobs:
spelling:
name: Check Spelling
permissions:
contents: read
pull-requests: read
actions: read
security-events: write
outputs:
followup: ${{ steps.spelling.outputs.followup }}
runs-on: ubuntu-latest
if: ${{ contains(github.event_name, 'pull_request') || github.event_name == 'push' }}
concurrency:
group: spelling-${{ github.event.pull_request.number || github.ref }}
# note: If you use only_check_changed_files, you do not want cancel-in-progress
cancel-in-progress: true
steps:
- name: check-spelling
id: spelling
uses: check-spelling/check-spelling@main
with:
suppress_push_for_open_pull_request: ${{ github.actor != 'dependabot[bot]' && 1 }}
checkout: true
check_file_names: 1
spell_check_this: check-spelling/spell-check-this@prerelease
post_comment: 0
use_magic_file: 1
report-timing: 1
warnings: bad-regex,binary-file,deprecated-feature,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check
experimental_apply_changes_via_bot: 1
use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }}
extra_dictionary_limit: 20
extra_dictionaries:
cspell:software-terms/dict/softwareTerms.txt

comment-push:
name: Report (Push)
# If your workflow isn't running on push, you can remove this job
runs-on: ubuntu-latest
needs: spelling
permissions:
contents: write
if: (success() || failure()) && needs.spelling.outputs.followup && github.event_name == 'push'
steps:
- name: comment
uses: check-spelling/check-spelling@main
with:
checkout: true
spell_check_this: check-spelling/spell-check-this@prerelease
task: ${{ needs.spelling.outputs.followup }}

comment-pr:
name: Report (PR)
# If you workflow isn't running on pull_request*, you can remove this job
runs-on: ubuntu-latest
needs: spelling
permissions:
contents: read
pull-requests: write
if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request')
steps:
- name: comment
uses: check-spelling/check-spelling@main
with:
checkout: true
spell_check_this: check-spelling/spell-check-this@prerelease
task: ${{ needs.spelling.outputs.followup }}
experimental_apply_changes_via_bot: 1

update:
name: Update PR
permissions:
contents: write
pull-requests: write
actions: read
runs-on: ubuntu-latest
if: ${{
github.event_name == 'issue_comment' &&
github.event.issue.pull_request &&
contains(github.event.comment.body, '@check-spelling-bot apply')
}}
concurrency:
group: spelling-update-${{ github.event.issue.number }}
cancel-in-progress: false
steps:
- name: apply spelling updates
uses: check-spelling/check-spelling@main
with:
experimental_apply_changes_via_bot: 1
checkout: true
ssh_key: "${{ secrets.CHECK_SPELLING }}"

2 comments on commit 21d69a9

@github-actions

This comment was marked as outdated.

@github-actions
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@check-spelling-bot Report

🔴 Please review

See the 📜action log or 📝 job summary for details.

Unrecognized words (288)
adipiscing
AED
affordance
aloskutov
amet
Anwaar
Aoust
appen
applicaiton
apps
articulo
arve
autoprefixer
autoprefixes
betwee
bfd
bft
blanguage
blingy
blockquote
brower
browserlist
btn
buildinputs
builtins
Burmeister
buttom
bytecode
cachix
cas
cbe
cbfbefefe
cda
CECCD
checklinks
chriselsner
cls
codigo
Composability
copyable
coreconcepts
counterparty
Cpath
cras
crdt
creagted
Csvg
CTAs
ctx
currentcolor
cwd
dapp
Datafiles
datprotocol
dddd
defintions
Dependant
depndencies
devhub
dht
dialnet
diffs
divs
dlt
dna
downsides
dpki
eaa
ebe
EDDD
ede
egestas
electronjs
eleventy
elif
emacs
encodecolor
endfor
endlayoutblock
endlink
endmacro
endrenderlayoutblock
enim
establised
ethereum
executig
extname
exts
facebook
fauxdom
ffbd
ffce
ffe
fff
figcaption
filesystems
finalised
firefox
firewalls
freecodecamp
gnused
google
googleapis
googletagmanager
Gotcha
gradiant
gtag
gui
GYK
happ
hashchange
hashtag
hdi
hdk
HFFy
highlightjs
hljs
holo
holochain
holonix
htag
HTMLI
htmlmin
ico
idx
iframe
img
initialiation
initiliazed
integreated
interoperating
ipfs
javascript
jetbrains
kanagroo
kbd
keydown
keyring
keystore
layoutblock
learncryptography
lectus
len
lifecycle
lightningrodlabs
linecap
linejoin
linux
lunr
malware
martinfowler
mashups
mauris
mdi
membrame
microsoft
minifier
minmax
mjs
mozilla
msgpack
mwc
myfonts
NATs
netlify
newblock
NFTs
nixos
nixpkgs
njk
NJMIQ
noopener
npmjs
nter
nunjucks
offsite
organisations
ornare
oyo
pagefind
passphrase
Passthrough
pdf
permissivity
pharetra
pki
placeholders
placerat
polyline
postcss
posthtml
QString
quic
recv
reddit
referenence
renderlayoutblock
resonse
rgba
roadmap
Roboto
rocketship
rollup
rpc
RRDHT
runtimes
rustc
rustflags
rustlings
rustup
sandboxed
scm
screenshot
scrollwrap
servlet
servs
Ses
shortcode
sindresorhus
sitemap
sourcing
spacebar
spam
srcset
standalone
storysequence
stylesheet
subl
sublimetext
succeds
surpress
svg
syntaxhighlight
tabcontent
takeaways
tauri
tincidunt
tkb
TLS
tme
toc
todos
tokio
toml
toolkitbay
tryorama
TThe
typeof
udpate
uis
Ulhaq
ultrices
uninstallation
unirioja
URW
usernames
utf
vec
versioning
Vffg
VIqt
vitest
VMs
Vue
warranated
watv
webassembly
webhapp
webp
webrtc
website
webstorm
wght
whitespaces
wikipedia
woff
workdir
workflows
workspaces
wsl
wss
xda
xlink
yml
youtu
youtube
zome
zst
Some files were automatically ignored 🙈

These sample patterns would exclude them:

^\Qsrc/scss/_svg-icons.scss\E$

You should consider adding them to:

.github/actions/spelling/excludes.txt

File matching is via Perl regular expressions.

To check these files, more of their words need to be in the dictionary than not. You can use patterns.txt to exclude portions, add items to the dictionary (e.g. by adding them to allow.txt), or fix typos.

To accept these unrecognized words as correct and update file exclusions, you could run the following commands

... in a clone of the [email protected]:holochain/docs-pages.git repository
on the 2024-02-02-add-spell-checking-ci branch (ℹ️ how do I use this?):

curl -s -S -L 'https://raw.githubusercontent.com/check-spelling/check-spelling/main/apply.pl' |
perl - 'https://github.com/holochain/docs-pages/actions/runs/7762159537/attempts/2'
Available 📚 dictionaries could cover words not in the 📘 dictionary
Dictionary Entries Covers Uniquely
cspell:lorem-ipsum/dictionary.txt 243 12 12
cspell:npm/dict/npm.txt 302 14 8
cspell:k8s/dict/k8s.txt 153 9 4
cspell:aws/aws.txt 218 8 4
cspell:node/dict/node.txt 891 17 3

Consider adding them (in .github/workflows/spelling.yml) for uses: check-spelling/check-spelling@main in its with:

      with:
        extra_dictionaries:
          cspell:lorem-ipsum/dictionary.txt
          cspell:npm/dict/npm.txt
          cspell:k8s/dict/k8s.txt
          cspell:aws/aws.txt
          cspell:node/dict/node.txt

To stop checking additional dictionaries, add (in .github/workflows/spelling.yml) for uses: check-spelling/check-spelling@main in its with:

check_extra_dictionaries: ''
Pattern suggestions ✂️ (24)

You could add these patterns to .github/actions/spelling/patterns.txt:

# Automatically suggested patterns
# hit-count: 210 file-count: 31
# https/http/file urls
(?:\b(?:https?|ftp|file)://)[-A-Za-z0-9+&@#/%?=~_|!:,.;]+[-A-Za-z0-9+&@#/%=~_|]

# hit-count: 65 file-count: 8
# hex digits including css/html color classes:
(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9_a-fA-FgGrR]*?[a-fA-FgGrR]{2,}[0-9_a-fA-FgGrR]*(?:[uUlL]{0,3}|[iu]\d+)\b

# hit-count: 42 file-count: 10
# Wikipedia
\ben\.wikipedia\.org/wiki/[-\w%.#]+

# hit-count: 26 file-count: 4
# css url wrappings
\burl\([^)]+\)

# hit-count: 25 file-count: 4
# w3
\bw3\.org/[-0-9a-zA-Z/#.]+

# hit-count: 8 file-count: 6
# GitHub SHAs (markdown)
(?:\[`?[0-9a-f]+`?\]\(https:/|)/(?:www\.|)github\.com(?:/[^/\s"]+){2,}(?:/[^/\s")]+)(?:[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)

# hit-count: 6 file-count: 3
# node packages
(["'])\@[^/'" ]+/[^/'" ]+\g{-1}

# hit-count: 5 file-count: 1
# hex runs
\b[0-9a-fA-F]{16,}\b

# hit-count: 5 file-count: 1
# Lorem
# Update Lorem based on your content (requires `ge` and `w` from https://github.com/jsoref/spelling; and `review` from https://github.com/check-spelling/check-spelling/wiki/Looking-for-items-locally )
# grep '^[^#].*lorem' .github/actions/spelling/patterns.txt|perl -pne 's/.*i..\?://;s/\).*//' |tr '|' "\n"|sort -f |xargs -n1 ge|perl -pne 's/^[^:]*://'|sort -u|w|sed -e 's/ .*//'|w|review -
# Warning, while `(?i)` is very neat and fancy, if you have some binary files that aren't proper unicode, you might run into:
# ... Operation "substitution (s///)" returns its argument for non-Unicode code point 0x1C19AE (the code point will vary).
# ... You could manually change `(?i)X...` to use `[Xx]...`
# ... or you could add the files to your `excludes` file (a version after 0.0.19 should identify the file path)
(?:(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus)\b(?:\w|\s|[,.])*)

# hit-count: 4 file-count: 2
# Contributor
\[[^\]]+\]\(https://github\.com/[^/\s"]+/?\)

# hit-count: 3 file-count: 3
# discord
/discord(?:app\.com|\.gg)/(?:invite/)?[a-zA-Z0-9]{7,}

# hit-count: 3 file-count: 2
# Twitter status
\btwitter\.com/[^/\s"')]*(?:/status/\d+(?:\?[-_0-9a-zA-Z&=]*|)|)

# hit-count: 3 file-count: 1
# URL escaped characters
\%[0-9A-F][A-F](?=[A-Za-z])

# hit-count: 2 file-count: 2
# While you could try to match `http://` and `https://` by using `s?` in `https?://`, sometimes there
# YouTube url
\b(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|user/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_%]*

# hit-count: 2 file-count: 1
# Reddit
\breddit\.com/r/[/\w_]*

# hit-count: 1 file-count: 1
# data url in quotes
([`'"])data:(?:[^ `'"].*?|)(?:[A-Z]{3,}|[A-Z][a-z]{2,}|[a-z]{3,}).*\g{-1}

# hit-count: 1 file-count: 1
# data url
\bdata:[-a-zA-Z=;:/0-9+]*,\S*

# hit-count: 1 file-count: 1
# Google Fonts
\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*

# hit-count: 1 file-count: 1
# gist github
\bgist\.github\.com/[^/\s"]+/[0-9a-f]+

# hit-count: 1 file-count: 1
# medium
\bmedium\.com/\@?[^/\s"]+/[-\w]+

# hit-count: 1 file-count: 1
# vs devops
\bvisualstudio.com(?::443|)/[-\w/?=%&.]*

# hit-count: 1 file-count: 1
# freecodecamp.org
\bfreecodecamp\.org/[-\w/.]+

# hit-count: 1 file-count: 1
# javascript match regex
\.match\(/[^/\s"]{3,}/[gim]*\s*

# hit-count: 1 file-count: 1
# base64 encoded content, possibly wrapped in mime
(?:^|[\s=;:?])[-a-zA-Z=;:/0-9+]{50,}(?:[\s=;:?]|$)

Errors (4)

See the 📜action log or 📝 job summary for details.

❌ Errors Count
ℹ️ candidate-pattern 43
❌ check-file-path 32
❌ forbidden-pattern 21
ℹ️ minified-file 1

See ❌ Event descriptions for more information.

Please sign in to comment.