Кастомные шаблоны: workflow¶
Built-in шаблоны srekit — это разумные defaults, но любой команде рано или поздно хочется их доработать: принять внутреннюю терминологию, добавить специфичную секцию или убрать ненужную. Workflow кастомных шаблонов даёт это сделать, не теряя возможности забирать upstream-изменения из будущих релизов srekit.
Начни с готового репозитория
jtprogru/sre-templates — публичный репозиторий шаблонов ровно в той раскладке, что описана ниже. Склонируй его вместо скаффолда с нуля или форкни под свой remote:
git clone https://github.com/jtprogru/sre-templates ~/.srekit/templates
echo 'templates_dir: ~/.srekit/templates' >> ~/.srekit.yaml
Дальше srekit templates pull держит его в синхроне с remote, а srekit templates upgrade вмёрживает новый embedded-контент из будущих бинарей.
Как это устроено¶
embedded (в бинаре srekit, обновляется с
↓ каждым релизом)
↓
.srekit-embedded/ (снапшот embedded на момент
↓ последнего init/upgrade)
↓
<твоя templates dir>/ (твои живые кастомизированные файлы;
под твоим git-remote)
Скрытая директория .srekit-embedded/ внутри твоей templates dir хранит byte-exact копию того, что был embedded в последний sync. Это merge-base, который позволяет templates upgrade делать настоящий 3-way merge — не затаптывая твои правки и не отказываясь их трогать.
Шаг за шагом¶
1. Скаффолд¶
srekit templates init ~/.srekit/templates
# Templates scaffolded in /Users/you/.srekit/templates (11 .yaml + TEMPLATES.md)
#
# Next steps — connect a remote (SSH recommended) and push:
# cd /Users/you/.srekit/templates
# git remote add origin git@github.com:<owner>/<repo>.git
# git add . && git commit -m 'initial templates'
# git push -u origin main
#
# Then point srekit at this directory:
# echo 'templates_dir: /Users/you/.srekit/templates' >> ~/.srekit.yaml
# # or: export SREKIT_TEMPLATES_DIR=/Users/you/.srekit/templates
Несколько деталей:
templates initпо умолчанию делаетgit init(--no-gitчтобы пропустить).- Создаёт служебную директорию
.srekit-embedded/(снапшот embedded на момент init) и дописывает её в.gitignore, чтобы она никогда не попала в team-репо шаблонов. - Без явного
[dir]резолвит--templates-dir/SREKIT_TEMPLATES_DIR/templates_dir:в yaml; fallback~/.srekit/templates.
2. Подключить¶
srekit config init # задаёт author, email, templates_dir
# или вручную:
echo 'templates_dir: ~/.srekit/templates' >> ~/.srekit.yaml
3. Кастомизировать¶
cd ~/.srekit/templates
$EDITOR runbook.yaml # правишь v1-артефакт: добавляешь секцию, тюнишь meta_bullets, etc.
git commit -am "runbook: add 'communications' section"
Всё что ты меняешь — твоё. Embedded fallback срабатывает только для файлов, которых у тебя нет (например, новый шаблон, добавленный в будущем бинаре, которого у тебя в dir ещё нет). Схема v1-артефакта (frontmatter / title / meta_bullets / header_body / sections) описана в postmortem reference.
4. Провалидировать¶
Перед push'ем правок убедись, что шаблоны рендерятся:
Каждый .yaml-артефакт парсится через sections.ParseArtifact — ловит структурные ошибки (неизвестные типы секций, дублирующиеся ID, пропущенные обязательные поля). Bespoke .tmpl-файлы в твоей dir получают parse-only валидацию (field-shape check невозможен без sample-data registry).
5. Push в team-remote¶
Другие инженеры команды ставят templates_dir: на свежий клон того же remote.
6. Pull team-изменений¶
Когда коллега запушил тюнинг:
srekit templates pull # git pull --ff-only на твою templates dir
srekit templates pull --rebase # если есть локальные коммиты для rebase
7. Подтянуть новый бинарь srekit¶
Когда brew upgrade srekit (или go install ...@latest) и новый бинарь несёт изменения шаблонов:
srekit templates list # что изменилось
srekit templates diff # полный unified diff vs embedded
srekit templates upgrade # 3-way merge новых embedded в твою dir
Поведение upgrade:
Состояние файла task.yaml |
Результат |
|---|---|
| Отсутствует в твоей dir | Скопирован (новый шаблон в бинаре) |
| Идентичен embedded | Skip; снапшот обновлён |
| Ты правил, embedded без изменений | Silent no-op |
| Ты не трогал, embedded изменился | Fast-forward к новому embedded |
| Оба изменены (не пересекаясь) | Clean 3-way merge |
| Оба изменены (пересекаясь) | Маркеры конфликта + non-zero exit |
На конфликте разрешаешь <<<<<<< маркеры как обычный merge, commit, push. Снапшот уже в новом embedded — следующий templates upgrade считает твоё разрешение новой базой.
Сценарии восстановления¶
"Я наскаффолдил не туда"¶
Часто бывает, когда поставил templates_dir: но забыл передать соответствующий arg в templates init. Просто повтори:
"Я снёс директорию .srekit-embedded/"¶
Может, удалил dir или восстановил из бэкапа без скрытых директорий. Не беда:
srekit templates upgrade
# все твои отредактированные файлы возвращаются как "skipped: no merge base"
# но snapshot теперь засеян — *следующий* upgrade сделает 3-way
"Хочу чистый старт"¶
Зачем нужен templates init --no-git¶
Если держишь шаблоны внутри родительского репо (например в infra-репо по пути infra/sre-templates/), git init внутри этой поддиректории создаст nested-репо. Передай --no-git:
srekit templates init ./infra/sre-templates --no-git
git -C infra add sre-templates && git -C infra commit -m "vendor srekit templates"
templates pull тогда становится "cd infra && git pull" — srekit pull не знает про родительский репо, так что просто запускай обычный git.
См. также¶
jtprogru/sre-templates— готовый репозиторий шаблонов, который можно склонировать или форкнуть.srekit templates— полный reference по подкомандам.- Конфигурация — как
templates_dir:резолвится через флаги / env / yaml.