Задания
Задания
Задания SmartClass изготавливаются на основе репозитория-шаблона, который наследует все его настройки, но не наследует историю изменений репозитория.
Изготовление задания происходит в 2 этапа:
- создание задания из шаблона;
- (опционально) настройка автопроверки задания.
На этапе настройки автопроверки в репозитории задания создается файл .gitverse/workflows/smartclass.yaml с задачей для раннера. Для обработки событий репозиториев всех классов одним раннером его следует создавать на уровне организации (профиль организации > Настройки).
После изготовления задания доступна ссылка-приглашение для передачи студентам.
Созданное задание можно переиспользовать в другом классе или удалить.
Подготовка задания
Подготовка задания
Изготовление шаблона репозитория
Изготовьте репозиторий-шаблон.
Шаблон репозитория для учебного задания можно изготовить:
- при создании нового репозитория;
- сделав существующий репозиторий шаблоном.
Создание задания
Порядок задания
В профиле класса:
- перейдите на вкладку Задания;
- нажмите Новое задание.
Пример:
Заполните форму:
- введите наименование задания;
- выберите шаблон репозитория;
- нажмите Создать задание.
Пример:
Пропустить этот шаг, или настройте .yaml-файл рабочего процесса через GitVerse конструктор, или самостоятельно отредактируйте .yaml-шаблон через Настроить YAML.
Порядок работы конструктора и описание шаблона .yaml файла представлены ниже на данной странице.
Пример:
После создания задания отобразится его дашборд с готовыми для отправки ссылками‑приглашениями.
Пример:
Настройка автопроверки задания
Автопроверка задания
На данном шаге подготовки задания создается файл .gitverse/workflows/smartclass.yaml для его автоматической проверки.
Результат проверки раннером пулл реквеста студента можно добавить в правила защиты веток, см. пример CI/CD при защите ветки.
Для выполнения автопроверки в репозитории с заданием должен быть активен CI/CD. Возможно активировать CI/CD в репозитории‑шаблоне.
Для обработки событий репозиториев всех классов одним раннером его следует создавать на уровне организации (профиль организации > Настройки).
Пример:
Данный шаг изготовления задания является опциональным, его можно пропустить, а рабочий процесс для раннера настроить позднее.
Пример:
Конструктор YAML автопроверки
На втором шаге изготовления задания на вкладке GitVerse конструктор можно воспользоваться встроенным функционалом для создания .yaml-файла автопроверки.
Пример:
Ввод-вывод (Input-output)
Чтобы добавить тест c заданием параметра на входе и проверкой выходного значения, выберите Добавить > Ввод-вывод (Input-output).
Пример:
Заполните форму. Обязательными являются поля Название теста, Команда запуска, Вывод.
После заполнения формы нажмите Сохранить.
Пример:
Тест с заданным названием отобразится на странице (в данном случае — testIO).
Пример:
В результате в репозиторий задания в файл .gitverse/workflows/smartclass.yaml будет добавлен шаг testIO:
- name: testIO id: test1 uses: https://gitverse.ru/art/autograding-io-grader@v2 with: test-name: testIO setup-command: "" command: node testIO.js input: "3" expected-output: "27" comparison-method: exact
Проверка YAML, созданного в конструкторе
Созданные тесты сохранятся в репозиторий задания в файле .gitverse/workflows/smartclass.yaml в виде шагов задачи рабочего процесса. Следуйте инструкции ниже, чтобы посмотреть созданный в конструкторе .yaml.
После добавления всех тестов нажмите Сохранить автопроверку.
Пример:
Перейдите по ссылке в репозиторий задания.
Пример:
Перейдите в папку .gitverse.
Пример:
Перейдите в папку workflows и выберите файл smartclass.yaml.
Пример:
Отобразится созданный в конструкторе .yaml с двумя заданными ранее тестами (test1 и test2):
name: Autograding Tests on: - pull_request jobs: run-autograding-tests: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v3 - name: testIO id: test1 uses: https://gitverse.ru/art/autograding-io-grader@v2 with: test-name: testIO setup-command: "" command: node testIO.js input: "3" expected-output: "27" comparison-method: exact - name: Autograding Reporter uses: https://gitverse.ru/art/autograding-grading-reporter@v2 env: TEST1_RESULTS: ${{steps.test1.outputs.result}} with: runners: test1
YAML автопроверки из шаблона
Настройка YAML автопроверки
Чтобы создать .yaml-файл для проверки репозитория через редактирование предложенного шаблона, выберите Настроить YAML.
Пример:
Общее описание YAML-шаблона
Ниже представлено общее описание .yaml-файла шаблона.
name: Autograding Tests
on:
- push
jobs:
run-autograding-tests:
runs-on: ubuntu-latest
if: github.actor != 'github-classroom[bot]'
steps:
- name: Checkout code
uses: actions/checkout@v3
- name: Lesson2
id: test1
uses: https://gitverse.ru/art/autograding-io-grader@v2
with:
test-name: Lesson2
setup-command: ""
command: python3 main.py
input: "1"
expected-output: "3"
comparison-method: contains
- name: Autograding Reporter
uses: https://gitverse.ru/art/autograding-grading-reporter@v2
env:
TEST1_RESULTS: ${{steps.Lesson2.outputs.result}}
with:
runners: test
Этот код .yaml-файла описывает настройки для автоматического выполнения тестов при коммитах (события on push
).
Структура файла:
name: Autograding Tests
— название;on:
— событие, на которое среагирует раннер:- push
— раннер сработает при отправке изменений на сервер:
jobs:
— описание задач, которые нужно выполнить. В данном случае задача одна:-
run-autograding-tests:
— название задачи:runs-on: ubuntu-latest
— операционная система для запуска тестов;
-
if: github.actor != 'github-classroom[bot]'
— условие выполнения задачи. Данное условие добавлено, чтобы исключить лишние срабатывания раннера на действие внутреннего бота SmartClass'а; -
steps:
— шаги, необходимые для выполнения задачи:-
- name: Checkout code
- ...
-
- name: Lesson2
- ...
-
- name: Autograding Reporter
- ...
-
-
Каждый шаг включает в себя название (name
), инструкции по использованию (uses
), параметры (with
), и, возможно, переменные окружения (env
).
Шаги в задаче шаблона
Checkout code
- name: Checkout code
uses: actions/checkout@v3
Этот шаг использует действие actions/checkout@v3
для работы с репозиторием (см. пример .yaml для обращения к репозиторию).
Lesson2
- name: Lesson2
id: test1
uses: https://gitverse.ru/art/autograding-io-grader@v2
with:
test-name: Lesson2
setup-command: ""
command: python3 main.py
input: "1"
expected-output: "3"
comparison-method: contains
В этом шаге используется действие https://gitverse.ru/art/autograding-io-grader@v2
для выполнения тестов. Он выполняет команду python3 main.py
с вводом 1
и ожидаемым выводом 3
, используя метод сравнения contains
.
Autograding Reporter
- name: Autograding Reporter
uses: https://gitverse.ru/art/autograding-grading-reporter@v2
env:
TEST1_RESULTS: ${{steps.Lesson2.outputs.result}}
with:
runners: test
В этом шаге используется действие https://gitverse.ru/art/autograding-grading-reporter@v2
для создания отчета об автопроверке. Он использует результаты тестов из шага Lesson2
и запускает отчет для тестов.
Защита веток в заданиях
После создания задания можно настроить защиту веток репозитория, см. разделы:
Настроенную защиту веток репозитория унаследуют репозитории студентов.
Чтобы посмотреть установленные правила защиты веток, перейдите в профиль репозитория > Настройки > Ветки, нажмите Редактировать.
Пример:
Отобразятся правила.
Пример:
В данном примере для ветки "master":
- коммиты запрещены;
- пулл реквесты требуют требуют одобрения хотя бы одного ревьюера, которого можно назначить только из команды «Owners»;
- слияние пулл реквеста после одобрения может выполнить только участник команды «Owners».
Ссылка-приглашение
Ссылка-приглашение
Ссылка-приглашение для отправки студентам доступна рядом с заданиями в профиле класса и на дашборде задания.
Ссылка-приглашение в профиле класса
Ссылка-приглашение доступна рядом с каждым заданием из списка в профиле класса > Задания.
Пример:
Ссылка-приглашение на дашборде задания
Также из профиля класса можно перейти к дашборду задания и скопировать ссылку-приглашение уже здесь.
Пример:
Отобразится дашборд задания, и здесь же будет доступна ссылка-приглашение:
Список студентов
Посмотреть список студентов, принявших задание по ссылке-приглашению, можно в профиле класса на странице задания:
Пример:
Дополнительно см. раздел Журнал студентов
Переиспользование задания
Переиспользование задания
Задание из одного класса можно переиспользовать в другом классе, все настройки существующего задания при этом будут скопированы:
На дашборде задания нажмите Переиспользовать.
Пример:
В появившемся модальном окне заполните поля Организация и Класс, в которые будет скопировано задание, и нажмите Переиспользовать.
Пример:
Отобразится модальное окно с сообщением об успешном копировании задания. Далее можно остаться в классе или перейти в класс со скопированным заданием, нажав соответствующую кнопку в модальном окне — Остаться в классе или Перейти в копию задания:
Если перейти в профиль ранее выбранного для копирования класса, то там отобразится новое задание.
Пример:
Удаление задания
Удаление задания
Удалить задание можно в профиле класса из списка всех заданий или на странице самого задания.
В профиле класса
Удаление задания в профиле класса
Удаление задания безвозвратно удалит задание и всех связанных с ним студентов.
В профиле класса > Задания нажмите на пиктограмму удаления.
Пример:
Введите название задания и нажмите Удалить.
Пример:
На странице задания
См. удаление задания на странице индивидуального задания.