* refactor(ci): shift quality checks to pre-commit, CI as 2nd pass
- Remove ci.yml (lint, security, pytest were only for EPUB scripts)
- Move EPUB build to pre-commit local hook (runs on .md changes)
- Add check_cross_references.py, check_mermaid.py, check_links.py scripts
- Add markdown-lint, cross-references, mermaid-syntax, link-check as
pre-commit hooks — mirrors all 4 CI doc-check jobs locally
- Remove spell check job from docs-check.yml (breaks on translations)
- Refactor docs-check.yml to reuse scripts/ instead of inline Python
- Add .markdownlint.json config shared by pre-commit and CI
- Update CONTRIBUTING.md with required dependencies and hook table
* fix(ci): resolve all CI check failures in docs-check workflow
- fix(check_cross_references): skip code blocks and inline code spans
to avoid false positives from documentation examples; fix emoji
heading anchor generation (rstrip not strip); add blog-posts,
openspec, prompts, .agents to IGNORE_DIRS; ignore README.backup.md
- fix(check_links): strip trailing Markdown punctuation from captured
URLs; add wikipedia, api.github.com to SKIP_DOMAINS; add placeholder
URL patterns to SKIP_URL_PATTERNS; add .agents/.claude to IGNORE_DIRS
- fix(check_mermaid): add --no-sandbox puppeteer config support via
MERMAID_PUPPETEER_NO_SANDBOX env var for GitHub Actions Linux runners
- fix(docs-check.yml): pass MERMAID_PUPPETEER_NO_SANDBOX=true to mermaid job
- fix(content): repair broken anchors in README.md, 09-advanced-features;
fix #plugins -> #claude-code-plugins in claude_concepts_guide.md;
remove non-existent ./docs/performance.md placeholder links; fix
dependabot alerts URL in SECURITY_REPORTING.md; update auto-mode URL
in resources.md; use placeholder pattern for 07-plugins example URL
- remove README.backup.md (stale file)
* fix(check-scripts): fix strip_code_blocks regex and URL fragment handling
- fix regex in strip_code_blocks to avoid conflicting MULTILINE+DOTALL
flags that could fail to strip indented code fences; use DOTALL only
- strip URL fragments (#section) before dispatching link checks to avoid
false-positive 404s on valid URLs with anchor fragments
* fix(check-scripts): fix anchor stripping, cross-ref enforcement, and mermaid temp file cleanup
- heading_to_anchor: use .strip("-") instead of .rstrip("-") to also strip leading hyphens
produced by emoji-prefixed headings, preventing false-positive anchor errors
- check_cross_references: always exit with main()'s return code — filesystem checks
should block pre-commit unconditionally, not silently pass on errors
- check_mermaid: wrap file-processing loop in try/finally so the puppeteer config
temp file is cleaned up even if an unexpected exception (e.g. UnicodeDecodeError) occurs
- docs-check.yml: remove now-unused CROSS_REF_STRICT env var
* fix(scripts): fix anchor stripping and mermaid output path
- Replace .strip('-') with .rstrip('-') in heading_to_anchor() so leading
hyphens from emoji-prefixed headings are preserved, matching GitHub's
anchor generation behaviour.
- Use Path.with_suffix('.svg') in check_mermaid.py instead of
str.replace('.mmd', '.svg') to avoid replacing all occurrences of .mmd
in the full temp path.
94 lines
2.6 KiB
YAML
94 lines
2.6 KiB
YAML
# Pre-commit hooks for claude-howto project
|
|
# Run `pre-commit install` to set up hooks
|
|
# Run `pre-commit run --all-files` to check all files
|
|
|
|
default_language_version:
|
|
python: python3.11
|
|
|
|
repos:
|
|
# Ruff - Fast Python linter and formatter
|
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
rev: v0.8.2
|
|
hooks:
|
|
- id: ruff
|
|
name: ruff-lint
|
|
args: [--fix, --exit-non-zero-on-fix]
|
|
types_or: [python, pyi]
|
|
files: ^scripts/
|
|
- id: ruff-format
|
|
name: ruff-format
|
|
types_or: [python, pyi]
|
|
files: ^scripts/
|
|
|
|
# Bandit - Security linter
|
|
- repo: https://github.com/PyCQA/bandit
|
|
rev: 1.7.10
|
|
hooks:
|
|
- id: bandit
|
|
name: bandit-security
|
|
args: [-c, scripts/pyproject.toml]
|
|
additional_dependencies: ["bandit[toml]"]
|
|
types: [python]
|
|
files: ^scripts/
|
|
exclude: ^scripts/tests/
|
|
|
|
# Standard pre-commit hooks
|
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
rev: v5.0.0
|
|
hooks:
|
|
- id: check-yaml
|
|
name: check-yaml
|
|
args: [--allow-multiple-documents]
|
|
- id: check-toml
|
|
name: check-toml
|
|
- id: end-of-file-fixer
|
|
name: fix-end-of-file
|
|
- id: trailing-whitespace
|
|
name: fix-trailing-whitespace
|
|
- id: check-added-large-files
|
|
name: check-large-files
|
|
args: [--maxkb=1000]
|
|
- id: check-merge-conflict
|
|
name: check-merge-conflict
|
|
|
|
# Local doc quality hooks (mirrors CI checks — CI is a 2nd pass of these)
|
|
- repo: local
|
|
hooks:
|
|
- id: markdown-lint
|
|
name: markdown-lint
|
|
language: node
|
|
entry: markdownlint
|
|
args: ['--ignore', 'node_modules', '--ignore', '.venv', '--config', '.markdownlint.json']
|
|
types: [markdown]
|
|
additional_dependencies: ['markdownlint-cli']
|
|
|
|
- id: cross-references
|
|
name: cross-references
|
|
language: system
|
|
entry: python scripts/check_cross_references.py
|
|
pass_filenames: false
|
|
types: [markdown]
|
|
|
|
- id: mermaid
|
|
name: mermaid-syntax
|
|
language: system
|
|
entry: python scripts/check_mermaid.py
|
|
pass_filenames: false
|
|
types: [markdown]
|
|
verbose: true
|
|
|
|
- id: link-check
|
|
name: link-check
|
|
language: system
|
|
entry: python scripts/check_links.py
|
|
pass_filenames: false
|
|
types: [markdown]
|
|
verbose: true
|
|
|
|
- id: build-epub
|
|
name: build-epub
|
|
language: system
|
|
entry: uv run scripts/build_epub.py
|
|
pass_filenames: false
|
|
files: ^(.*\.md|scripts/build_epub\.py)$
|