Задания

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

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

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

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

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

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

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

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

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

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

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

Пример:

Создание задания в профиле класса

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

На первом этапе:

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

Пример:

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

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

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

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

Пример:

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

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

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

Пример:

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

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

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

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

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

    Пример:

    Редактирование правила защиты веток
  2. Отобразятся правила.

    Пример:

    Правила защиты веток

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

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

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

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

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

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

Пример:

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

Пример:

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

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

⚠️

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

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

Пример:

раннеры организации

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

Пример:

Кнопка пропуска шага создания YAML автотестов

Конструктор 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-шаблона

Ниже представлено общее описание .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. Введите название задания и нажмите Удалить.

    Пример:

    Удаление задания на странице индивидуального задания, Шаг 2

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

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