Спасибо, что решили внести вклад в React Native UI Kit! Ваша помощь делает этот проект лучше.
Следование этим рекомендациям помогает нам эффективно работать вместе. Это ускоряет процесс рассмотрения ваших изменений и делает проект более стабильным и качественным.
Мы открыты для различных видов вклада:
- Исправление багов — сообщения об ошибках и их исправления
- Новые функции — предложения и реализация новых компонентов
- Улучшение документации — исправление ошибок, добавление примеров, улучшение читаемости
- Тесты — написание и улучшение тестов
- Рефакторинг — улучшение качества кода без изменения функциональности
- Улучшение Storybook — добавление новых историй и примеров использования компонентов
- Изменения, нарушающие обратную совместимость без обоснования
- Изменения, не соответствующие дизайн-системе проекта
- PR без тестов для новой функциональности
- PR с неисправленными ошибками линтера или форматтера
- Кросс-платформенная совместимость: Все изменения должны работать на iOS и Android
- TypeScript: Весь код должен быть типизирован
- Тесты: Новый функционал должен быть покрыт тестами
- Линтинг и форматирование: Код должен проходить проверки ESLint и Prettier
- Storybook: Новые компоненты должны иметь примеры использования в Storybook
Не знаете, с чего начать? Вот несколько способов помочь:
- Изучите открытые issues — найдите задачи с метками
good first issueилиhelp wanted - Исправьте опечатки в документации — это отличный способ начать
- Добавьте тесты — улучшите покрытие тестами существующих компонентов
- Создайте истории в Storybook — добавьте примеры использования компонентов
yarn installbundle installyarn pod-installStorybook:
yarn start— запускает Metro Bundler для Storybookyarn ios— запускает Storybook на iOS симулятореyarn android— запускает Storybook на Android эмуляторе
Сборка библиотеки:
yarn buildТестирование:
Запуск тестов
yarn testЗапуск тестов с обновлением снэпшотов
yarn test -uЛинтинг и форматирование:
yarn lint:check— проверка ошибок линтераyarn lint:fix— автоматическое исправление ошибок линтераyarn prettier:check— проверка форматированияyarn prettier:fix— автоматическое форматирование кода
-
Создайте форк репозитория (если у вас нет прав на запись)
-
Создайте ветку для ваших изменений:
git checkout -b feature/short-description # или git checkout -b fix/short-descriptionПравила именования веток:
feature/name— для новых функцийfix/name— для исправления баговchore/name— для других изменений (обновление зависимостей, конфигурации и т.д.)
-
Внесите изменения в коде
-
Убедитесь, что код проходит проверки:
yarn lint:check yarn prettier:check yarn test yarn build -
Создайте коммит используя commitizen:
git add . git commit # Запустит интерактивный интерфейс commitizen
Или используйте обычный коммит, следуя Conventional Commits:
feat(Upload): добавлен новый компонент fix(InputTextBase): исправлена логика фокуса docs(readme): исправлена опечатка test(Avatar): добавлены тесты -
Отправьте изменения:
git push origin feature/name
-
Создайте Pull Request на GitHub
При создании issue о баге, пожалуйста, укажите:
- Версию React Native:
react-native --version - Версию библиотеки: версия из
package.json - Операционную систему: iOS/Android и версия
- Как повторить: шаги для воспроизведения
- Ожидаемое поведение: что должно было произойти
- Фактическое поведение: что произошло на самом деле
- Скриншоты/видео: если применимо
- Дополнительный контекст: любая другая полезная информация
- Создайте issue с описанием предлагаемой функции
- Объясните проблему, которую решает функция
- Опишите желаемое решение и как оно должно работать
- Обсудите с командой перед началом реализации
- Дождитесь одобрения перед созданием PR
-
Автоматические проверки:
- Линтинг (ESLint)
- Проверка типов (TypeScript)
- Тесты (Jest)
- Проверка форматирования (Prettier)
-
Ручной review:
- Команда проекта проверяет код
- Могут быть запрошены изменения
- После одобрения PR будет смержен
Проект использует:
- ESLint для проверки кода
- Prettier для форматирования
- TypeScript для типизации
Важные правила:
- Все компоненты должны быть типизированы
testIDдолжен быть в форматеUpperPascalCase(например:ButtonPrimary,InputText)- Компоненты должны быть покрыты тестами
- Новые компоненты должны иметь истории в Storybook
Перед отправкой PR убедитесь:
yarn lint:fix
yarn prettier:fix
yarn testПроект следует Conventional Commits, за исключением части, связанной с BREAKING CHANGES:
Формат:
<type>(<scope>): <subject>
<body>
<footer>
Типы:
feat— новый функционалfix— исправления баговdocs— изменения касающиеся только документацииstyle— изменения не влияющие на работу кода (изменения форматирования кода)refactor— рефакторинг кодаperf— изменения по улучшению производительностиtest— добавление и исправление тестовbuild— изменения касающиеся только системы сборкиci— изменения в конфигурации CI/CDchore— другие изменения не затрагивающие исходный код или тестовые файлыrevert— реверт коммита
Примеры:
feat(Button): добавить поддержку иконок
fix(Input): исправить обработку пустых значений
docs: обновить README с примерами использования
test(Avatar): добавить тесты для размеров
Использование commitizen:
git commit # Запустит интерактивный интерфейсmain— основная ветка (только для коммитов из CI/CD)feature/name— новые функцииfix/name— исправления баговchore/name— другие изменения (обновление зависимостей, конфигурации и т.д.)
Мы используем следующие метки для issues:
bug— ошибка в кодеenhancement— улучшение существующей функцииfeature— новая функцияdocumentation— улучшение документацииgood first issue— подходит для новичковhelp wanted— нужна помощь сообществаquestion— вопрос, требующий обсуждения
Каждый компонент должен иметь следующую структуру:
ComponentName/
├── ComponentName.tsx # Основной компонент
├── ComponentName.test.tsx # Тесты
├── ComponentName.stories.tsx # Storybook истории
├── types.ts # TypeScript типы (опционально)
└── index.ts # Экспорт
- Создайте директорию в
src/components/ - Создайте компонент с типизацией
- Добавьте тесты используя Jest и React Native Testing Library
- Создайте истории в Storybook
- Экспортируйте компонент из
src/components/index.ts - Обновите документацию при необходимости
- Используйте Jest и React Native Testing Library
- Покрывайте основную функциональность тестами
- Тесты должны быть быстрыми и изолированными
- Используйте snapshots для проверки рендеринга
- В качестве примера, опирайтесь на уже написанные тесты в проекте
Каждый компонент должен иметь истории в Storybook, демонстрирующие:
- Основное использование
- Различные варианты (variants)
- Различные состояния (disabled, loading и т.д.)
- Различные размеры (если применимо)
- Документация дизайн-системы
- React Native документация
- Storybook для React Native
- Jest документация
- React Native Testing Library
Спасибо за ваш вклад! 🎉