All formulae were failing to download because the archive URL pointed to the old Gitea port (3002). Updated to port 8085 and computed the correct sha256 hash for the archive. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
53 lines
2.7 KiB
Markdown
53 lines
2.7 KiB
Markdown
# CLAUDE.md
|
|
|
|
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
|
|
## What This Is
|
|
|
|
A Homebrew tap for custom fonts. Users `brew tap` and then `brew install font-<name>`. The repo contains font assets in `font_files/` and generated Ruby formulae in `Formula/`.
|
|
|
|
## Commands
|
|
|
|
```bash
|
|
# Add or update a font (cleanup + formula generation + tests + brew audit)
|
|
uv run add-font <path_or_name>
|
|
uv run add-font <path_or_name> --no-test --no-audit
|
|
|
|
# Run tests
|
|
uv run pytest tests/ -v --tb=short
|
|
|
|
# Run a single test file
|
|
uv run pytest tests/test_font_structure.py -v
|
|
|
|
# Run tests for a specific font
|
|
uv run pytest tests/ -v -k "font-acrylic-hand"
|
|
|
|
# Regenerate all formulae (without the full add-font flow)
|
|
python3 .fontfoldercleanup/create_homebrew_formula.py
|
|
|
|
# Reorganize font folders only
|
|
python3 .fontfoldercleanup/cleanup_font_folders.py --path font_files
|
|
```
|
|
|
|
## Architecture
|
|
|
|
- **`font_files/font-<name>/`** — Each font has exactly 4 subdirs: `ttf/`, `otf/`, `web/`, `other_files/`. No other top-level files allowed.
|
|
- **`Formula/font-<name>.rb`** — Generated Ruby formulae. **Never edit by hand.** Edits go in `.fontfoldercleanup/create_homebrew_formula.py`.
|
|
- **`tap_cli/main.py`** — The `add-font` CLI entry point. Copies font to `font_files/`, runs cleanup script, runs formula generator, then runs tests and `brew audit`.
|
|
- **`.fontfoldercleanup/cleanup_font_folders.py`** — Sorts loose font files into `ttf/`, `otf/`, `web/`, `other_files/` subdirs.
|
|
- **`.fontfoldercleanup/create_homebrew_formula.py`** — Scans `font_files/font-*` and writes one `.rb` per font. Contains `HomebrewFormulaGenerator` class and `formula_name_to_class()` for Ruby PascalCase conversion.
|
|
- **`tests/`** — Parametrized pytest suite. Tests validate: folder structure, formula existence, formula content (paths, class name), no orphan formulae, no duplicates.
|
|
- **`To Sort/`** — Staging area for new downloads not yet processed.
|
|
|
|
## Formula Naming Convention
|
|
|
|
`font-<name>` → Ruby class `Font<PascalCase>`. Split on hyphens/underscores, capitalize each part:
|
|
- `font-acrylic-hand` → `FontAcrylicHand`
|
|
- `font-graham_hand` → `FontGrahamHand`
|
|
|
|
## Key Constraints
|
|
|
|
- Python 3, standard library only (pathlib, shutil, argparse, re). pytest is the sole dependency.
|
|
- Formulae download from `http://clancy.genet-godzilla.ts.net:8085/Fonts/homebrew-fonts/archive/main.tar.gz` and expect the archive to unpack as `homebrew-fonts-main/`.
|
|
- CI runs `uv run pytest` on push/PR to main, plus `brew audit` on macOS (non-blocking).
|
|
- `PROJECT.md` is the canonical project description. When updating project rules, update `PROJECT.md` first, then sync `.cursorrules`, `.github/copilot-instructions.md`, and `.claude/skills/project-context/SKILL.md`.
|