Задания

Задания SmartClass изготавливаются на основе репозитория-шаблона, который наследует все его настройки, но не наследует историю изменений репозитория.

После изготовления задания доступна ссылка-приглашение для передачи студентам.

Созданное задание можно переиспользовать в другом классе или удалить.

Изготовление шаблона репозитория

Для создания задания требуется иметь репозиторий-шаблон.

Шаблон репозитория для учебного задания можно изготовить:

Подготовка задания

Подготовка задания происходит в 3 этапа:

  1. Создание задания;
  2. Защите веток;
  3. Автопроверка.

На этапе настройки автопроверки в репозитории задания создается файл .gitverse/workflows/smartclass.yaml с задачей для раннера. Для обработки событий репозиториев всех классов одним раннером его следует создавать на уровне организации (профиль организации > Настройки).

Чтобы перейти к подготовке задания, в профиле класса:

  1. перейдите на вкладку Задания;
  2. нажмите Новое задание.

Пример:

Создание задания

На первом этапе создается задание, для этого:

  1. заполните название задания;
  2. выберите видимость репозитория (Приватный или Публичный);
  3. назначьте дедлайн;
  4. (необязательно) выберите шаблон репозитория;
  5. нажмите Создать задание.

Пример:

Приватные задания

Если на этапе создания задания вы сделали его приватным, то это задание видят только автор и администраторы.

Когда студент присоединяется к заданию, его форк с учебным репозиторием тоже приватен (студент не может сделать форк публичным).

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

Пример:

Дедлайн

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

Дедлайны доступны только в новых заданиях, созданных после релиза 14.0.0.

Установка дедлайна

Для установки дедлайна воспользуйтесь на этапе создания задания одним из методов:

  • введите дату и время вручную;
  • нажмите пиктограмму календаря и выберите дату и время в модальном окне.

Пример:

Установка жесткого дедлайна

Чтобы запретить внесение изменений в репозиторий после завершения дедлайна, отметьте чекбокс Установить жесткий дедлайн рядом с установленной датой:

Отмена жесткого дедлайна
  1. Жесткий дедлайн можно отменить на странице Задания, для этого:

    1. в блоке Запросы на слияние напротив нужного участника нажмите на значок троеточия (...);
    2. выберите Отменить жесткий дедлайн.

    Пример:

  2. В открывшемся модальном окне подтвердите отмену жесткого дедлайна:

Возвращение жесткого дедлайна

При возвращении жесткого дедлайна и наступлении даты дедлайна участник теряет права на запись.

  1. Вернуть жесткий дедлайн можно на странице Задания, для этого:

    1. в блоке Запросы на слияние напротив нужного участника нажмите на значок троеточия (...);
    2. выберите Вернуть жесткий дедлайн.

    Пример:

  2. В открывшемся модальном окне подтвердите возвращение жесткого дедлайна:

    Рядом с именем участника отобразится Дедлайн отменен:

Редактирование дедлайна

Для редактирования дедлайна на странице задания:

  1. нажмите пиктограмму карандаша;
  2. нажмите пиктограмму календаря и выберите дату (или введите вручную);
  3. отметьте чекбокс, чтобы отменить или восстановить жесткий дедлайн, запрещающий внесение изменений;
  4. нажмите Сохранить.

Пример:

Отображение дедлайна в профиле репозитория

Для перехода на страницу учебного репозитория с дашборда задания нажмите на пиктограмму в блоке Запросы на слияние:

На открывшейся странице профиля репозитория информация о дедлайне отобразится справа в блоке Описание:

Защита веток в заданиях

На втором этапе изготовления задания настраивается защита веток, где вы можете:

  1. включить рекомендованные настройки защиты ветки master;
  2. ознакомиться с рекомендованными настройками.

Пример:

При нажатии на кнопку Обзор в правой части страницы отобразятся правила защиты ветки master:

Пропустить этот шаг и задать защиту веток позже.

Изменение защиты веток задания

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

  1. Чтобы посмотреть и изменить установленные правила защиты веток, перейдите в профиль репозитория > Настройки > Ветки, нажмите Редактировать.

    Пример:

  2. Отобразятся правила.

    Пример:

    В данном примере для ветки master:

    1. Коммиты запрещены.
    2. Запросы требуют требуют одобрения хотя бы одного ревьюера, которого можно назначить только из команды «Owners».
    3. Слияние запроса после одобрения может выполнить только участник команды «Owners».

Дополнительно см. разделы:

  1. Защита ветки.
  2. CI/CD при защите ветки.

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

Этап настройки автопроверки задания необязательный и его можно пропустить. На на этом этапе можно настроить .yaml-файл рабочего процесса через GitVerse конструктор или самостоятельно отредактируйте .yaml-шаблон, выбрав Настроить YAML.

Порядок работы конструктора и описание шаблона .yaml файла представлены ниже на данной странице:

После создания задания отобразится его дашборд с готовыми для отправки ссылками‑приглашениями:

На данном шаге подготовки задания создается файл .gitverse/workflows/smartclass.yaml для его автоматической проверки.

Результат проверки раннером запроса студента можно добавить в правила защиты веток, см. пример CI/CD при защите ветки.

⚠️

Для выполнения автопроверки в репозитории с заданием должен быть активен CI/CD. Возможно активировать CI/CD в репозитории‑шаблоне.

Для обработки событий репозиториев всех классов одним раннером его следует создавать на уровне организации (профиль организации > Настройки):

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

Конструктор YAML автопроверки

На втором шаге изготовления задания на вкладке GitVerse конструктор можно воспользоваться встроенным функционалом для создания .yaml-файла автопроверки:

Ввод-вывод (Input-output)
  1. Чтобы добавить тест c заданием параметра на входе и проверкой выходного значения, выберите Добавить > Ввод-вывод (Input-output):

  2. Заполните форму. Обязательными являются поля Название теста, Команда запуска, Вывод.

    После заполнения формы нажмите Сохранить:

  3. Тест с заданным названием отобразится на странице (в данном случае — testIO):

  4. В результате в репозиторий задания в файл .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.

  1. После добавления всех тестов нажмите Сохранить автопроверку:

  2. Перейдите по ссылке в репозиторий задания:

  3. Перейдите в папку .gitverse:

  4. Перейдите в папку 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-файла шаблона.

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 и запускает отчет для тестов.

Редактирование созданного YAML

После изготовления YAML автопроверок есть возможность их редактировать, для этого нажмите на пиктограмму редактирования рядом с созданным тестом:

Ссылка-приглашение

Ссылка-приглашение для отправки студентам доступна рядом с заданиями в профиле класса и на дашборде задания.

Ссылка-приглашение в профиле класса

Ссылка-приглашение доступна рядом с каждым заданием из списка в профиле класса > Задания.

Пример:

Ссылка-приглашение на дашборде задания

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

Отобразится дашборд задания, и здесь же будет доступна ссылка-приглашение:

Пересоздание ссылки‑приглашения

Для пересоздания ссылки‑приглашения в профиле класса > на дашборде задания нажмите Пересоздать ссылку:

Пересоздание ссылки-приглашения прекращает действие старой ссылки:

Список участников

Посмотреть список участников, принявших задание по ссылке-приглашению, можно в профиле класса на странице задания:

Дополнительно см. раздел Журнал студентов.

Переиспользование задания

Задание из одного класса можно переиспользовать в другом классе, все настройки существующего задания при этом будут скопированы:

  1. На дашборде задания нажмите Переиспользовать:

  2. В появившемся модальном окне заполните поля Организация и Класс, в которые будет скопировано задание, и нажмите Переиспользовать:

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

  3. Если перейти в профиль ранее выбранного для копирования класса, то там отобразится новое задание:

Деактивация задания

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

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

Для деактивации задания:

  1. на странице дашборда задания нажмите пиктограмму в виде трех точек;
  2. выберите Деактивировать.

Пример:

Удаление задания

Удалить задание можно в профиле класса из списка всех заданий или на странице самого задания.

В профиле класса

⚠️

Удаление задания безвозвратно удалит задание и всех связанных с ним студентов.

  1. В профиле класса > Задания нажмите на пиктограмму удаления:

  2. Введите название задания и нажмите Удалить:

На странице задания

См. удаление задания на дашборде задания.