Skip to content

[Студентам] Процесс сдачи ДЗ

Balun Vladimir edited this page Dec 6, 2022 · 27 revisions

Настройка репозитория и создание Pull Request

Для сдачи ДЗ необходимо выполнить следующие действия (по порядку):

  • Нажмите на зелёную кнопку «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 имело "вес", а также, чтобы мы могли выставлять галочки в критериях оценки :)

Защита ветки master

Зайдите на страницу настроек веток репозитория (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».

Скиньте ссылку на 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
Все замечания подправил, билд зеленый, можно проверять :)

Убедительная просьба не мержить реквесты без апрува от проверяющего!

Как обновить свой репозиторий базовым (шаблонным)?

Базовый репозиторий обновляется (меняется документация, тесты, фиксятся ошибки и пр.).

Поэтому иногда нужно "руками" притянуть в свой репозиторий новые / обновленные файлы.

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


Вариант 1

Мержим принудительно

$ git remote add base https://github.com/OtusGolang/home_work.git
$ git pull base master --allow-unrelated-histories

Но тогда придётся исправлять (множественные) конфликты.

Вариант 2

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

Допустим, ДЗ и шаблон лежат в таких папках:

├── otus_hw
└── otus_hw_tmpl

Скрипт запускаем из папки с шаблоном (otus_hw_tmpl) — ./.scripts/sync.sh ../otus_hw. Скопируются только те папки, где у аналогичных в otus_hw есть .sync-файл. У сделанных ДЗ можно удалить .sync-файл, чтобы они не перетирались при обновлении шаблона.

Вариант 3

Клонируем базовый репозиторий рядом и точечно копируем нужные файлы / папки

$ cd /tmp
$ git clone https://github.com/OtusGolang/home_work.git hw_base
$ cd my_hw
$ cp -R /tmp/hw_base/hw02 hw02

Вариант 4

Скачиваем необходимые файлы / папки через интерфейс GitHub и также точечно обновляем наш репозиторий.


При любом варианте вы можете обновить

  • как master вашего репозитория, тогда потребуется временно включить разрешение на push в master (т.е. снять галочку "Include administrators" в правиле защиты ветки master (Settings -> Branches); после обновления репозитория галочку стоит вернуть на место)**
  • так и ветку с текущим ДЗ, тогда обновления попадут в текущий PR по домашней работ и после слияния окажутся в master.

Настройка линтеров

Линтеры, которые вас достают и которые лично для вас смысла не имеют можно дизейблить в .golangci.yml. Но рекомендуется точечно использовать //nolint:<имя_линтера> на строке с проблемой или (в редких случаях) перед всей функцией:

b.WriteString(strings.Repeat(string(lastRune), repeatNumber - 1)) //nolint:gomnd

Списывание

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

Обратная связь

Сообщайте о найденных опечатках, ошибках, недочётах и пр.

Пожалуйста, не спешите писать о "неправильных тестах", если ваша программа не проходит их. Сначала ещё раз внимательно прочитайте условие ДЗ и проверьте написанный код. Спасибо!