softdevtools-dns

Учебные поддомены softdevtools.ru

Этот репозиторий готовится для лабораторной работы №5 по лекции №6 курса «Инструментальные средства разработки программного обеспечения». Студент публикует простую страницу на GitHub Pages, предлагает поддомен вида student.softdevtools.ru через Pull Request (PR) и проверяет, как DNS связывает имя с сайтом.

Статус: публичный пилот. Проверка заявок и автоматическая запись в Cloudflare работают: пилотная заявка denis-radchenko применена после merge PR #4. Приём заявок от учебных групп ещё не открыт. Сейчас проверяется полный сценарий из отдельного GitHub-аккаунта. Перед выдачей лабораторной нужны этот пилот, защита main и проверенная инструкция для студентов.

Что здесь описано

Исходная рабочая спецификация хранится отдельно. Документы здесь отражают последующее обсуждение: GitHub Pages вместо Teletype; index.md или index.html; минимальная страница без требований к дизайну; HTTP как промежуточная проверка и отдельное подтверждение HTTPS.

Границы репозитория

После подготовки здесь будут храниться только инструкции, технические заявки на CNAME и код проверок/применения DNS. Секрет Cloudflare должен находиться в GitHub Actions Secrets, иметь право DNS Edit только для softdevtools.ru и использоваться только после принятия PR. Наличие секрета в GitHub Actions не делает код безопасным само по себе: перед приёмом заявок студентов нужны защита ветки, контроль workflow и проверка содержимого.

ФИО, группы, контактные email, ответы закрытой формы и список соответствий «студент ↔ GitHub-аккаунт» здесь не хранятся. Вариант отдельного закрытого реестра остаётся задачей на обсуждение в методическом репозитории курса.

Структура

records/             одобренные заявки, включая пилотную
examples/ivan-ivanov.yaml  пример заявки; не создаёт DNS-запись
config/              зарезервированные имена
scripts/validate.py  локальная проверка заявок
scripts/validate_pr.py  проверка файлов, изменённых в студенческом PR
scripts/apply_dns.py  планирование и применение CNAME через Cloudflare API
tests/               тесты проверки
docs/                инструкции и технические решения

Проверка опубликованного сайта ещё не реализована; добавлять заявки студентов рано. Action проверяет YAML и тесты на каждом PR и после слияния в main. Для PR из fork он проверяет только новые файлы records/*.yaml кодом из базовой ветки, не исполняя код PR. Секрет Cloudflare в нём не используется. Отдельный workflow рассматривает только слитые PR в main, изменившие records/*.yaml. Переменная CLOUDFLARE_DNS_DEPLOY_ENABLED=true включает запись; успешный пилот описан в инструкции преподавателя. Методические решения и оценивание лабораторной остаются в закрытом репозитории курса.

Локальная проверка заявок

Установите Python 3.11+ и зависимость PyYAML (версия указана в pyproject.toml). Затем из корня репозитория выполните:

python3 -m pip install 'PyYAML>=6.0,<7'
python3 -m scripts.validate .
python3 -m unittest discover -s tests -v

Первая команда возвращает код 0 для корректного дерева records/ и код 1 с перечислением ошибок для некорректного. Она читает только локальные файлы. Проверка личности автора PR, права на уже принятое имя, актуального состояния Cloudflare и доступности сайта в локальном валидаторе не реализована.