@@ -0,0 +1,42 @@ |
| | 1 | +#!/usr/bin/env bash |
| | 2 | +# SPDX-License-Identifier: AGPL-3.0-or-later |
| | 3 | +# |
| | 4 | +# Fail when goldmark or bluemonday is imported outside the canonical |
| | 5 | +# internal/markdown/ package. After S25, every markdown render must |
| | 6 | +# flow through markdown.Render() so the sanitizer policy and pipeline |
| | 7 | +# version stay coherent. |
| | 8 | +# |
| | 9 | +# Allowed locations: |
| | 10 | +# internal/markdown/... — owns Goldmark + bluemonday |
| | 11 | +# *_test.go everywhere — tests may exercise rendering directly |
| | 12 | +# |
| | 13 | +# Anything else triggers the alarm. The fix is to swap the import to |
| | 14 | +# `github.com/tenseleyFlow/shithub/internal/markdown` and call |
| | 15 | +# `markdown.RenderHTML` (back-compat) or `markdown.Render` (new). |
| | 16 | +# |
| | 17 | +# Exits 0 when no violations are found, 1 otherwise. Run from `make ci`. |
| | 18 | + |
| | 19 | +set -euo pipefail |
| | 20 | + |
| | 21 | +cd "$(git rev-parse --show-toplevel)" |
| | 22 | + |
| | 23 | +# Build a regex of forbidden imports. Matches both the bare import |
| | 24 | +# path and any aliased form. |
| | 25 | +FORBIDDEN='github\.com/(yuin/goldmark|microcosm-cc/bluemonday)' |
| | 26 | + |
| | 27 | +# git grep is faster than find+grep; --null lets us safely handle |
| | 28 | +# unusual paths (we don't have any, but cheap insurance). |
| | 29 | +violations=$(git grep -lE "\"$FORBIDDEN" -- '*.go' 2>/dev/null \ |
| | 30 | + | grep -v -e '_test\.go$' \ |
| | 31 | + | grep -v -e '^internal/markdown/' \ |
| | 32 | + || true) |
| | 33 | + |
| | 34 | +if [[ -n "$violations" ]]; then |
| | 35 | + echo "lint-markdown-boundary: forbidden goldmark/bluemonday import outside internal/markdown/:" >&2 |
| | 36 | + echo "$violations" | sed 's/^/ /' >&2 |
| | 37 | + echo "" >&2 |
| | 38 | + echo "Fix: import 'github.com/tenseleyFlow/shithub/internal/markdown' and call markdown.Render or markdown.RenderHTML." >&2 |
| | 39 | + exit 1 |
| | 40 | +fi |
| | 41 | + |
| | 42 | +echo "lint-markdown-boundary: ok" |