Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

JIRA QA Comments Parser

Утилита для парсинга и анализа комментариев 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 комментариев для задачи

# Получить все 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 комментария

# Получить только последний 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

Экспорт данных в JSON и HTML

# Экспорт всех 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.yaml

Пример вывода

TOS-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] broken
  • Could not test on SW v1.4.0. Comment: Build broken
  • QA Comment: Tested on v2.0. Result: Passed. Notes: All tests passed
  • Tested on v1.1.0. Result: Failed. Comment: Issue still exists

Поддерживаемые форматы результатов

  • Fixed
  • Not Fixed
  • Partially Fixed
  • Could not test
  • Passed (нормализуется в Fixed)
  • Failed (нормализуется в Not Fixed)
  • Blocked
  • In Progress
  • N/A
  • Verified (нормализуется в Fixed)
  • Resolved (нормализуется в Fixed)

Поддерживаемые форматы версий

  • Tested on v1.2.3
  • Tested on SW v2.0.0
  • Tested on version 1.5.0
  • Tested on 1.0.0

Поддерживаемые форматы комментариев

  • Comment: текст комментария
  • Note: текст комментария
  • Notes: текст комментария
  • Observation: текст комментария
  • Observations: текст комментария

Поддерживаемая JIRA-разметка

  • Жирный текст: *жирный*
  • Курсив: _курсив_
  • Моноширинный: ??моноширинный?? или {{моноширинный}}
  • Цвет: {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)

About

JIRA comment parser

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages