Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 130 additions & 18 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,24 +1,136 @@
## Начало работы
# Участие в проекте

_Все изменения в проекте принимаются только после успешного ci и код ревью. Каждый запрос на изменение оформляется как новый pull request._
Любой желающий может внести свой вклад в развитие данного проекта.

1. Сфоркай репозиторий, склоринуй на локалку и установи зависимости.
2. Сразу поставь `upstream`: `git remote add upstream https://github.com/intocode/iqa-frontend.git`.
3. Склонируй и установи [серверную часть](https://github.com/intocode/iqa-backend). Инструкцию по запуску читай в том же репозитории.
4. Определи свои задачи на текущий спринт вместе с тимлидом.
5. Создай новую ветку под текущую задачу. Начни писать код.
6. Чекни свои изменения на предмет прохождения тестов и других проверок: `npm run check`.
7. Открой новый `pull request` с изменениями и сообщи о нём в чате разработки.
Помощь может заключаться не только в непосредственной разработке, но и в поиске ошибок, исправлении опечаток, предложении новых идей, которые сделают проект лучше.

## Как предложить свою идею или указать на найденный баг?

Открой раздел [Issues](https://github.com/intocode/iqa-frontend/issues). Все текущие и будущие задачи обсуждаются здесь. Если в списке открытых вопросов нет твоей идеи, то смело создавай новый Issue с предложением.

## Как начать выполнять задачу?

Открой раздел [Issues](https://github.com/intocode/iqa-frontend/issues). Выбери задачу, над которой хотел бы поработать. Внимательно ознакомься с описанием. Если остались вопросы, то задавай их в обсуждении Issue.

Убедись, что задача тебе полностью понятна и только после этого приступай к её реализации. Если задача связана с написанием кода, то подробности выполнения такой задачи указаны в разделе ниже.

## Технические требования

Ко всем выполняемым задачам есть определенные требования. Они довольно простые:

**Один Pull Request должен закрывать только одну задачу.** Нельзя включать в Pull Request никакие изменения, которые напрямую не относятся к теме пуллреквеста, даже если это просто исправление опечатки в тексте.

**Pull Request должен закрывать решаемую задачу полностью.** Нельзя закрывать только часть задачи, другую часть оставив на другой Pull Request. Если задача требует разбивки на более мелкие задачи, то это нужно обсудить в Issue этой задачи и в случае необходимости создать новые Issue для подзадач.

**Весь код должен идти с комментариями.** Разрешается не комментировать участки кода, которые можно однозначно понять в рамках своего контекста. Комментарии не должны содержать грамматические ошибки.

_Пример 1:_

```javascript
useEffect(() => {
dispatch(fetchUsers());
}, [dispatch]);
```

В данном случае можно недвусмысленно понять что делает этот код, поэтому его можно не комментировать.

---

Основные инструменты проекта:
_Пример 2:_

```javascript
// создаем переменную стейта, чтобы сделать поле ввода логина управляемым компонентом
const [text, setText] = useState(null);
```

В этом случае код нужно было прокомментировать, потому что переменная `text` может использоваться как угодно и нужно вносить ясность в момент её создания.

---

_Пример 3:_

```javascript
const [loginFieldValue, setLoginFieldValue] = useState("");
```

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

## Как приступить к разработке

### Подготовка git

**1. Сделай fork текущего репозитория**.

**2. Склонируй свой fork на рабочий компьютер**:

```shell
git clone https://github.com/твой-логин/iqa-frontend.git
```

**3. Добавь головной сервер `upstream`**:

```shell
git remote add upstream https://github.com/intocode/iqa-frontend.git
```

**4. Создай новую ветку под выполняемую задачу**:

```shell
git switch -c my-feature
```

### Запуск тестов

После выполнения задачи запусти линтеры и тесты командой `npm run check`. Если какой-то тест не проходит, то внеси исправления в свой код.

### Выгрузка изменений

**Если задача будет решена и все тесты проходят** выгрузи свою работу и открыть новый Pull Request:

```shell
git add измененный-файл.js
git commit -m "Хорошее описание коммита"
git push origin my-feature
```

После этого нужно перейти в свой репозиторий на 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).

### Проверка на конфликты

Если выполнение задачи заняло много времени, то возможно репозиторий в это время был обновлен. Необходимо сгрузить себе изменения и замёржить их. Для этого:

**а) Сделай коммит своей работы:**

```shell
git add file1.js file2.js
git commit -m "Описание выполненной работы"
```

**б) Перейди на ветку `main`:**

```shell
git switch main
```

**в) Подтяни изменения с головной ветки:**

```shell
git pull upstream main
```

**г) Перейди на рабочую ветку и сделай мёрж:**

```shell
git switch my-feature
git merge main
```

**д) Если есть конфликты, то исправь их.** Если не знаешь как это делать, то прочитай какой-нибудь материал на эту тему. Например [этот](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).

После этого можно делать `push` и открывать Pull Request.

## Принятие Pull Request

Открытый Pull Request должен пройти код ревью как минимум двух участников проекта. Однако, в некоторых случаях мы можем принять изменения не дожидаясь двух подтверждений.

- `create-react-app@4`
- `react@17`
- `@reduxjs/toolkit`
- `react-router-dom@5`
- `styled-components`
- `storybook`
- `jest@27`, `@testing-library/react`
- `ESLint@7`, `prettier`
Всё обсуждение пулл реквеста должно вестись на его странице в комментариях, чтобы оно было доступно всем участникам разработки.
43 changes: 34 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,19 +1,44 @@
# iqa-application
# iqa-frontend

[![intocode license](https://img.shields.io/github/license/intocode/iqa-frontend)](https://github.com/intocode/iqa-frontend)

_Проект находится в разработке._
Репозиторий содержит фронтенд проекта iqa-application. Backend находится в [отдельном репозитории](https://github.com/intocode/iqa-backend).

**Запуск на локалке**
## Начало работы

### Установка

```shell
git clone https://github.com/intocode/iqa-frontend
cd iqa-frontend && npm install
git clone https://github.com/intocode/iqa-frontend.git
cd iqa-frontend
npm install
```

### Запуск в режиме разработки

```shell
npm start
```

Сервер: https://github.com/intocode/iqa-backend <sup>private</sup>
Dev deploy: https://iqa-stage-frontend.intocode.ru
Jira: https://intocode.atlassian.net/jira/software/projects/IQ/boards/5
Начало работы: [CONTRIBUTING.md](./CONTRIBUTING.md) <sup>for beginners</sup>
Установка backend-части приложения не требуется. Все запросы будут направлены на доступный в сети stage-сервер.

**ВНИМАНИЕ!** Установка для участников разработки немного отличается от вышеуказанной. Подробнее читай в файле [CONTRIBUTING.md](./CONTRIBUTING.md).

## Участие в разработке

Любой желающий может внести свой вклад в развитие данного проекта.

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

Подробности участия в проекте можно прочитать в файле [CONTRIBUTING.md](./CONTRIBUTING.md).

## Стек

- JavaScript, ES6, ES7
- React 17 (FC), create-react-app, prop-types
- Redux, Redux Toolkit, Redux Persist
- antd, styled-components, bootstrap-grid.css
- axios, dayjs, react-transition-group
- Jest, ESLint, Prettier, lint-staged

🤘🏼 Необязательно знать все инструменты, чтобы начать работу с проектом.