Move catalog indexes to Markdown front matter

This commit is contained in:
2026-08-22 12:42:11 +03:00
parent 188d9f2b18
commit aa8deee35a
65 changed files with 819 additions and 707 deletions
+40 -24
View File
@@ -6,32 +6,42 @@
## Структура
- Все категории и программы находятся внутри корневой папки `catalog`.
`catalog/index.yaml` описывает корневую категорию.
`catalog/index.md` описывает корневую категорию.
- `catalog/files.yaml` содержит размеры и SHA-256 всех файлов программ. Он
создаётся командой `pnpm fill-metadata` и вручную не редактируется.
- Каждая категория и каждая программа внутри `catalog` находятся в собственной
папке и содержат ровно один файл `index.yaml`.
папке и содержат ровно один файл `index.md`.
- Вложенность категорий не ограничена. Дочерние категории и программы
определяются по файловой структуре и не перечисляются в индексе категории.
- Имя папки — стабильный идентификатор. Используй строчные латинские буквы,
цифры, дефис и подчёркивание.
- В папке программы все загружаемые файлы находятся в `files`, а скриншоты — в
`img`.
- Не создавай отдельные YAML-файлы или папки метаданных для версий. Все версии
описываются в `versions` единственного `index.yaml` программы.
- Папки без `index.yaml`, например `schema`, `files` и `img`, не являются
- Не создавай отдельные файлы или папки метаданных для версий. Все версии
описываются в `versions` YAML Front Matter единственного `index.md` программы.
- Папки без `index.md`, например `schema`, `files` и `img`, не являются
категориями.
## Формат index.md
Каждый `index.md` состоит из YAML Front Matter между строками `---` и
обязательного Markdown-тела. Front Matter содержит только метаданные, а тело —
описание категории или программы. Поле `description` в Front Matter не
используй.
## YAML категории
Используй только следующие обязательные поля и сохраняй их порядок:
Используй следующие поля Front Matter и сохраняй их порядок:
```yaml
```md
---
format: 1
type: category
name: Русское название категории
order: -10
description: Описание категории на русском языке.
---
Описание категории на русском языке.
```
`order` — необязательное целое число для сортировки соседних категорий. Меньшее
@@ -46,16 +56,19 @@ description: Описание категории на русском языке.
2. `type: program` — обязательное поле.
3. `name` — обязательное официальное название программы.
4. `summary` — обязательное короткое описание программы на русском языке.
5. `description` — обязательное подробное описание на русском языке в формате
Markdown.
6. `homepage` — необязательный URL домашней страницы.
7. `source` — необязательный URL исходного кода.
8. `forum`необязательный URL темы программы на форуме.
9. `author` — необязательное имя автора или название организации-разработчика.
10. `screenshots` — обязательный массив путей; используй `[]`, если изображений
5. `homepage`необязательный URL домашней страницы.
6. `source` — необязательный URL исходного кода.
7. `forum` — необязательный URL темы программы на форуме.
8. `author` — необязательное имя автора или название организации-разработчика.
9. `screenshots` — обязательный массив путей; используй `[]`, если изображений
нет.
11. `versions` — обязательный непустой массив версий.
12. `additional_files` — необязательный массив файлов, не привязанных к версии.
10. `versions` — обязательный непустой массив версий.
11. `additional_files` — необязательный массив файлов, не привязанных к версии.
После закрывающей строки `---` размести обязательное подробное описание
программы на русском языке в обычном Markdown. Не добавляй в тело заголовок с
названием программы: `name` уже содержит название, а генератор сам создаёт
заголовок страницы.
Новые версии добавляй в начало `versions`, от новых к старым. Каждая версия
имеет такой вид:
@@ -100,7 +113,8 @@ SHA-256 не добавляй в индекс программы: они хра
чего она нужна и с какими телефонами или форматами работает. Опирайся на полное
описание и технический смысл программы, а не на единый шаблон. Не используй
оценочные усилители вроде «комплексная», «универсальная», «мощная» или
«полноценная».
«полноценная». Храни `summary` во Front Matter и не вычисляй его автоматически
из первого абзаца Markdown-тела.
Файлы, которые подходят ко всем версиям или существуют отдельно от релиза,
помещай в `additional_files`, а не внутрь случайной версии:
@@ -121,10 +135,9 @@ additional_files:
явные опечатки и очевидные грамматические ошибки.
- Сохраняй полноту исходного описания. Не сокращай перечень возможностей до
общего пересказа и не удаляй значимые технические подробности.
- Содержимое каждого `description` интерпретируется как Markdown. Для длинного
описания со списком используй литеральный блок `|-` и Markdown-списки; для
обычного абзаца, перенесённого на несколько строк, используй `>-`. Не вставляй
HTML-разметку.
- Основное описание находится в Markdown-теле `index.md`; пиши его как обычный
Markdown без YAML-отступов и литеральных блоков. Поля `description` версий и
файлов остаются обычными строками YAML. Не вставляй HTML-разметку.
- Каждый пункт Markdown-списка начинай с заглавной буквы.
- Не выдумывай даты, ссылки, возможности или платформы. Неизвестное
необязательное поле лучше не добавлять.
@@ -150,7 +163,7 @@ additional_files:
имена, содержимое и время изменения файлов. По умолчанию исходник остаётся;
`--replace` используй только когда его нужно удалить после успешной проверки.
Для другого пути назначения используй `--output <путь>`.
- После перепаковки замени путь в `index.yaml` и выполни
- После перепаковки замени путь в `index.md` и выполни
`pnpm fill-metadata`, чтобы обновить `catalog/files.yaml`.
- Архивы должны проходить через Git LFS согласно `.gitattributes`. Остальные
файлы хранятся в обычном Git.
@@ -159,6 +172,8 @@ additional_files:
- Кодировка — UTF-8, окончания строк — LF, отступ — два пробела, табуляция
запрещена.
- Максимальная длина строки во Front Matter — 140 символов. Короткое строковое
значение, включая `summary`, не переноси, если оно помещается в этот лимит.
- Версии и даты всегда заключай в двойные кавычки.
- Дата имеет формат `YYYY-MM-DD`.
- Не используй YAML-теги, anchors, aliases и merge keys.
@@ -168,7 +183,8 @@ additional_files:
Перед завершением изменения:
1. Проверь синтаксис всех затронутых `index.yaml` безопасным YAML-парсером.
1. Проверь YAML Front Matter всех затронутых `index.md` безопасным YAML-парсером
и убедись, что Markdown-тело не пустое.
2. Проверь их по `schema/index.schema.json` валидатором JSON Schema Draft 2020-12,
если он доступен.
3. Выполни `pnpm fill-metadata`, затем `pnpm fill-metadata:check`. Команда