GUI Bootstrap Manager — это desktop-приложение на PySide6 для автоматизации создания новых проектов через графический интерфейс.
Программа не является конечным продуктом для обычного пользователя. Это внутренний инженерный инструмент, который помогает:
- выбрать технологический стек;
- проверить наличие нужных инструментов разработки;
- подготовить среду через PowerShell provisioning;
- сгенерировать структуру нового проекта из шаблонов;
- выполнить начальную инициализацию выбранного стека;
- открыть созданный проект на диске.
Если кратко: программа заменяет ручной bootstrap нового проекта на управляемый GUI-сценарий.
Приложение выполняет следующий основной цикл:
- Запускает окно на
PySide6. - Дает ввести имя проекта и выбрать папку назначения.
- Позволяет выбрать один из поддерживаемых типов проекта.
- Проверяет наличие обязательных инструментов для выбранного стека.
- При необходимости запускает provisioning среды через
PowerShellиwinget. - Создает новую папку проекта.
- Генерирует файлы из шаблонов в каталоге
templates/. - Выполняет стек-специфичную инициализацию.
- Добавляет служебные файлы и метаданные.
- При включенной опции выполняет
git init. - Позволяет открыть созданную папку проекта из интерфейса.
- Стек:
Wails + React + TypeScript + Tailwind - Ключ стека:
go - Проверяемые инструменты:
git,go,node,npm,wails - Профиль provisioning:
go - Инициализация после генерации:
wails init
Назначение: создание desktop-приложения на Go с web-интерфейсом через Wails.
- Стек:
.NET + WinUI 3 + Windows App SDK + XAML - Ключ стека:
cs - Проверяемые инструменты:
git,dotnet - Профиль provisioning:
cs - Инициализация после генерации:
dotnet new winui
Назначение: создание Windows-приложения на C# с нативным UI через WinUI 3.
- Стек:
PySide6 + Qt Quick + QML + PyInstaller + Nuitka - Ключ стека:
python - Проверяемые инструменты:
git,python - Профиль provisioning:
python - Инициализация после генерации:
- создание
venv; - обновление
pip; - установка зависимостей из
requirements.txt
- создание
Назначение: создание desktop-приложения на Python с GUI через Qt/QML.
- Стек:
Astro + TypeScript + Tailwind - Ключ стека:
astro - Проверяемые инструменты:
git,node,npm - Профиль provisioning:
web - Инициализация после генерации:
npm create astro@latest
Назначение: создание статического сайта или лендинга.
- Стек:
Next.js + TypeScript + React + Tailwind - Ключ стека:
next - Проверяемые инструменты:
git,node,npm - Профиль provisioning:
web - Инициализация после генерации:
npx create-next-app@latest
Назначение: создание web-приложения на Next.js.
- Стек:
Docusaurus + TypeScript + MDX - Ключ стека:
docs - Проверяемые инструменты:
git,node,npm - Профиль provisioning:
docs - Инициализация после генерации:
npx create-docusaurus@latest
Назначение: создание сайта документации.
-
main.py- Минимальная точка входа.
- Делегирует запуск в
app.main.run().
-
app/main.py- Создает
QApplication. - Настраивает имя приложения и организацию.
- Создает
MainWindow. - Показывает окно.
- Запускает Qt event loop.
- Создает
app/window.py- Главный модуль интерфейса.
- Создает форму с полями:
- имя проекта;
- папка назначения;
- стек;
git init;Upgrade при provisioning.
- Содержит действия пользователя:
- выбор папки;
- проверка инструментов;
- запуск provisioning;
- создание проекта;
- открытие папки проекта.
- Заполняет таблицу статусов инструментов.
- Пишет сообщения в лог.
- Показывает ошибки через
QMessageBox.
app/models.py- Описывает структуру
StackDefinition. - Хранит словарь
STACKSсо всеми поддерживаемыми типами проектов. - Определяет
DEFAULT_PROJECT_ROOT.
- Описывает структуру
app/services/tooling.py- Ищет системные команды через
shutil.which. - Определяет версии инструментов через
subprocess.run. - Возвращает список статусов для отображения в таблице GUI.
- Ищет системные команды через
app/services/provisioning.py- Находит
provisioning/setup_env.ps1. - Проверяет, что скрипт существует.
- Разрешает provisioning только на Windows.
- Запускает
powershellс параметрами профиля и опцией-Upgrade.
- Находит
app/services/generator.py- Основной модуль генерации.
- Проверяет валидность выбранного стека.
- Нормализует имя проекта.
- Создает директорию проекта и базовые подпапки.
- Рендерит шаблоны из
templates/<stack>/. - Копирует обычные файлы и обрабатывает
.j2шаблоны черезJinja2. - Выполняет стек-специфичную инициализацию.
- Записывает служебные файлы:
CHANGELOG.md;- локали;
.cursorrules;.windsurfrules;AGENTS.md;.editorconfig;.gitignore;.env.example;bootstrap.meta.json.
- При необходимости выполняет
git init.
-
app/utils.py- Содержит вспомогательные функции работы с путями и именем проекта.
-
app/widgets/log_view.py- Реализует виджет текстового лога для главного окна.
Пользователь запускает main.py. Открывается главное окно приложения.
Пользователь:
- вводит имя проекта;
- выбирает папку назначения;
- выбирает технологический стек;
- при необходимости включает
git init.
После выбора стека программа:
- автоматически проверяет нужные инструменты;
- показывает, какие из них найдены;
- показывает путь к команде и версию, если она доступна.
Если в системе не хватает инструментов, пользователь может запустить provisioning:
- выбирается профиль по стеку;
- вызывается
setup_env.ps1; - установка идет через
wingetи стек-специфичные команды.
После нажатия на кнопку создания программа:
- Проверяет имя проекта.
- Нормализует его для безопасного имени папки.
- Создает структуру каталогов.
- Рендерит шаблоны выбранного стека.
- Запускает первичную инициализацию фреймворка.
- Создает общие служебные файлы.
- При необходимости выполняет
git init.
После успешного завершения программа:
- пишет путь проекта в лог;
- показывает количество созданных файлов;
- выводит результат framework-init;
- позволяет открыть папку проекта из интерфейса.
Вне зависимости от стека программа создает базовые каталоги:
srcassetsassets/localesdocstestsbuildscriptstools
Также создаются общие файлы:
CHANGELOG.mdassets/locales/en.jsonassets/locales/ru.jsonassets/locales/uk.json.cursorrules.windsurfrulesAGENTS.md.editorconfig.gitignore.env.examplebootstrap.meta.json
Дополнительно создаются стек-специфичные файлы из каталога templates/.
Вывод процесса provisioning читается синхронно через stdout.read(). Пока PowerShell-скрипт не завершится, GUI может зависать.
При генерации имя проекта нормализуется, а при открытии папки используется исходный ввод пользователя. Если имя содержит запрещенные символы, папка может быть создана с одним именем, а открытие будет искать другое.
Даже если обязательные инструменты не найдены, пользователь все равно может запустить создание проекта. Это может привести к частично сгенерированному проекту без успешной framework-init стадии.
Если внешняя команда недоступна, генератор не всегда падает с ошибкой. Вместо этого он может просто вернуть текст о пропуске или ошибке. В результате проект может выглядеть созданным, но быть неполным.
git init вызывается без явного контроля результата и без обязательного логирования причины сбоя.
Проект ориентирован на Windows-среду:
- provisioning через
PowerShell; - установка через
winget; - генерация
.batскриптов; - отдельная поддержка WinUI и Windows SDK.
Часть функций на других ОС либо не работает, либо работает ограниченно.
Это GUI-оркестратор для стандартизированного старта новых проектов под несколько стеков. Его задача не в разработке прикладной логики, а в том, чтобы быстро подготовить основу нового репозитория, проверить инструменты, установить зависимости среды и создать рабочий стартовый scaffold.