Issuer — GitHub-действие для принудительного самообслуживания пользователей репозитория

В рамках проекта Issuer подготовлен бот для GitHub, решающий задачи по принудительному самообслуживанию пользователей репозитория. На GitHub можно встретить репозитории, единственная функция которых — координация людей через систему Issue. В некоторых из них оставляющим Issue предлагается заполнить форму. Потом приходит модератор, проверяет правильность заполнения формы, и развешивает теги в соответствии с указанными в форме (теги может вешать только привилегированный пользователь, если они не заданны в шаблоне). Пример такого сообщества — open-source-ideas/open-source-ideas.

Модератор приходит не моментально. Поэтому для проверки форм и выполнения операций подготовлено представленное в новости GitHub-действие. Бот написан на Python, но запускать его всё равно приходится через node.js, так как у GitHub всего 2 типа действий — node.js и docker, причём для docker сначала грузится тот же контейнер, где и node.js, и в него грузится ещё один контейнер, что долго. Учитывая, что в контейнере с node.js python3 и всё остальное нужное и так есть, рационально просто подгрузить в него зависимости, благо что они небольшие.

Особенности:

  • Действие управляется с помощью YAML-конфига и Markdown-шаблонов;
  • В каждый Markdown-шаблон добавляется блок, описывающий условия корректного заполнения формы и желаемые действия;
  • Добавляется файл конфигурации с глобальными настройками;
  • Формы состоят из секций. Есть 2 типа секций:
    • Свободный текст. Действие может проверить, что пользователь потрудился заполнить туда что-нибудь. Осмысленность текста автоматически не проверяется.
    • Флажки (checkbox). Можно потребовать заполнить n флажков, такое что 0 {= m1 {= n {= m2 {= общее число флажков в секции. Действие проверяет, что флажки соответствуют флажкам в шаблоне. Если флажки заданы правильно, действие может повесить на issue теги, соотв. флажкам.
  • Если форма заполнена неправильно, то действие инструктирует пользователя, как её правильно заполнить и вешает специальную метку.
  • Если форма не исправлена в течение определённого времени, то действие может закрыть issue. Автоматический бан пользователей, удаление и перемещение issue пока не реализовано в связи с отсутствием официального API для нужных действий и проблемами с хранением состояния.
  • Если проблема устранена, то действие удаляет метку.
  • Шаблоны ответов действия, разумеется, настраиваются.

Источник: opennet.ru

Добавить комментарий