841f3cb0bb7663fa1062ffc59acb7b4581dc1d0f

Author
Josh Soref <2119212+jsoref@users.noreply.github.com>
Committer
GitHub <noreply@github.com>
Date

Message

ci: add `check-spelling` action (#10470)

Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>

Diff

This diff is truncated to protect this page.

  1diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md
  2new file mode 100644
  3index 0000000000000000000000000000000000000000..dcd237ba23dca7e6849454f8b811926fc60741f6
  4--- /dev/null
  5+++ b/.github/actions/spelling/README.md
  6@@ -0,0 +1,15 @@
  7+# check-spelling/check-spelling configuration
  8+
  9+File | Purpose | Format | Info
 10+-|-|-|-
 11+[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary)
 12+[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow)
 13+[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject)
 14+[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes)
 15+[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only)
 16+[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns)
 17+[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect)
 18+[advice.md](advice.md) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice)
 19+
 20+Note: you can replace any of these files with a directory by the same name (minus the suffix)
 21+and then include multiple files inside that directory (with that suffix) to merge multiple files together.
 22diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md
 23new file mode 100644
 24index 0000000000000000000000000000000000000000..c83423a8ef6109ede98d9a44ecbc47c6a5d972c5
 25--- /dev/null
 26+++ b/.github/actions/spelling/advice.md
 27@@ -0,0 +1,25 @@
 28+<!-- See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice --> <!-- markdownlint-disable MD033 MD041 -->
 29+<details><summary>If the flagged items do not appear to be text</summary>
 30+
 31+If items relate to a ...
 32+* well-formed pattern.
 33+
 34+  If you can write a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it,
 35+  try adding it to the `patterns.txt` file.
 36+
 37+  Patterns are Perl 5 Regular Expressions - you can [test](
 38+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines.
 39+
 40+  Note that patterns can't match multiline strings.
 41+
 42+* binary file.
 43+
 44+  Please add a file path to the `excludes.txt` file matching the containing file.
 45+
 46+  File paths are Perl 5 Regular Expressions - you can [test](
 47+https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files.
 48+
 49+  `^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md](
 50+../tree/HEAD/README.md) (on whichever branch you're using).
 51+
 52+</details>
 53diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt
 54new file mode 100644
 55index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
 56--- /dev/null
 57+++ b/.github/actions/spelling/allow.txt
 58diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt
 59new file mode 100644
 60index 0000000000000000000000000000000000000000..f1cfeefbb1ef0b02d8107f9347f9cdcb3f6041f7
 61--- /dev/null
 62+++ b/.github/actions/spelling/excludes.txt
 63@@ -0,0 +1,41 @@
 64+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes
 65+(?:^|/)(?i)COPYRIGHT
 66+(?:^|/)(?i)LICEN[CS]E
 67+(?:^|/)package(?:-lock|)\.json$
 68+(?:^|/)vendor/
 69+ignore$
 70+\.avi$
 71+\.ico$
 72+\.jpe?g$
 73+\.lock$
 74+\.map$
 75+\.min\..
 76+\.mod$
 77+\.mp[34]$
 78+\.png$
 79+\.wav$
 80+^\.github/
 81+^\Qplugins/archlinux/archlinux.plugin.zsh\E$
 82+^\Qplugins/cp/cp.plugin.zsh\E$
 83+^\Qplugins/extract/_extract\E$
 84+^\Qplugins/genpass/genpass.plugin.zsh\E$
 85+^\Qplugins/gitignore/gitignore.plugin.zsh\E$
 86+^\Qplugins/gnu-utils/gnu-utils.plugin.zsh\E$
 87+^\Qplugins/hitchhiker/fortunes/hitchhiker\E$
 88+^\Qplugins/jhbuild/jhbuild.plugin.zsh\E$
 89+^\Qplugins/jhbuild/README.md\E$
 90+^\Qplugins/jruby/jruby.plugin.zsh\E$
 91+^\Qplugins/kubectl/kubectl.plugin.zsh\E$
 92+^\Qplugins/lol/lol.plugin.zsh\E$
 93+^\Qplugins/mosh/mosh.plugin.zsh\E$
 94+^\Qplugins/npx/npx.plugin.zsh\E$
 95+^\Qplugins/powder/_powder\E$
 96+^\Qplugins/suse/suse.plugin.zsh\E$
 97+^\Qplugins/thor/_thor\E$
 98+^\Qplugins/universalarchive/_universalarchive\E$
 99+^\Qplugins/vagrant/vagrant.plugin.zsh\E$
100+^\Qplugins/wp-cli/README.md\E$
101+^\Qplugins/wp-cli/wp-cli.plugin.zsh\E$
102+^\Qthemes/clean.zsh-theme\E$
103+^\Qthemes/philips.zsh-theme\E$
104+^\Qthemes/tonotdo.zsh-theme\E$
105diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt
106new file mode 100644
107index 0000000000000000000000000000000000000000..fc764f57ab302ba6c0c255fca3e21731ae7ca677
108--- /dev/null
109+++ b/.github/actions/spelling/expect.txt
110@@ -0,0 +1,4489 @@
111+AAAAC
112+aac
113+aar
114+abcdefghjkmnpqrstvwxyz
115+ABRT
116+absorbgitdirs
117+abspath
118+abtvfr
119+acceptorthreads
120+accessip
121+ACDIM
122+acking
123+ackmate
124+ackup
125+ACLs
126+acon
127+aconf
128+acp
129+acpi
130+acpitool
131+acr
132+acroread
133+acs
134+acsc
135+acsp
136+actionformats
137+Adamantium
138+adb
139+adbd
140+adben
141+addgroups
142+addhistory
143+addon
144+addprincipals
145+addrport
146+addrs
147+addusergroups
148+addwin
149+adelcampo
150+adg
151+ADK
152+adminalias
153+adminport
154+Admins
155+adoc
156+adu
157+aeiouy
158+afh
159+afind
160+afmagic
161+afs
162+afu
163+agb
164+agc
165+agd
166+agentpath
167+agi
168+agignore
169+agli
170+aglu
171+agnoster
172+agp
173+agrimaldi
174+ags
175+agu
176+agud
177+agug
178+aguu
179+AHg
180+ainv
181+aip
182+Airbender
183+ajp
184+ajs
185+Akinori
186+akoenig
187+alacritty
188+albers
189+alberto
190+alertmanager
191+alex
192+alexandre
193+aliasfiletype
194+aliaspassword
195+allexport
196+alloc
197+allocstatus
198+allownoncomponentcallers
199+allpkgs
200+alnum
201+ALRM
202+altchar
203+Altoid
204+alwayz
205+amanda
206+amazonaws
207+amazonec
208+ambyj
209+amd
210diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt
211new file mode 100644
212index 0000000000000000000000000000000000000000..93dfa201c959e9caa6aa764b5ac096f1c39e85ad
213--- /dev/null
214+++ b/.github/actions/spelling/patterns.txt
215@@ -0,0 +1,73 @@
216+# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns
217+
218+# YouTube
219+https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]*
220+<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"]
221+\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]*
222+# Google Analytics
223+\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]*
224+# Google APIs
225+\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+
226+\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|)
227+# Google Calendar
228+\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+
229+\w+\@group\.calendar\.google\.com\b
230+# Google DataStudio
231+\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|)
232+# The leading `/` here is as opposed to the `\b` above
233+# ... a short way to match `https://` or `http://` since most urls have one of those prefixes
234+# Google Docs
235+/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/?
236+# Google Drive
237+\bdrive\.google\.com/file/d/[0-9a-zA-Z_?=]*
238+# Google Groups
239+\bgroups\.google\.com/(?:forum/#!|d/)(?:msg|topic)/[^/]+/[a-zA-Z0-9]+(?:/[a-zA-Z0-9]+|)
240+# Google themes
241+themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+.
242+# Google CDN
243+\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]*
244+# Goo.gl
245+/goo\.gl/[a-zA-Z0-9]+
246+# Google Chrome Store
247+\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|)
248+# Google Books
249+\bbooks\.google\.(?:\w{2,4})/books\?[-\w\d=&#.]*
250+# Google Fonts
251+\bfonts\.(?:googleapis|gstatic)\.com/[-/?=:;+&0-9a-zA-Z]*
252+
253+# GitHub SHAs
254+\bapi.github\.com/repos/[^/]+/[^/]+/[^/]+/[0-9a-f]+\b
255+(?:\[[0-9a-f]+\]\(https:/|)/(?:www\.|)github\.com/[^/]+/[^/]+(?:/[^/]+/[0-9a-f]+(?:[-0-9a-zA-Z/#.]*|)\b|)
256+\bgithub\.com/[^/]+/[^/]+[@#][0-9a-f]+\b
257+# githubusercontent
258+/[-a-z0-9]+\.githubusercontent\.com/[-a-zA-Z0-9?&=_\/.]*
259+# gist github
260+/gist\.github\.com/[^/]+/[0-9a-f]+
261+# git.io
262+\bgit\.io/[0-9a-zA-Z]+
263+# GitHub JSON
264+"node_id": "[-a-zA-Z=;:/0-9+]*"
265+# Contributor
266+\[[^\]]+]\(https://github\.com/[^/]+\)
267+# GHSA
268+GHSA(?:-[0-9a-z]{4}){3}
269+
270+LS_COLORS=(["']).*?\g{-1}
271+
272+(\\?)%[a-zA-Z]+\g{-1}(?!%)
273+
274+# URL escaped characters
275+\%[0-9A-F]{2}
276+# hex digits including css/html color classes:
277+(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b
278+
279+# https://www.gnu.org/software/groff/manual/groff.html
280+# man troff content
281+\\f[BCIPR]
282+
283+# Compiler flags
284+[\t "'`=]-[LPWXY]
285+[\t "'`=]-D(?!ebian)
286+
287+# ignore long runs of a single character:
288+\b([A-Za-z])\g{-1}{3,}\b
289diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt
290new file mode 100644
291index 0000000000000000000000000000000000000000..a5ba6f6390ef0b7d463ffcbe85ce24d57819c729
292--- /dev/null
293+++ b/.github/actions/spelling/reject.txt
294@@ -0,0 +1,7 @@
295+^attache$
296+benefitting
297+occurence
298+Sorce
299+^[Ss]pae
300+^untill
301+^wether
302diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml
303new file mode 100644
304index 0000000000000000000000000000000000000000..18a302e3c21f83664fbf0916bb00a7cf074c2fa3
305--- /dev/null
306+++ b/.github/workflows/spelling.yml
307@@ -0,0 +1,95 @@
308+name: Spell checking
309+on:
310+  push:
311+    branches: ["**"]
312+    tags-ignore: ["**"]
313+  pull_request_target:
314+  issue_comment:
315+    types: [created]
316+
317+jobs:
318+  spelling:
319+    name: Spell checking
320+    permissions:
321+      contents: read
322+      pull-requests: read
323+    outputs:
324+      internal_state_directory: ${{ steps.spelling.outputs.internal_state_directory }}
325+    runs-on: ubuntu-latest
326+    if: "contains(github.event_name, 'pull_request') || github.event_name == 'push'"
327+    concurrency:
328+      group: spelling-${{ github.event.pull_request.number || github.ref }}
329+      # note: If you use only_check_changed_files, you do not want cancel-in-progress
330+      cancel-in-progress: true
331+    steps:
332+    - name: checkout-merge
333+      if: "contains(github.event_name, 'pull_request')"
334+      uses: actions/checkout@v2
335+      with:
336+        ref: refs/pull/${{github.event.pull_request.number}}/merge
337+    - name: checkout
338+      if: github.event_name == 'push'
339+      uses: actions/checkout@v2
340+    - name: check-spelling
341+      id: spelling
342+      uses: check-spelling/check-spelling@prerelease
343+      with:
344+        experimental_apply_changes_via_bot: 1
345+        suppress_push_for_open_pull_request: 1
346+        post_comment: 0
347+    - name: store-comment
348+      if: failure()
349+      uses: actions/upload-artifact@v2
350+      with:
351+        retention-days: 1
352+        name: "check-spelling-comment-${{ github.run_id }}"
353+        path: |
354+          ${{ steps.spelling.outputs.internal_state_directory }}
355+
356+  comment:
357+    name: Comment
358+    runs-on: ubuntu-latest
359+    needs: spelling
360+    permissions:
361+      contents: write
362+      pull-requests: write
363+    if: always() && needs.spelling.result == 'failure' && needs.spelling.outputs.internal_state_directory
364+    steps:
365+    - name: checkout
366+      uses: actions/checkout@v2
367+    - name: set up
368+      run: |
369+        mkdir /tmp/data
370+    - name: retrieve-comment
371+      uses: actions/download-artifact@v2
372+      with:
373+        name: "check-spelling-comment-${{ github.run_id }}"
374+        path: /tmp/data
375+    - name: comment
376+      uses: check-spelling/check-spelling@prerelease
377+      with:
378+        experimental_apply_changes_via_bot: 1
379+        custom_task: comment
380+        internal_state_directory: /tmp/data
381+
382+  update:
383+    name: Update PR
384+    permissions:
385+      contents: write
386+      pull-requests: write
387+    runs-on: ubuntu-latest
388+    if: ${{
389+        github.event_name == 'issue_comment' &&
390+        github.event.issue.pull_request &&
391+        contains(github.event.comment.body, '@check-spelling-bot apply')
392+      }}
393+    concurrency:
394+      group: spelling-update-${{ github.event.issue.number }}
395+      cancel-in-progress: false
396+    steps:
397+    - name: checkout
398+      uses: actions/checkout@v2
399+    - name: check-spelling
400+      uses: check-spelling/check-spelling@prerelease
401+      with:
402+        experimental_apply_changes_via_bot: 1