Автотесты, CI и мониторинг

SourceCraft — от дефекта до влитого пул-реквеста

Отчёт уезжает из кубика CI одной командой, а дефект связывается с задачей SourceCraft: обратно в карточку приходят статус задачи и пул-реквест, закрывший её, с хешем влитой сборки.

Две разные связки

С SourceCraft QA Деск работает в двух местах, и их полезно не путать:

  1. CI — пайплайн отдаёт отчёт автотестов, деск делает из него прогон. Работает так же, как с любым другим CI.
  2. Задачи и код — из карточки дефекта заводится задача в репозитории, а обратно приезжают её статус и пул-реквесты, которые её закрыли. Это уже интеграция, настраиваемая в кабинете.

Мы сами живём на этой связке: QA Деск собирается в SourceCraft CI на своём воркере.

Выгрузка отчёта из кубика

cubes:
  - name: e2e
    image: node:22-alpine
    script:
      - npx playwright test --reporter=junit
      - wget -qO qadesk-cli https://qadesk.ru/cli/qadesk-cli-linux-amd64 && chmod +x qadesk-cli
      - ./qadesk-cli upload --run "e2e" --env stage ./reports

Узнаваемых переменных пайплайна у SourceCraft утилита не знает, и ключ идемпотентности она не выдумывает — ключ из текущей даты молча выключил бы защиту от дублей. Задайте его сами:

QADESK_CI_RUN_ID=$SOME_RUN_ID ./qadesk-cli upload ./reports
# либо явно
./qadesk-cli upload --ci-run-id "$SOME_RUN_ID" --attempt 1 ./reports

Без ключа отчёт примется, но защиты от повторного прогона у него не будет — перезапуск создаст второй прогон.

Задача разработчику из карточки дефекта

Организация подключается в кабинете личным токеном (Настройки → Интеграции → SourceCraft), репозитории привязываются к проектам. Проверка живая: подключение сохраняется, только если SourceCraft принял токен и показал организацию — «настроено» у нас значит «работает». За две недели до истечения токена приходит предупреждение.

Дальше из карточки дефекта создаётся задача (Issue) — с шагами воспроизведения и ссылкой обратно. Существующую задачу можно привязать.

Что приходит обратно

Поллер раз в несколько минут читает связанные задачи и пишет в дефект только реальные смены:

  • статус задачи изменился;
  • у задачи появился пул-реквест;
  • пул-реквест влит — вместе с хешем коммита слияния.

Хеш замыкает цепочку «дефект → задача → пул-реквест → сборка»: тестировщик видит, в какой именно версии искать исправление, и не перепроверяет вслепую.

Связь «задача ↔ пул-реквест» строит сама платформа по упоминанию номера задачи; мы её только читаем.

Зачем это тестировщику

Обычная развилка после исправления: дефект переведён в «готово к проверке», а перепроверять надо на конкретной сборке, и какая это сборка — знает только разработчик. Хеш коммита слияния в карточке отвечает на вопрос без переписки: если на стенде стоит другая версия, перепроверять рано.

Второе — видимость. Пул-реквест, появившийся у задачи, попадает в историю дефекта сам, поэтому «взяли в работу» перестаёт быть устным сообщением в чате.

Чего специально не делаем

Стадия дефекта не переводится автоматически при закрытии задачи — и не будет. Закрытая задача это утверждение разработчика «сделал», а не проверка тестировщика. Иначе дефекты закрывал бы тот, кто их чинит.

Машинные события в истории дефекта подписаны источником («SourceCraft»), а не владельцем подключения: писать «Максим влил пул-реквест», который влил другой человек, — самый дорогой вид вранья в истории дефекта.

Вебхуков пока нет — обратная связь работает опросом; вебхуки в дорожной карте. В карточке дефекта есть кнопка «Обновить из SourceCraft», если ждать не хочется.

С чего начать

  1. Подключите организацию личным токеном и привяжите репозиторий к проекту.
  2. Заведите первую задачу из карточки дефекта и посмотрите, как через несколько минут в историю придёт пул-реквест.
  3. Добавьте кубик выгрузки отчёта с явным QADESK_CI_RUN_ID.
  4. Если пайплайн шардит тесты — свой --attempt на шард, иначе одинаковый ключ с другим содержимым получит честный отказ.

Попробуйте на своём проекте

Заведите проект, загрузите первый отчёт или заведите первый дефект — бесплатный тариф без карты. Нужно демо на ваших сценариях — напишите на hello@qadesk.ru.

Создать проект