|
1 | | -## Начало работы |
| 1 | +# Участие в проекте |
2 | 2 |
|
3 | | -_Все изменения в проекте принимаются только после успешного ci и код ревью. Каждый запрос на изменение оформляется как новый pull request._ |
| 3 | +Любой желающий может внести свой вклад в развитие данного проекта. |
4 | 4 |
|
5 | | -1. Сфоркай репозиторий, склоринуй на локалку и установи зависимости. |
6 | | -2. Сразу поставь `upstream`: `git remote add upstream https://github.com/intocode/iqa-frontend.git`. |
7 | | -3. Склонируй и установи [серверную часть](https://github.com/intocode/iqa-backend). Инструкцию по запуску читай в том же репозитории. |
8 | | -4. Определи свои задачи на текущий спринт вместе с тимлидом. |
9 | | -5. Создай новую ветку под текущую задачу. Начни писать код. |
10 | | -6. Чекни свои изменения на предмет прохождения тестов и других проверок: `npm run check`. |
11 | | -7. Открой новый `pull request` с изменениями и сообщи о нём в чате разработки. |
| 5 | +Помощь может заключаться не только в непосредственной разработке, но и в поиске ошибок, исправлении опечаток, предложении новых идей, которые сделают проект лучше. |
| 6 | + |
| 7 | +## Как предложить свою идею или указать на найденный баг? |
| 8 | + |
| 9 | +Открой раздел [Issues](https://github.com/intocode/iqa-frontend/issues). Все текущие и будущие задачи обсуждаются здесь. Если в списке открытых вопросов нет твоей идеи, то смело создавай новый Issue с предложением. |
| 10 | + |
| 11 | +## Как начать выполнять задачу? |
| 12 | + |
| 13 | +Открой раздел [Issues](https://github.com/intocode/iqa-frontend/issues). Выбери задачу, над которой хотел бы поработать. Внимательно ознакомься с описанием. Если остались вопросы, то задавай их в обсуждении Issue. |
| 14 | + |
| 15 | +Убедись, что задача тебе полностью понятна и только после этого приступай к её реализации. Если задача связана с написанием кода, то подробности выполнения такой задачи указаны в разделе ниже. |
| 16 | + |
| 17 | +## Технические требования |
| 18 | + |
| 19 | +Ко всем выполняемым задачам есть определенные требования. Они довольно простые: |
| 20 | + |
| 21 | +**Один Pull Request должен закрывать только одну задачу.** Нельзя включать в Pull Request никакие изменения, которые напрямую не относятся к теме пуллреквеста, даже если это просто исправление опечатки в тексте. |
| 22 | + |
| 23 | +**Pull Request должен закрывать решаемую задачу полностью.** Нельзя закрывать только часть задачи, другую часть оставив на другой Pull Request. Если задача требует разбивки на более мелкие задачи, то это нужно обсудить в Issue этой задачи и в случае необходимости создать новые Issue для подзадач. |
| 24 | + |
| 25 | +**Весь код должен идти с комментариями.** Разрешается не комментировать участки кода, которые можно однозначно понять в рамках своего контекста. Комментарии не должны содержать грамматические ошибки. |
| 26 | + |
| 27 | +_Пример 1:_ |
| 28 | + |
| 29 | +```javascript |
| 30 | +useEffect(() => { |
| 31 | + dispatch(fetchUsers()); |
| 32 | +}, [dispatch]); |
| 33 | +``` |
| 34 | + |
| 35 | +В данном случае можно недвусмысленно понять что делает этот код, поэтому его можно не комментировать. |
12 | 36 |
|
13 | 37 | --- |
14 | 38 |
|
15 | | -Основные инструменты проекта: |
| 39 | +_Пример 2:_ |
| 40 | + |
| 41 | +```javascript |
| 42 | +// создаем переменную стейта, чтобы сделать поле ввода логина управляемым компонентом |
| 43 | +const [text, setText] = useState(null); |
| 44 | +``` |
| 45 | + |
| 46 | +В этом случае код нужно было прокомментировать, потому что переменная `text` может использоваться как угодно и нужно вносить ясность в момент её создания. |
| 47 | + |
| 48 | +--- |
| 49 | + |
| 50 | +_Пример 3:_ |
| 51 | + |
| 52 | +```javascript |
| 53 | +const [loginFieldValue, setLoginFieldValue] = useState(""); |
| 54 | +``` |
| 55 | + |
| 56 | +Данной код выполяет ту же задачу, но за счет хорошего нейминга переменных можно избежать неоднозначности, поэтому дополнительный комментарий не требуется. |
| 57 | + |
| 58 | +## Как приступить к разработке |
| 59 | + |
| 60 | +### Подготовка git |
| 61 | + |
| 62 | +**1. Сделай fork текущего репозитория**. |
| 63 | + |
| 64 | +**2. Склонируй свой fork на рабочий компьютер**: |
| 65 | + |
| 66 | +```shell |
| 67 | +git clone https://github.com/твой-логин/iqa-frontend.git |
| 68 | +``` |
| 69 | + |
| 70 | +**3. Добавь головной сервер `upstream`**: |
| 71 | + |
| 72 | +```shell |
| 73 | +git remote add upstream https://github.com/intocode/iqa-frontend.git |
| 74 | +``` |
| 75 | + |
| 76 | +**4. Создай новую ветку под выполняемую задачу**: |
| 77 | + |
| 78 | +```shell |
| 79 | +git switch -c my-feature |
| 80 | +``` |
| 81 | + |
| 82 | +### Запуск тестов |
| 83 | + |
| 84 | +После выполнения задачи запусти линтеры и тесты командой `npm run check`. Если какой-то тест не проходит, то внеси исправления в свой код. |
| 85 | + |
| 86 | +### Выгрузка изменений |
| 87 | + |
| 88 | +**Если задача будет решена и все тесты проходят** выгрузи свою работу и открыть новый Pull Request: |
| 89 | + |
| 90 | +```shell |
| 91 | +git add измененный-файл.js |
| 92 | +git commit -m "Хорошее описание коммита" |
| 93 | +git push origin my-feature |
| 94 | +``` |
| 95 | + |
| 96 | +После этого нужно перейти в свой репозиторий на GitHub и открыть Pull Request. Подробнее об этом [в документации GitHub](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork). |
| 97 | + |
| 98 | +### Проверка на конфликты |
| 99 | + |
| 100 | +Если выполнение задачи заняло много времени, то возможно репозиторий в это время был обновлен. Необходимо сгрузить себе изменения и замёржить их. Для этого: |
| 101 | + |
| 102 | +**а) Сделай коммит своей работы:** |
| 103 | + |
| 104 | +```shell |
| 105 | +git add file1.js file2.js |
| 106 | +git commit -m "Описание выполненной работы" |
| 107 | +``` |
| 108 | + |
| 109 | +**б) Перейди на ветку `main`:** |
| 110 | + |
| 111 | +```shell |
| 112 | +git switch main |
| 113 | +``` |
| 114 | + |
| 115 | +**в) Подтяни изменения с головной ветки:** |
| 116 | + |
| 117 | +```shell |
| 118 | +git pull upstream main |
| 119 | +``` |
| 120 | + |
| 121 | +**г) Перейди на рабочую ветку и сделай мёрж:** |
| 122 | + |
| 123 | +```shell |
| 124 | +git switch my-feature |
| 125 | +git merge main |
| 126 | +``` |
| 127 | + |
| 128 | +**д) Если есть конфликты, то исправь их.** Если не знаешь как это делать, то прочитай какой-нибудь материал на эту тему. Например [этот](https://www.atlassian.com/ru/git/tutorials/using-branches/merge-conflicts), [этот](https://stackoverflow.com/questions/161813/how-do-i-resolve-merge-conflicts-in-a-git-repository) или [вот этот](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/addressing-merge-conflicts/resolving-a-merge-conflict-using-the-command-line). |
| 129 | + |
| 130 | +После этого можно делать `push` и открывать Pull Request. |
| 131 | + |
| 132 | +## Принятие Pull Request |
| 133 | + |
| 134 | +Открытый Pull Request должен пройти код ревью как минимум двух участников проекта. Однако, в некоторых случаях мы можем принять изменения не дожидаясь двух подтверждений. |
16 | 135 |
|
17 | | -- `create-react-app@4` |
18 | | -- `react@17` |
19 | | -- `@reduxjs/toolkit` |
20 | | -- `react-router-dom@5` |
21 | | -- `styled-components` |
22 | | -- `storybook` |
23 | | -- `jest@27`, `@testing-library/react` |
24 | | -- `ESLint@7`, `prettier` |
| 136 | +Всё обсуждение пулл реквеста должно вестись на его странице в комментариях, чтобы оно было доступно всем участникам разработки. |
0 commit comments