Codenrock
ОрганизаторСредний10 мин

Настройка GIT-задач

Руководство по созданию задач с Git-репозиторием для команд участников

Настройка GIT-задач

GIT — задачи, где каждая команда получает собственный Git-репозиторий (fork шаблона) на GitLab, GitHub или SourceCraft. Подходит для хакатонов, проектных соревнований и задач с автоматической проверкой через CI/CD.

Когда использовать

  • Хакатоны с командной разработкой
  • Соревнования, где участники пишут код в репозитории
  • Задачи с автоматической проверкой через CI/CD пайплайны
  • Проектные задачи с code review

Принцип работы

1. Организатор создаёт шаблонный репозиторий (template)
2. Организатор настраивает Git-интеграцию в задаче
3. Участник нажимает «Создать репозиторий»
4. Система создаёт fork шаблона для команды
5. Участники получают доступ и работают в своём репозитории
6. (Опционально) CI/CD пайплайн проверяет решение

Поддерживаемые провайдеры

ПровайдерАутентификацияОсобенности
GitLabPRIVATE-TOKENПолная поддержка групп, подгрупп, CI/CD
GitHubBearer TokenОрганизации, Teams, GitHub Actions
SourceCraftBearer TokenGitLab-совместимый API

Создание GIT-задачи

Шаг 1: Создайте задачу

ПолеОписаниеОбязательное
НазваниеНазвание задачиДа
ТипВыберите GITДа
УсловиеОписание задачи (Markdown)Да
БаллыМаксимальное количество балловДа
ПорядокПозиция в трекеДа

Сохраните задачу, затем откройте её для редактирования — появится форма настройки Git-интеграции.

Шаг 2: Подключение к провайдеру

ПолеОписание
ПровайдерGitLab, GitHub или SourceCraft
Base URLURL API провайдера (например, https://gitlab.example.com)
API TokenСервисный токен с правами на создание групп и проектов

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

Шаг 3: Настройка пространства имён

ПолеОписаниеПример
Root NamespaceКорневая группа/организацияcodenrock
NamespaceПодгруппа для этой задачиhackathon-2026-backend
Repository SlugИмя fork-а для каждой командыsolution

Кнопка Заполнить по умолчанию автоматически сгенерирует значения из названия соревнования и задачи.

Структура на провайдере:

Root Namespace/
  Namespace/
    template-repo          ← шаблонный репозиторий
    team-alpha/            ← подгруппа команды
      solution             ← fork шаблона
    team-beta/
      solution

Шаг 4: Шаблонный репозиторий

Шаблонный репозиторий — это основа, которую получит каждая команда. Он может содержать стартовый код, тесты, CI/CD конфигурацию.

Нажмите кнопку Создать шаблонный репозиторий. Система создаст пустой репозиторий с README в настроенном пространстве имён.

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

  • Стартовый код / boilerplate
  • Тесты для автопроверки
  • .gitlab-ci.yml или Dockerfile для CI/CD
  • README.md с инструкциями для участников

Шаг 5: Дополнительные настройки

ПолеОписание
Webhook SecretСекрет для верификации webhook-ов от провайдера
Режим скорингаОтключён / По результатам CI/CD / Трёхфазный
Защищённые веткиВетки, в которые нельзя пушить напрямую (например, main)

Режимы скоринга:

РежимОписание
ОтключёнБаллы выставляются вручную
По результатам CI/CDБаллы рассчитываются из статуса пайплайна
ТрёхфазныйBuild, Inference, Scoring — полный цикл автопроверки

Шаг 6: Сохранение

Нажмите Сохранить интеграцию. Интеграция станет активной, и участники смогут создавать репозитории.

Что видит участник

После настройки интеграции участник видит на странице задачи:

СостояниеЧто отображается
Нет командыСообщение «Нет команды»
Не начатоКнопка Создать репозиторий
СоздаётсяСпиннер «Создание репозитория...»
ГотовоСсылка на репозиторий + Clone URL
ОшибкаСообщение об ошибке + кнопка повтора

Процесс для участника

1. Участник открывает задачу
2. Нажимает «Создать репозиторий»
3. Система создаёт подгруппу для команды
4. Форкает шаблон в подгруппу
5. Добавляет всех членов команды с правами WRITE
6. Участник переходит по ссылке и начинает работу

Управление доступом

Организаторы

Организаторы автоматически получают доступ MAINTAINER к пространству имён задачи. Это позволяет видеть все репозитории команд, просматривать код, запускать пайплайны.

Доступ синхронизируется автоматически:

Действие на платформеЧто происходит на провайдере
Добавить организатора (EDIT/OWNER)Получает MAINTAINER доступ ко всем GIT-задачам
Удалить организатораДоступ отзывается
Понизить до VIEW/CURATORДоступ отзывается
Повысить до EDIT/OWNERДоступ восстанавливается

Участники

Система автоматически добавляет всех членов команды с правами WRITE в репозиторий при его создании.

Поиск пользователей на провайдере (при SSO):

ПриоритетМетодКогда работает
1Поиск по extern_uid (ID из Zitadel)Требуется admin-токен
2Поиск по emailТребуется admin-токен
3Поиск по username (производный от email)Работает с обычным токеном

Для надёжного добавления участников при SSO рекомендуется использовать admin-токен провайдера.

CI/CD интеграция

GitLab CI/CD

Добавьте .gitlab-ci.yml в шаблонный репозиторий:

stages:
  - build
  - test

build:
  stage: build
  script:
    - echo "Building..."
    - make build

test:
  stage: test
  script:
    - echo "Running tests..."
    - make test

GitHub Actions

Добавьте .github/workflows/check.yml:

name: Check Solution
on: [push]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: make test

Webhook для результатов

Платформа принимает webhook-и от провайдера для обновления статуса пайплайнов:

СобытиеДействие
PushОбновляет lastPushAt репозитория
Pipeline/WorkflowСоздаёт/обновляет результат пайплайна

Архивация

При завершении соревнования система автоматически:

  • Защищает все ветки репозиториев (read-only)
  • Отзывает доступ всех участников и организаторов на провайдере
  • Помечает группы и репозитории как ARCHIVED

Архивация необратима — участники больше не смогут пушить код.

Пример задачи

Название: Backend API Challenge

Условие:

Реализуйте REST API для управления задачами (todo list).

## Требования
- CRUD операции для задач
- Фильтрация по статусу
- Пагинация
- Документация API (Swagger/OpenAPI)

## Стек
Любой язык и фреймворк. В шаблоне — Go + Chi.

## Оценка
CI/CD пайплайн запускает тесты автоматически.
- Все тесты пройдены: 80 баллов
- Code review: до 20 баллов

## Как начать
1. Нажмите «Создать репозиторий»
2. Клонируйте репозиторий
3. Изучите README.md и тесты
4. Реализуйте API
5. Пуш в main запускает проверку

Настройки:

  • Провайдер: GitLab
  • Namespace: hackathon-2026/backend-challenge
  • Скоринг: По результатам CI/CD
  • Защищённые ветки: main
  • Баллы: 100

Частые ошибки

ОшибкаПоследствиеРешение
Токен без прав на создание группОшибка при создании репозиторияВыдайте токену api scope
Нет шаблонного репозиторияУчастники получают пустой forkСоздайте и наполните шаблон до старта
Не настроен SSOУчастники не находятся на провайдереУбедитесь, что SSO работает для всех
Слишком широкие праваУчастники видят чужие репозиторииИспользуйте подгруппы для изоляции

Частые вопросы

В: Участник не может получить доступ к репозиторию. Что делать?

О: Проверьте, что пользователь залогинен на провайдере через SSO. Если используется обычный токен (не admin), система ищет по username — убедитесь, что username на провайдере совпадает с производным от email.

В: Можно ли изменить шаблон после того, как команды создали fork?

О: Да, но изменения не попадут в существующие fork-и. Участникам нужно будет вручную подтянуть изменения через git pull upstream.

В: Как добавить нового члена команды в уже созданный репозиторий?

О: Доступ выдаётся автоматически при создании репозитория для всех текущих членов команды. Если участник присоединился позже, его нужно добавить вручную на провайдере.

В: Организатор не видит репозитории команд. Что делать?

О: Убедитесь, что организатор добавлен с уровнем EDIT или OWNER. Доступ VIEW и CURATOR не даёт прав на Git-провайдере. Если организатор был добавлен до создания интеграции — его доступ был выдан автоматически. Если после — доступ синхронизируется при добавлении.

В: Поддерживается ли приватный GitLab?

О: Да. Укажите URL вашего GitLab в поле Base URL и используйте токен с вашего сервера.

Связанные статьи

Последнее обновление: 18.03.2026
К оглавлению