Задания

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

Изготовление задания происходит в 2 этапа:

  1. создание задания из шаблона;
  2. (опционально) настройка автопроверки задания.

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

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

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

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

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

Изготовьте репозиторий-шаблон.

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

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

  1. В профиле класса:

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

    Пример:

    Создание задания в профиле класса
  2. Заполните форму:

    1. введите наименование задания;
    2. выберите шаблон репозитория;
    3. нажмите Создать задание.

    Пример:

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

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

    Пример:

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

    Пример:

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

На данном шаге подготовки задания создается файл .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 и запускает отчет для тестов.

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

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

Настроенную защиту веток репозитория унаследуют репозитории студентов.

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

    Пример:

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

    Пример:

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

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

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

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

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

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

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

Пример:

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

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

Пример:

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

Список студентов

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

Пример:

Новый студент в профиле класса преподавателя

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

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

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

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

    Пример:

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

    Пример:

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

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

    Пример:

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

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

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

⚠️

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

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

    Пример:

    Кнопка удаления задания
  2. Введите название задания и нажмите Удалить.

    Пример:

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

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

См. удаление задания на странице индивидуального задания.