Утилита для парсинга и анализа комментариев QA-команды в JIRA тикетах. Извлекает структурированную информацию из комментариев о тестировании и предоставляет удобный интерфейс для работы с результатами.
- 📊 Парсинг комментариев QA - автоматическое извлечение информации о версии, результате тестирования и комментариев
- 📧 Отображение email-адресов - показ email-адресов назначенного (Assignee), QA владельца и авторов комментариев
- 🎯 Поддержка различных форматов - обработка комментариев с форматированием (жирный, курсив, цвет) и ссылками
- 🔍 Гибкий поиск - фильтрация комментариев по типу результата (Fixed, Not Fixed, Partially Fixed, Could not test, Blocked, etc.)
- 📝 Чистая архитектура - проект построен с соблюдением принципов чистой архитектуры для легкого поддержания и расширения
- 🔐 Поддержка различных методов аутентификации - Basic Auth, Bearer Token и Personal Access Token
- 📤 Экспорт в JSON и HTML - возможность экспорта данных в форматах JSON и HTML для интеграции с другими системами
- 🐛 Обработка ошибок и логирование - надежная обработка ошибок и детализированное логирование
- 🔄 Поддержка разных форматов JIRA-разметки - обработка код-блоков, цитат, панелей и других элементов форматирования
- ⚙️ Настраиваемые паттерны парсинга - возможность настройки паттернов для поиска версий, результатов и комментариев
- 📚 Автоматическая генерация документации - генерация документации в различных форматах (markdown, man, yaml и др.)
- 🎓 Интерактивный режим обучения - пошаговое обучение для новых пользователей
git clone https://github.com/RD2W/jira-parser.git
cd jira-parser
go mod downloadДля сборки приложения с указанием версии:
go build -ldflags "-X main.buildVersion=v1.2.3" -o jira-parser cmd/jira-parser/main.goДля сборки с указанием версии, хеша коммита и даты:
# Вручную
go build -ldflags "-X main.buildVersion=v1.2.3 -X main.buildCommit=$(git rev-parse HEAD) -X main.buildDate=$(date -u +%Y-%m-%dT%H:%M:%SZ)" -o jira-parser cmd/jira-parser/main.go
# Или с использованием переменных
VERSION=$(git describe --tags --abbrev=0 2>/dev/null || echo "dev")
COMMIT=$(git rev-parse HEAD)
DATE=$(date -u +%Y-%m-%dT%H:%M:%SZ)
go build -ldflags "-X main.buildVersion=$VERSION -X main.buildCommit=$COMMIT -X main.buildDate=$DATE" -o jira-parser cmd/jira-parser/main.goДля обычной сборки:
go build -o jira-parser cmd/jira-parser/main.goПриложение поддерживает встроенные переменные версии, которые автоматически отображаются при вызове команды jira-parser version:
buildVersion- версия приложения (например, v1.2.3)buildCommit- хеш Git-коммита, на котором была собрана версияbuildDate- дата и время сборки
Эти значения могут быть заданы во время сборки с помощью флага -ldflags и переменных:
-X main.buildVersion=...-X main.buildCommit=...-X main.buildDate=...
Создайте файл configs/config.yaml:
jira:
base_url: "https://your-domain.atlassian.net"
username: "your-email@example.com" # Для Atlassian Cloud используйте email
token: "your-api-token" # API токен для аутентификации (Personal Access Token)
# Для Basic Auth используйте: token: "basic your-password"
# Для Bearer токена используйте: token: "bearer your-token"
parsing:
version_patterns:
- "(?i)Tested on (?:SW )?(v?[\\d.]+(?:-[\\w.]+)?)"
- "(?i)version.*?(v?[\\d.]+(?:-[\\w.]+)?)"
- "(?i)sw.*?(v?[\\d.]+(?:-[\\w.]+)?)"
result_patterns:
- "(?i)Result:\\s*([^\\n\\r]+)"
- "(?i)Status:\\s*([^\\n\\r]+)"
- "(?i)(Fixed|Not Fixed|Partially Fixed|Could not test|Passed|Failed|Blocked|Resolved|Verified|Re-Test|Pending|In Progress|N/A)"
comment_patterns:
- "(?i)Comment:\\s*(.+)"
- "(?i)Notes?:\\s*(.+)"
- "(?i)Observations?:\\s*(.+)"
qa_indicators:
- "tested on"
- "could not test on sw"
- "qa comment"
- "qa verification"
- "qa tested"
- "test.*result"
- "test.*passed"
- "test.*failed"
- "test.*status"
result_normalization:
passed: "Fixed"
verified: "Fixed"
resolved: "Fixed"
"re-test": "Fixed"
failed: "Not Fixed"
blocked: "Not Fixed"
pending: "Not Fixed"
"in progress": "Not Fixed"
"n/a": "N/A"
"not applicable": "N/A"Для аутентификации поддерживаются следующие методы:
- Personal Access Token (рекомендуется для Atlassian Cloud): используйте email в качестве username и API токен в поле token
- Basic Auth (для self-hosted JIRA): используйте username и пароль, указав префикс "basic" в поле token
- Bearer Token (для некоторых OAuth-конфигураций): используйте префикс "bearer" в поле token
Также создайте файл configs/tickets.yaml для указания тикетов, которые нужно обработать:
tickets:
- "TOS-30690"
- "TOS-30692"
- "TOS-30693"
- "TOS-2572"- Personal Access Token:
token: "your-api-token" - Basic Auth:
token: "basic your-password" - Bearer Token:
token: "bearer your-token"
При запуске приложения или при создании JIRA-клиента происходит проверка валидности предоставленных учетных данных путем выполнения тестового запроса к JIRA API. Это предотвращает использование недействительных токенов и улучшает безопасность приложения.
Проверяются следующие типы токенов:
- Bearer токены
- Basic токены
- Personal Access Token
При неудачной валидации токена приложение завершает работу с ошибкой, информирующей о проблеме с аутентификацией.
# Генерация документации в формате markdown
./jira-parser docs --format=markdown --output=./docs
# Генерация документации в формате man
./jira-parser docs --format=man --output=./man
# Поддерживаемые форматы: markdown, man, rest, yaml, bash, fish, powershell, zsh
./jira-parser docs --format=markdown --output=./docs# Запуск интерактивного туториала
./jira-parser tutorial# Получить все QA комментарии для задачи
./jira-parser parse TOS-30690
# Получить QA комментарии с фильтрацией по результату
./jira-parser parse TOS-30690 --result="Fixed"
# или с короткой формой
./jira-parser parse TOS-30690 -r "Fixed"
# Получить QA комментарии с фильтрацией по дате создания
./jira-parser parse TOS-30690 --date-from=2023-01-01 --date-to=2023-12-31
# или с короткими формами
./jira-parser parse TOS-30690 -d 2023-01-01 -t 2023-12-31
# Получить QA комментарии с фильтрацией по нескольким критериям
./jira-parser parse TOS-30690 --result="Fixed" --date-from=2023-01-01
# или с короткими формами
./jira-parser parse TOS-30690 -r "Fixed" -d 2023-01-01# Получить только последний QA комментарий для конкретного тикета
./jira-parser last-comment TOS-30690
# Получить последние QA комментарии для нескольких тикетов
./jira-parser last-comment TOS-30690 TOS-30692
# Получить последние QA комментарии для тикетов из указанного YAML-файла
./jira-parser last-comment --tickets-file ./my-tickets.yaml
# или с короткой формой
./jira-parser last-comment -f ./my-tickets.yaml# Получить версию jira-parser
./jira-parser version# Обработать все тикеты, указанные в конфигурационном файле
./jira-parser parse-multiple
# Обработать конкретные тикеты, переданные в качестве аргументов
./jira-parser parse-multiple TOS-30690 TOS-30692 TOS-30693
# Обработать тикеты из указанного YAML-файла
./jira-parser parse-multiple --tickets-file ./my-tickets.yaml
# или с короткой формой
./jira-parser parse-multiple -f ./my-tickets.yaml
# Обработать тикеты с фильтрацией по результату
./jira-parser parse-multiple TOS-30690 TOS-30692 --result="Fixed"
# или с короткой формой
./jira-parser parse-multiple TOS-30690 TOS-30692 -r "Fixed"
# Обработать тикеты с фильтрацией по дате создания
./jira-parser parse-multiple TOS-30690 TOS-30692 --date-from=2023-01-01 --date-to=2023-12-31
# или с короткими формами
./jira-parser parse-multiple TOS-30690 TOS-30692 -d 2023-01-01 -t 2023-12-31# Экспорт всех QA комментариев в JSON
./jira-parser export TOS-30690
# Экспорт с форматированием
./jira-parser export TOS-30690 --pretty
# или с короткой формой
./jira-parser export TOS-30690 -p
# Экспорт в HTML
./jira-parser export TOS-30690 --format html --output-dir ./reports
# или с короткими формами
./jira-parser export TOS-30690 -F html -o ./reports
# Экспорт нескольких тикетов
./jira-parser export TOS-30690 TOS-30692
# Экспорт тикетов из файла
./jira-parser export --tickets-file ./my-tickets.yaml
# или с короткой формой
./jira-parser export -f ./my-tickets.yamlTOS-30344: [Modem On/Off] Replace vendor RIL property
Assigned: i.petrov@example.com
QA Owner: v.sidorov@example.com
Found 4 QA comments:
Comment #1 (2025-07-12 16:35:38) from v.sidorov@example.com:
Version: v1.4.0
Result: Not Fixed
Info: Issue reproduces when clicking button X
Comment #2 (2025-07-18 11:28:56) from v.sidorov@example.com:
Version: v1.4.1
Result: Partially Fixed
Info: The cellular module does not change state upon reboot (remains on or off)
Comment #3 (2025-07-20 17:45:57) from a.markov@example.com:
Version: v1.4.2
Result: Fixed
Comment #4 (2025-08-08 11:30:56) from v.sidorov@example.com:
Version: v1.4.3
Result: Fixed
Tested on SW v1.4.0. Result: Fixed.Tested on TOS-29504 build. Result: Partially Fixed. Comment: [X] works; [Y] brokenCould not test on SW v1.4.0. Comment: Build brokenQA Comment: Tested on v2.0. Result: Passed. Notes: All tests passedTested on v1.1.0. Result: Failed. Comment: Issue still exists
FixedNot FixedPartially FixedCould not testPassed(нормализуется вFixed)Failed(нормализуется вNot Fixed)BlockedIn ProgressN/AVerified(нормализуется вFixed)Resolved(нормализуется вFixed)
Tested on v1.2.3Tested on SW v2.0.0Tested on version 1.5.0Tested on 1.0.0
Comment: текст комментарияNote: текст комментарияNotes: текст комментарияObservation: текст комментарияObservations: текст комментария
- Жирный текст:
*жирный* - Курсив:
_курсив_ - Моноширинный:
??моноширинный??или{{моноширинный}} - Цвет:
{color:red}текст{color} - Ссылки:
[ссылка|http://example.com] - Код-блоки:
{code}код{code} - Цитаты:
{quote}цитата{quote} - Панели:
{panel}панель{panel} - Упоминания:
[~username] - Изображения:
!image.png!
- Go 1.25+
- JIRA REST API
- Cobra CLI
- Viper для конфигурации
- testify для тестирования
Запустить все тесты:
go test ./...Запустить тесты с покрытием:
go test -cover ./...Проект использует чистую архитектуру:
internal/domain: Определение доменных моделей и интерфейсовinternal/application: Бизнес-логика приложенияinternal/infrastructure: Внешние зависимости (JIRA API клиент)internal/interfaces: Интерфейсы взаимодействия (CLI)