postmortem/README.md
2026-07-21 14:52:07 +03:00

159 lines
No EOL
6.3 KiB
Markdown
Executable file
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 🔥 Postmortem
Интерактивная CLI-утилита для создания документов разбора инцидентов (post mortem) в формате Markdown. Проводит через все секции шаг за шагом: где нужно — предлагает выбор из вариантов, где нужно — свободный ввод.
---
## Возможности
- Интерактивный пошаговый ввод с цветным выводом в терминале
- Выбор из вариантов для фиксированных полей (статус, severity, SLA)
- Ввод в цикле для списков: хронология, «5 Почему», action items, факторы
- Автоматическое имя файла на основе названия инцидента и текущей даты
- Открытие готового файла в системном редакторе (`$EDITOR`)
- Нет внешних зависимостей — только стандартная библиотека Go
---
## Структура проекта
```
postmortem/
├── go.mod — модуль Go (без внешних зависимостей)
├── main.go — точка входа, сохранение файла, открытие редактора
├── model.go — структуры данных (PostMortem, ActionItem, и др.)
├── ui.go — цвета, ввод, выбор из меню, коллекторы списков
├── collect.go — обход всех секций, формирует структуру PostMortem
└── render.go — рендер Markdown из структуры PostMortem
```
---
## Установка и сборка
**Требования:** Go 1.18 или новее.
```bash
# Клонируйте или скопируйте файлы проекта, затем:
cd postmortem
go build -o postmortem .
```
Кросс-компиляция под другие платформы:
```bash
# macOS (Intel)
GOOS=darwin GOARCH=amd64 go build -o postmortem_macos .
# macOS (Apple Silicon)
GOOS=darwin GOARCH=arm64 go build -o postmortem_macos_arm .
# Windows
GOOS=windows GOARCH=amd64 go build -o postmortem.exe .
# Linux
GOOS=linux GOARCH=amd64 go build -o postmortem_linux .
```
---
## Использование
```bash
./postmortem
```
Утилита последовательно проведёт через все секции документа:
```
╔══════════════════════════════════════════════╗
║ 🔥 Post Mortem v1.0 ║
╚══════════════════════════════════════════════╝
Blameless post mortem — цель: улучшить систему
────────────────────────────────────────────────────────────
📋 Основная информация
────────────────────────────────────────────────────────────
→ Название инцидента: Падение API авторизации
▸ Статус документа:
[1] 🟡 Draft
[2] 🔵 In Review
[3] 🟢 Resolved
→ Выберите (1-3): 1
✔ 🟡 Draft
...
```
По завершении утилита предложит имя файла (по умолчанию генерируется автоматически) и откроет его в редакторе.
---
## Секции документа
| Секция | Тип ввода |
|--------|-----------|
| Основная информация | Текст + выбор из меню |
| Краткое резюме | Свободный текст |
| Влияние (Impact) | Текст + выбор из меню |
| Хронология | Цикл: время + описание |
| Корневая причина | Текст + анализ «5 Почему» |
| Сопутствующие факторы | Цикл: список строк |
| Что сработало хорошо | Цикл: список строк |
| Что можно улучшить | Цикл: список строк |
| Action Items | Цикл: задача + ответственный + дедлайн |
| Ссылки | Текст (опционально) |
---
## Пример результата
Утилита генерирует файл вида `postmortem_2024-03-12_падение_api.md`:
```markdown
# 🔥 Post Mortem: Падение API авторизации
> **Статус:** 🟡 Draft
> **Severity:** SEV-1 (критический)
> **Дата инцидента:** 12.03.2024
> **Автор:** @ivan
---
## 💥 Влияние (Impact)
| Параметр | Значение |
|----------|----------|
| Длительность | 2ч 33мин |
| Затронутые пользователи | ~5000 / 100% трафика |
...
## 📌 Action Items
| # | Задача | Ответственный | Дедлайн | Статус |
|---|--------|---------------|---------|--------|
| 1 | Добавить валидацию конфигов в CI | @ivan | 01.04 | 🔲 Открыта |
```
---
## Редактор по умолчанию
Утилита открывает файл через переменную окружения `$EDITOR`. Если она не задана, используется:
- **Linux:** `nano``vim``vi` (первый найденный)
- **macOS:** `open`
- **Windows:** `notepad`
Чтобы задать редактор явно:
```bash
EDITOR=code ./postmortem # VS Code
EDITOR=nvim ./postmortem # Neovim
```
---
## Принципы
Утилита построена на концепции **blameless post mortem**: цель разбора инцидента — улучшить систему и процессы, а не найти виноватого. Подробнее о методологии читайте в сопроводительном шаблоне `postmortem_template.md`.