-
Notifications
You must be signed in to change notification settings - Fork 97
[Студентам] Процесс сдачи ДЗ
Для сдачи ДЗ необходимо выполнить следующие действия (по порядку):
- Нажмите на зелёную кнопку «Use this template» на странице данного репозитория.
- Подождите пока сгенерируется новый репозиторий на основе текущего.
- Новый репозиторий должен быть публичным.
- Склонируйте себе ваш репозиторий (например, я назвал свой
hw-test
):
$ git clone https://github.com/Antonboom/hw-test.git
- Создайте ветку с именем таким же, как директория, где лежит ДЗ. Это важно!
$ cd hw-test
$ git checkout -b hw01_hello_otus
- Реализуйте код домашнего задания в директории с ДЗ.
- Проверьте, что следующие команды завершаются успешно:
$ cd hw01_hello_otus
$ golangci-lint run .
$ go test -v -count=1 -race -timeout=1m .
$ ./test.sh # При наличии
Это те команды, которые запускаются в CI (см. .github/workflows/tests.yml
).
- Зафиксируйте изменения и запушьте ветку в репозиторий:
$ git commit -am "HW1 is completed"
$ git push origin hw01_hello_otus
...
remote: Create a pull request for 'hw01_hello_otus' on GitHub by visiting:
remote: https://github.com/Antonboom/hw-test/pull/new/hw01_hello_otus
- Как видно выше, GitHub предложит вам URL для создания пулл реквеста, пройдите по нему.
- Допишите в конец URL параметр вида
&template=<имя_ветки>.md
и нажмите Enter - PR обновится в соответствии с одним из шаблонов.
- Нажмите кнопку «Create pull request».
После того, как вы отправили первую домашнюю работу на проверку, к вам будет закреплен наставник - его в этом ДЗ и в последующих нужно будет добавлять во все PR в качества ревьювера (зайдите на страницу настроек доступа (Settings -> Manage access), нажмите "Invite a collaborator" и пригласите наставника, никнейм наставники будет доступен после того, как он первый раз проверит ваш PR).
Это необходимо для того, чтобы наше ревью в вашем PR имело "вес", а также, чтобы мы могли выставлять галочки в критериях оценки :)
Зайдите на страницу настроек веток репозитория (Settings -> Branches):
- выбрать Default branch - master;
- добавить новое правило (Branch protection rules -> Add rule):
- Branch name pattern -
master
(именно так); - выставить галочку "Require a pull request before merging";
- выставить галочку "Require approvals";
- выставить галочку "Require review from Code Owners";
- выставить галочку "Require status checks to pass before merging";
- выставить галочку "Require branches to be up to date before merging";
- добавить в "Status checks that are required" следующие статусы:
- lint
- tests
- tests_by_makefile
- выставить галочку "Include administrators";
- нажать кнопку «Create».
- Branch name pattern -
Скиньте ссылку на PR в чат с преподавателем в личном кабинете OTUS (не в Slack).
Пройдите ревью и после одобрения пулл реквеста вмержите PR в master.
При выполнении последующего ДЗ не забудьте перед бранчеванием переключиться назад в master, иначе hw02 будет отбранчевана от hw01, что повлечет за собой лишние коммиты в PR.
$ git checkout master
$ git checkout -b hw02_unpack_string
Complete!
Если вам заапрувили реквест, но вы хотите поднять баллы (например, вам поставили 8/10 при зачёте от 7), то просто продолжайте пушить в этот же PR, не закрывая его.
Чтобы преподаватель повторно провёл ревью, сообщите ему об этом в чат с преподавателем в Otus или через комментарий в PR с аннотацией преподавателя, например,
@Antonboom
Все замечания подправил, билд зеленый, можно проверять :)
Убедительная просьба не мержить реквесты без апрува от проверяющего!
Базовый репозиторий обновляется (меняется документация, тесты, фиксятся ошибки и пр.).
Поэтому иногда нужно "руками" притянуть в свой репозиторий новые / обновленные файлы.
Так как наш репозиторий не форк, а репозиторий, созданный из шаблона, то просто так вмержить базовый репозиторий не получится - наши истории не совпадают.
Мержим принудительно
$ git remote add base https://github.com/OtusGolang/home_work.git
$ git pull base master --allow-unrelated-histories
Но тогда придётся исправлять (множественные) конфликты.
Клонируем базовый репозиторий рядом и копируем файлы с помощью скрипта.
Допустим, ДЗ и шаблон лежат в таких папках:
├── otus_hw
└── otus_hw_tmpl
Скрипт запускаем из папки с шаблоном (otus_hw_tmpl
) — ./.scripts/sync.sh ../otus_hw
. Скопируются только те папки, где у аналогичных в otus_hw
есть .sync
-файл. У сделанных ДЗ можно удалить .sync
-файл, чтобы они не перетирались при обновлении шаблона.
Клонируем базовый репозиторий рядом и точечно копируем нужные файлы / папки
$ cd /tmp
$ git clone https://github.com/OtusGolang/home_work.git hw_base
$ cd my_hw
$ cp -R /tmp/hw_base/hw02 hw02
Скачиваем необходимые файлы / папки через интерфейс GitHub и также точечно обновляем наш репозиторий.
При любом варианте вы можете обновить
- как
master
вашего репозитория, тогда потребуется временно включить разрешение на push вmaster
(т.е. снять галочку "Include administrators" в правиле защиты ветки master (Settings -> Branches); после обновления репозитория галочку стоит вернуть на место)** - так и ветку с текущим ДЗ, тогда обновления попадут в текущий PR по домашней работ и после слияния окажутся в
master
.
Линтеры, которые вас достают и которые лично для вас смысла не
имеют можно дизейблить в .golangci.yml
. Но рекомендуется точечно
использовать //nolint:<имя_линтера>
на строке с проблемой или (в редких случаях)
перед всей функцией:
b.WriteString(strings.Repeat(string(lastRune), repeatNumber - 1)) //nolint:gomnd
Домашние задания нужны вам, а не нам. За их невыполнение родителей в школу не вызовут. Мимо нас проходят сотни решений и понимание того, прислал человек свой код или чужой, происходит моментально. Это не влечёт за собой ничего, кроме как ухудшения отношения к нему, как к потенциальному кандидату и будущему коллеге.
Сообщайте о найденных опечатках, ошибках, недочётах и пр.
Пожалуйста, не спешите писать о "неправильных тестах", если ваша программа не проходит их. Сначала ещё раз внимательно прочитайте условие ДЗ и проверьте написанный код. Спасибо!