Этот репозиторий готовится для лабораторной работы №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 и доступности сайта в локальном валидаторе не реализована.