Задача
«Наши пользователи описывают, чего хотят. В итоге у них должна быть страница по адресу — не архив, не черновик и не задача на нашей стороне».
Разрыв между сгенерированной страницей и опубликованной — то место, где тихо заканчивается большинство «ИИ-конструкторов сайтов». Сделать HTML легко; дальше нужен бакет, нужно включить хостинг, положить файлы, направить DNS — и кто-то должен отвечать за случай, когда третий шаг прошёл, а четвёртый нет. Именно из-за этой обвязки функция обычно заканчивается ZIP-архивом.
Что делает Forge
Один прогон — от фразы до адреса:
Дизайнер превращает описание в саму страницу.
Публикатор берёт на себя неблагодарную половину: создаёт бакет, включает на нём хостинг статического сайта, загружает файлы и обновляет DNS-запись, чтобы поддомен резолвился. Облачные учётные данные разрешаются на стороне сервера и не попадают в контекст модели — правило то же, что и везде в Forge.
Прогон возвращает URL, а поскольку это обычный прогон workflow, он оставляет и обычную запись о том, как к нему пришёл.
Почему важна именно такая форма
Это API, а не страница в нашей панели. Один POST запускает сборку, результат забирается опросом. Значит, возможность не обязана быть функцией нашего продукта — она может быть функцией вашего. Продукт, который собирает описание от своих пользователей, может отдать им живой сайт, не эксплуатируя ни хранилище, ни DNS, ни сборочный конвейер.
Арендатор определяется вызывающим токеном, поэтому сайты одного клиента отделены от сайтов другого по конструкции, а не по договорённости.
Честное состояние
Отгружено и проверено вживую: бриф → сгенерированный сайт → бакет и хостинг → загрузка → CDN с сертификатом для HTTPS → DNS → работающий URL, плюс список ревизий, откат на выбранную и удаление сайта.
Настоящим это сделали именно живые смоуки. Они поймали четыре дефекта, которые юнит-тесты поймать не могли: облачный API, потребовавший другой content-type; инструмент, зарегистрированный на одном пути исполнения и отсутствующий на другом; три недостающих IAM-гранта; и enum, который обязан быть в верхнем регистре. Зелёная сборка — это ещё не работающий пайплайн, поэтому мы смоукаем по-настоящему, прежде чем что-то называть готовым.
Всё ещё узко, и мы предпочитаем это назвать: отгруженный адаптер работает с объектным хранилищем, CDN и DNS одного облака; сама форма workflow к нему не привязана, но остальные адаптеры пока не написаны. Очень большие многофайловые сборки упираются в потолок размера запроса, который мы не поднимали. Распространение сертификата на границе облака на свежем домене может занять часы — это уже их сторона, а не наша, но это реально и это стоит закладывать.
Что под капотом
- Workflow Engine — цепочка из двух ролей за прогоном
- Secrets & Egress — почему облачные ключи не доходят до агента
- Media Generation — картинки для страницы через тот же шлюз
- Git-Backed Audit — что было сгенерировано и задеплоено, зафиксировано