Skip to content

Latest commit

 

History

History
169 lines (139 loc) · 15 KB

README.md

File metadata and controls

169 lines (139 loc) · 15 KB

Flexberry RFC

Множество изменений, включая исправления ошибок и текста документации, могут быть выполнены и проверены через обычный механизм пулл реквестов на GitHub.

Однако некоторые изменения являются более "существенными" и соответственно требуют предварительного проектирования и согласования с основной командой разработки платформы Flexberry.

Процесс запросов на комментарии (RFC - Request For Comments) обеспечивает возможность согласованного и контролируемого принятия существенных изменений, касающихся платформы Flexberry.

Список обсуждаемых RFC

Когда необходимо использовать RFC

Необходимо использовать процесс RFC в случае желания или необходимости внести более "существенные" изменения в любые фреймворки, подсистемы, библиотеки или документацию, входящие в состав платформы Flexberry.

Понятие "существенных" изменений формируется нормами сообщества, но обычно включает в себя следующее:

  • Изменения в архитектуре фреймворков или подсистем, вохдящих в состав платформы.
  • Публикация нового или изменение существующего API.
  • Добавление новых возможностей, механизмов или инструментов.
  • Удаление функционала, вошедшего в опубликованные ранее релизы.
  • Внедрение новых концепций или соглашений, даже если они не влекут за собой изменения в исходном коде.

Примеры изменений, которые не требуют RFC:

  • Рефакторинг, переименования и т.п.
  • Добавление или удаление сообщений об ошибках или предупрежденях.
  • Доработки, связанные исключительно с улучшением качественных показателей (вопросы производительности, поддержка различными браузерами и т.п.).
  • Изменения, которые никаким образом не могут быть замечены конечными пользователями платформы, а только разработчиками.

Пулл реквесты в какие-либо репозитории платформы с реализацией новых возможностей без предварительного обсуждения через процесс RFC могут быть закрыты с просьбой предварительго создания RFC.

Получение обратной связи перед созданием RFC

Часто полезно получить обратную связь перед детальным проектированием и написанием RFC. Вы можете создать обсуждение (issue) в данном репозитории, чтобы организовать "высокоуровневое" обсуждение проблемы. Это может помочь сформулировать конкретное проектное решение в рамках RFC, а также понять необходимость создания RFC.

Кроме того, по некоторым вопросам у основной команды разработки платформы могут иметься принципиальные соображения, которые изначально могут быть неочевидны для тех, кто хочет добавить в платформу новые возмжности или изменить существующие.

Что представляет собой процесс RFC

Перед добавлением новых возможностей или "существенных" изменений, касающихся платформы Flexberry, необходимо, чтобы в данном репозитории был добавлен соответствующий RFC в виде файла с использванием markdown-разметки. После добавления RFC в данный репозиторий он становится "активным" и может быть реализован, что означает включение соответствующего функционала в те или иные части платформы.

  • Сделайте форк репозитория https://github.com/Flexberry/rfcs.
  • Скопируйте файл 0000-template.md в text/0000-my-feature.md (где 'my-feature' требуется заменить на описание соответствующего функционала (на английском языке); номер RFC присваивать на данном шаге не нужно).
  • Заполните RFC. В тексте должно быть достаточно деталей: RFC, в которых отсутствует достаточное обоснование, демонстрация понимания влияния на архитектуру соответствующих частей платформы или достаточное описание недостатков и альтернатив для предложенного решения, с большой вероятностью не будут приняты.
  • Создайте пулл реквест. В первом комментарии к пулл реквесту необходимо написать слово "Выполнено" (или "Rendered") со ссылкой на RFC в Вашем репозитории (в форке данного репозитория) (Пример). После создания пулл реквеста RFC получит обратную связь от основной команды разработки платформы и от всего сообщества в комментариях к пулл реквесту. Автор должен быть готов аргументированно отвечать на различные вопросы из комментариев.
  • С учетом высказанных замечаний при необходимости исправьте текст RFC в дополнительных коммитах. RFC, которые получили широкую поддержку в виде множества лайков и комментариев, с большей вероятностью будут приняты.
  • В конце концов основная команда разработки платформы примет решение о том, что проектное решение из RFC может быть включено в платформу, либо аргументированно отклонит предложенное решение.
  • Для RFC, которые являются кандидатами для включения в платформу, инициируется в финальный период, который длится 7 дней. Начало этого периода отмечается в виде соответствующего комментария и метки в пулл реквесте RFC. Кроме того, в официальном аккаунте платформы Flexberry на Твиттер, а также в официальных группах платформы ВКонтакте и Facebook, появится пост о соответствующием RFC для привлечения внимания сообщества.
  • RFC может быть изменен на основе обратной связи от основной команды разработки платформы или от сообщества. Исправление существенных замечаний может инициировать новый финальный период RFC.
  • RFC может быть отклонен основной командой разработки платформы на основании результатов публичного обсуждения, если по результатам обсуждения будет выявлено соответствующее обоснование для отклонения. В этом случае один из членов основной команды разработки платформы закрывает соответствующий пулл реквест.
  • RFC принимается по завершении финального периода. Основная команда разработки платформы в этом случае выполняет мердж пулл реквеста вместе с указанием фактического номера пулл-реквеста в тексте RFC и в названии соответствующего markdown-файла. После этого RFC становится "активным".

Жизненный цикл RFC

Когда RFC становится активным, авторы могут выполнить соответствующую реализацию заявленного в RFC функционала или исправлений, создав необходимый пулл реквест в соответствующий репозиторий с исходным кодом нужной части платформы. Активный статус RFC еще не означает, что соответствующие правки в конечном итоге будут обязательно включены в исходный код платформы. Это лишь означает, что основная команда разработки платформы согласилась с RFC в принципе и согласна включить соответствующие правки в исходный код.

Кроме того, активный статус RFC ничего не говорит о приоритете его реализации. Также этот статус не говорит о том, что кто-то вообще работает над реализацией соответствующего функционала RFC.

Модификация активных RFC может быть выполнена при помощи последующих пулл реквестов. Мы стремимся к тому, чтобы каждый RFC отражал конечное проектное решение; но природа процесса разработки платформы такова, что мы не можем во всех случаях ожидать полного соответствия описанного в RFC проектного решения и конечного результата на уровне исходного кода. Более того, мы стараемся поддерживать соответствие каждого документа RFC и функицонала, который должен быть реализован согласно имеющемуся плану развития платформы. Соответствующие изменения текста документа RFC выполняются в последующих пулл реквестах в данный репозиторий.

Реализация RFC

Автор RFC не обязан выполнять реализацию заявленных в RFC функционала и изменений. Безусловно, автор RFC (как и любой другой разработчик) может предложить реализацию заявленного в RFC функционала в виде соответствующего пулл реквеста в нужные репозитории платформы, после того как RFC становится активным.

Если Вы заинтересованы реализовать активный RFC, но не знаете, работает ли кто-то над соответствующим RFC, не стесняйтесь спросить об этом (например, оставив комментарий в обсуждении (issue), связанным с соответствующим RFC).

Проверка RFC

Каждую неделю основная команда разработки старается проверить некоторые из открытых пулл реквестов с RFC.

О каждом принятом (перешедшим в статус активного) RFC основная команда разработки сообщает в официальных аккаунтах и группах в социальных сетях. По каждому активному RFC назначается ответственный из основной команды разработки платформы, который будет отслеживать и курировать выполнение соответствующего RFC. Назначение ответственного отражается в комментариях к соответствующему пулл реквесту с RFC.

Примеры

Создание процесса RFC платформы Flexberry вдохновлено процессом RFC фреймворка Ember.js.