Skip to content
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,16 @@ default_language_version:
node: system

repos:
- repo: https://github.com/crate-ci/typos
rev: 00f422f3b19c57bc6338715ebfe3316d38768461 # v1.50.3
hooks:
- id: typos
# Drop the upstream default `--write-changes` so the hook only
# reports failures instead of writing changes.
# Keep `--force-exclude` so the excludes in typos.toml still
# apply to the paths prek passes in.
args: ["--force-exclude"]
Comment on lines +8 to +16

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

The same comments from above apply here as well.


- repo: https://github.com/pre-commit/pre-commit-hooks
rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # 6.0.0
hooks:
Expand Down
64 changes: 64 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -65,6 +65,70 @@ These are the only variables currently being used on the playbooks, but can be e

Additional settings can be found in `playbook/group_vars/all`, but these are not intended to be freely changed and should be treated with care.

## Spell checking

Every managed repository runs [typos](https://github.com/crate-ci/typos) as a prek hook.
The hook is templated in `template/.pre-commit-config.yaml.j2`.
The word lists are **not** templated: each repository has its own `typos.toml`, because typos has no layered configuration yet ([crate-ci/typos#193](https://github.com/crate-ci/typos/issues/193)).
Keeping the word lists local also means adding a word is a PR per repository instead of a templating run.
Files rendered from `template/` are checked in this repository once.

### The core config

As a convention, new repositories should start from this block and add only what they actually need.

```toml
# Configuration for typos (https://github.com/crate-ci/typos), run via the prek
# hook in .pre-commit-config.yaml.
#
# Before adding an entry here, consider an in-place marker instead. Use one when
# the word is correct at this one site and would still be a typo elsewhere:
#
# # typos:ignore-line at the end of the line it applies to
# # typos:ignore-next-line on its own line, above the offending line
# # typos:off / typos:on around a block
#
# Every entry below gets a one-line comment saying what the word is.

[files]
# Bare `typos` skips hidden dirs by default, but prek passes explicit paths and
# so does check them. Turn it off so both agree.
ignore-hidden = false

extend-exclude = [
# `.git` itself, which ignore-hidden = false would otherwise pull in.
".git/",
# Generated by `make regenerate-nix` (crate2nix). Contains vendored crate
# metadata and hashes.
"Cargo.nix",
# Generated by `make crds`. Most of the content is Kubernetes' own schema
# documentation, which is not ours to correct, and the doc comments we do
# own are already checked at their source in rust/operator-binary/src/crd/.
"extra/crds.yaml",
]

[default]
# typos has no native suppression directive
# (https://github.com/crate-ci/typos/issues/316), so these regexes provide one.
# A marker must sit in a comment: after `#`, `//` or `;` (free text may follow),
# or inside a closed `<!-- -->`, `/* */` or `{# #}` (free text may precede the
# closer). An unterminated `typos:off` suppresses nothing.
extend-ignore-re = [
'(?Rm)^.*?(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:ignore-line\b.*|(?:<!--[ \t]*typos:ignore-line\b.*?-->|/\*[ \t]*typos:ignore-line\b.*?\*/|\{#[ \t]*typos:ignore-line\b.*?#\})[ \t]*)$',
'(?Rm)^[ \t]*(?:(?:#|//|;)[ \t]*typos:ignore-next-line\b.*|(?:<!--[ \t]*typos:ignore-next-line\b.*?-->|/\*[ \t]*typos:ignore-next-line\b.*?\*/|\{#[ \t]*typos:ignore-next-line\b.*?#\})[ \t]*)\r?\n.*$',
'(?ms)(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:off\b|<!--[ \t]*typos:off\b[^\n]*?-->|/\*[ \t]*typos:off\b[^\n]*?\*/|\{#[ \t]*typos:off\b[^\n]*?#\}).*?(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:on\b|<!--[ \t]*typos:on\b[^\n]*?-->|/\*[ \t]*typos:on\b[^\n]*?\*/|\{#[ \t]*typos:on\b[^\n]*?#\})',
]

[default.extend-words]
# Azure Kubernetes Service
aks = "aks"
```

### Conventions

- Every entry in a `typos.toml` gets a one-line comment saying what the word is.

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

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

Already mentioned above, but fine to mention it again outside of the config file.

- Prefer an in-place marker over a config entry when the word is correct at one site and would still be a typo elsewhere

## Making changes to the template

If you want to make a change that should be rolled out to all operators, make the change in the `template` directory.
Expand Down
13 changes: 13 additions & 0 deletions template/.pre-commit-config.yaml.j2
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,19 @@ default_language_version:
node: system

repos:
# The word lists live in a per-repo `typos.toml`, which is not templated.
# typos has no layered configuration (https://github.com/crate-ci/typos/issues/193).
# A templated config can currently not be extended locally.
- repo: https://github.com/crate-ci/typos
rev: 00f422f3b19c57bc6338715ebfe3316d38768461 # v1.50.3
hooks:
- id: typos
# Drop the upstream default `--write-changes` so the hook only
# reports failures instead of writing changes.
# Keep `--force-exclude` so the excludes in typos.toml still
# apply to the paths prek passes in.
args: ["--force-exclude"]

- repo: https://github.com/pre-commit/pre-commit-hooks
rev: 3e8a8703264a2f4a69428a0aa4dcb512790b2c8c # 6.0.0
hooks:
Expand Down
37 changes: 37 additions & 0 deletions typos.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Configuration for typos (https://github.com/crate-ci/typos), run via the prek
# hook in .pre-commit-config.yaml.
#
# Before adding an entry here, consider an in-place marker instead. Use one when
# the word is correct at this one site and would still be a typo elsewhere:
#
# # typos:ignore-line at the end of the line it applies to
# # typos:ignore-next-line on its own line, above the offending line
# # typos:off / typos:on around a block
#
# Every entry below gets a one-line comment saying what the word is.

[files]
# Bare `typos` skips hidden dirs by default, but prek passes explicit paths and
# so does check them. Turn it off so both agree.
ignore-hidden = false

extend-exclude = [
# `.git` itself, which ignore-hidden = false would otherwise pull in.
".git/",
]

[default]
# typos has no native suppression directive
# (https://github.com/crate-ci/typos/issues/316), so these regexes provide one.
# A marker must sit in a comment: after `#`, `//` or `;` (free text may follow),
# or inside a closed `<!-- -->`, `/* */` or `{# #}` (free text may precede the
# closer). An unterminated `typos:off` suppresses nothing.
extend-ignore-re = [
'(?Rm)^.*?(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:ignore-line\b.*|(?:<!--[ \t]*typos:ignore-line\b.*?-->|/\*[ \t]*typos:ignore-line\b.*?\*/|\{#[ \t]*typos:ignore-line\b.*?#\})[ \t]*)$',
'(?Rm)^[ \t]*(?:(?:#|//|;)[ \t]*typos:ignore-next-line\b.*|(?:<!--[ \t]*typos:ignore-next-line\b.*?-->|/\*[ \t]*typos:ignore-next-line\b.*?\*/|\{#[ \t]*typos:ignore-next-line\b.*?#\})[ \t]*)\r?\n.*$',
'(?ms)(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:off\b|<!--[ \t]*typos:off\b[^\n]*?-->|/\*[ \t]*typos:off\b[^\n]*?\*/|\{#[ \t]*typos:off\b[^\n]*?#\}).*?(?:(?:^|[^{])(?:#|//|;)[ \t]*typos:on\b|<!--[ \t]*typos:on\b[^\n]*?-->|/\*[ \t]*typos:on\b[^\n]*?\*/|\{#[ \t]*typos:on\b[^\n]*?#\})',
]

[default.extend-words]
# Azure Kubernetes Service
aks = "aks"
Loading