Подключение GitHub
Выбирайте учётные данные по выполняемой операции. Механизмы аутентификации этих сценариев не взаимозаменяемы. Матрица описывает поведение репозитория, а не готовый сервис GitHub App, размещённый на стороне Dee Wan.
Матрица сценариев
Заголовок раздела «Матрица сценариев»| Сценарий | Аутентификация и условия | Что сохраняется |
|---|---|---|
| Вход в админку и активация первого администратора | Приложение GitHub OAuth App, настроенное оператором. Бэкенду нужны GITHUB_CLIENT_ID и секрет GITHUB_CLIENT_SECRET. Callback: BACKEND_URL + /api/auth/callback/github. GitHub должен вернуть основной подтверждённый email, точно совпадающий с адресом существующего аккаунта или с адресом, привязанным к первому администратору. |
Идентификатор аккаунта GitHub привязывается к единственному аккаунту CMS с тем же нормализованным email. Access token, refresh token и ID token провайдера не сохраняются. |
| Админка Настройки → Код и публикация | Приложение GitHub App, настроенное оператором. Бэкенду нужны GITHUB_APP_ID, GITHUB_APP_SLUG, GITHUB_APP_CLIENT_ID, GITHUB_APP_CLIENT_SECRET, GITHUB_APP_PRIVATE_KEY, а также допустимые BACKEND_URL и FRONTEND_URL. Callback приложения: BACKEND_URL + /api/source/github/callback. Пользователю нужны site:infra и чтение моделей. |
Сохраняется привязка установки и репозитория. Токены установки действуют недолго, ограничены выбранным репозиторием и отзываются после использования. Личный токен не заменяет этот сценарий. |
npm run wire:github |
OAuth device flow GitHub с DEEWAN_GITHUB_CLIENT_ID. Для настройки Cloudflare нужны CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID и DEE_WAN_URL. --project обязателен. Секреты шифруются только после чтения точного коммита с сервера. |
Авторизованный CLI записывает секреты и переменные репозитория. Учётные данные device flow остаются в памяти процесса. Конфигурация вебхука выводится, но не сохраняется в CMS автоматически. |
npm run backend:deliver |
Device flow с DEEWAN_GITHUB_CLIENT_ID, а не App админки. Также нужны целевой репозиторий, исходная БД и пути для сохранения результата, аккаунт и токен Cloudflare, API_BEARER_TOKEN и PUBLIC_HOSTNAME. Выбранный перенос медиа требует собственных учётных данных источника и назначения. |
Остаются сгенерированный репозиторий и развёртывание. Учётные данные device flow не записываются в конфигурацию git или журнал CMS. После успешной проверки предлагается план отделения. Автоматического отделения нет. |
| Необязательное подключение GitHub в установщике | DEEWAN_GITHUB_APP_SLUG только включает ссылку на установку App. |
Это не конфигурация App бэкенда из пяти переменных и не замена device flow обоих CLI. |
Разрешения и отказы
Заголовок раздела «Разрешения и отказы»GitHub OAuth App для входа в CMS отличается от GitHub App для передачи исходников и от приложения CLI device flow. Его идентификатор клиента и секрет не дают прав на отправку исходников в репозиторий.
Токенам источника в админке нужны права репозитория contents:write, workflows:write, metadata:read. Для развёртывания также нужны actions:write, secrets:write, variables:write. Система проверяет, что выбран именно тот репозиторий, к которому подключено приложение. Если приложение GitHub App не настроено на бэкенде, операция отклоняется с github_app_not_configured. Автоматического перехода на device flow в этом интерфейсе нет.
Отдельные учётные данные вебхука сборки, которые выводит wire:github, — это fine-grained токен для этого репозитория с Contents: read и Actions: write. Не используйте device-токен как сохраняемый секрет вебхука. Проверьте и сохраните выведенную конфигурацию в разделе Код и публикация → Дополнительно — вебхук сборки и развёртывание через авторизованную сессию CMS.
Управляемая публикация локального коммита
Заголовок раздела «Управляемая публикация локального коммита»Сначала локально сгенерируйте сайт Astro и бэкенд. Попытка генерации на стороне размещённой CMS по-прежнему завершается отказом source_build_runtime_unavailable. Подключите GitHub App для исходников к нужному приватному репозиторию владельца, затем выполните:
npm run wire:github -- --repo owner/site-source --project ./generated/site --managed --operation delivery-20260920-1Для новой операции публикации используйте новый постоянный идентификатор операции. Пользователю нужны site:infra, site:deploy и чтение всех генерируемых моделей. Передайте DEE_WAN_SESSION_COOKIE через окружение CLI, а в DEE_WAN_SESSION_ORIGIN укажите origin интерфейса CMS. DEE_WAN_URL — origin бэкенда. CLI передаёт сессию только на этот адрес CMS. Эти значения не попадают в сгенерированный проект.
До изменений репозитория подготовьте CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_API_TOKEN, API_BEARER_TOKEN, DEE_WAN_HOSTNAME (имя хоста развёрнутого бэкенда), ASTRO_ORIGIN (ожидаемый публичный HTTPS origin Astro) и учётные данные выбранных способов входа артефакта, описанные ниже. Авторизация GitHub не даёт доступа к Cloudflare. До коммита настройте мост предпросмотра сайта для нужного публичного API CMS.
CLI создаёт коммит и отправляет его через Git, считывает полный удалённый коммит и проверяет манифест. Только после этого он шифрует секреты для репозитория владельца. CMS сохраняет сайт, операцию, попытку, версию исходников и точный коммит. От build token сохраняются только идентификатор и HMAC. Учётные данные Cloudflare не попадают в запросы CMS, журнал, манифест или сгенерированные файлы. Запуск передаёт точный коммит. Workflow извлекает и проверяет его перед выполнением скрипта развёртывания.
После прерывания сохраните идентификатор операции. Добавляйте --resume только после остановки предыдущего процесса CLI, пока операция готовит секреты: старый build token заменяется и отзывается. После начала dispatch используйте --reconcile с тем же идентификатором. Сверка читает соответствующий запуск GitHub и ничего не запускает повторно. Отсутствующий, неоднозначный или недоступный запуск оставляет операцию заблокированной с неизвестным исходом. Не обходите блокировку новой операцией. Успех CLI означает подтверждение запуска GitHub, а не завершённое развёртывание или активацию предпросмотра.
Только управляемый workflow сообщает о завершении через существующий build token с привязанными операцией, попыткой, коммитом и развёрнутым origin Astro. Workflow развёртывания только из репозитория не вызывает CMS. Полученный origin сохраняется как непроверенный. Конфликтующий повтор сообщения отклоняется, точный повтор может вернуть сохранённый результат. В разделе Код и публикация вошедший пользователь с site:settings выбирает доступный сохранённый артефакт и запускает проверку предпросмотра. Этим действием можно активировать только сообщённый адрес. Если развёртывание или проверка завершается ошибкой, прежний обработчик отображения остаётся активным.
Реальная авторизация установки и callback GitHub, подключение приватного репозитория владельца, шифрование секретов и отзыв токенов, сверка Actions, развёртывание Cloudflare, DNS, callback развёрнутой системы и проверка предпросмотра остаются внешними этапами приёмки.
Источники и следующая задача
Заголовок раздела «Источники и следующая задача»Поведение определяют исходники: backend/src/api/source-delivery.ts, backend/src/lib/github/credentials.ts, scripts/github-start.ts, scripts/github.ts, scripts/exit-start.ts и scripts/install-web.ts. Перед запуском CLI прочитайте его фактическую справку. Эта страница не выдаёт и не создаёт учётные данные. Далее — установка или отделение.
Отключение входа через GitHub
Заголовок раздела «Отключение входа через GitHub»Выберите Безопасность аккаунта в меню учётной записи, чтобы проверить и отвязать собственное подключение входа через GitHub. В подтверждении назван GitHub и есть предупреждение, что завершатся все сессии CMS, включая текущую. Операция выполняется атомарно и отклоняет удаление, если ни у одного активного суперадмина не останется включённого, настроенного и пригодного способа входа. Она не меняет отдельную установку GitHub App для передачи исходников или учётные данные CLI.
См. безопасность учётной записи и процедуру приёмки с реальными провайдерами, которую проводит ведущий. Локальные фикстуры не подтверждают успешный callback GitHub.
Учётные данные входа в артефакт
Заголовок раздела «Учётные данные входа в артефакт»Необязательный Better Auth в сгенерированном бэкенде — отдельная система идентификации. GitHub OAuth-приложение артефакта использует <ARTIFACT_ORIGIN>/api/auth/callback/github и отделено от OAuth CMS, GitHub App для передачи исходников и device-авторизации CLI. Выберите методы в разделе Код и публикация. Учётные данные нужны только для выбранных провайдеров; их следует явно указать для целевого бэкенда. Имена Actions secrets имеют префикс ARTIFACT_, включая ARTIFACT_GITHUB_CLIENT_ID и ARTIFACT_GITHUB_CLIENT_SECRET. При публикации система создаёт новый секрет аутентификации артефакта, шифрует значения целевым публичным ключом и сохраняет существующие секреты без ротации. Учётные записи CMS, их пароли и ключи провайдеров не копируются.
Стабильная версия ещё не выпущена (pre-MVP)
Коммит исходного кода: fe23db481c422b40e317b92fc98116b4c0c26a87 (с локальными изменениями)
Дата сборки (UTC): 2026-10-18T09:22:34.630Z
Коммит для обновления: не определён: в рабочей копии есть изменения. Примечания к выпуску