name: repo-sanity on: pull_request: push: branches: - main - codex - opencode jobs: repo-sanity: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Check tracked top-level docs for obvious machine-specific paths run: | set -euo pipefail python3 - <<'PY' import re import subprocess import sys from pathlib import Path tracked = subprocess.check_output(['git', 'ls-files'], text=True).splitlines() allowed = { 'README.md', 'README.zh-CN.md', 'README.ja-JP.md', 'CLAUDE.md', 'CLAUDE.zh-CN.md', 'CLAUDE.ja-JP.md', 'AGENTS.md', 'MCP_SETUP.md', 'MCP_SETUP.zh-CN.md', 'MCP_SETUP.ja-JP.md', 'OBSIDIAN_SETUP.md', 'OBSIDIAN_SETUP.zh-CN.md', 'OBSIDIAN_SETUP.ja-JP.md', 'settings.json.template', '.github/PULL_REQUEST_TEMPLATE.md', '.github/ISSUE_TEMPLATE/bug_report.yml', '.github/ISSUE_TEMPLATE/workflow_gap.yml', '.github/ISSUE_TEMPLATE/docs_problem.yml', '.github/ISSUE_TEMPLATE/config.yml', } pattern = re.compile(r'/Users/[A-Za-z0-9_.-]+|/home/[A-Za-z0-9_.-]+|[A-Za-z]:\\Users\\[A-Za-z0-9_. -]+') bad = [] for rel in tracked: if rel not in allowed: continue try: text = Path(rel).read_text(encoding='utf-8') except Exception: continue if pattern.search(text): bad.append(rel) if bad: print('Found machine-specific paths in:') for rel in bad: print(rel) sys.exit(1) PY - name: Check tracked junk files run: | set -euo pipefail if git ls-files | rg '(^|/)(\.DS_Store|Thumbs\.db|desktop\.ini)$'; then echo "Tracked junk files detected." exit 1 fi