feat: добавлена пометка типа операции (Build/Push) в истории сборок Dockerfile

- Добавлена колонка 'Тип' во все таблицы истории сборок
- Для push операций отображается registry вместо платформ
- Сохранение пользователя при создании push лога
- Исправлена ошибка с logger в push_docker_image endpoint
- Улучшено отображение истории сборок с визуальными индикаторами
This commit is contained in:
Сергей Антропов
2026-02-15 22:59:02 +03:00
parent 23e1a6037b
commit 1fbf9185a2
232 changed files with 38075 additions and 5 deletions

View File

@@ -0,0 +1,20 @@
<nav class="bg-blue-600 text-white shadow-lg">
<div class="container mx-auto px-4">
<div class="flex justify-between items-center py-4">
<div class="flex items-center space-x-4">
<a href="/" class="text-2xl font-bold">DevOpsLab</a>
<div class="flex space-x-4">
<a href="/" class="hover:bg-blue-700 px-3 py-2 rounded">Dashboard</a>
<a href="/roles" class="hover:bg-blue-700 px-3 py-2 rounded">Роли</a>
<a href="/presets" class="hover:bg-blue-700 px-3 py-2 rounded">Preset'ы</a>
<a href="/tests" class="hover:bg-blue-700 px-3 py-2 rounded">Тесты</a>
<a href="/docker" class="hover:bg-blue-700 px-3 py-2 rounded">Docker</a>
<a href="/vault" class="hover:bg-blue-700 px-3 py-2 rounded">Vault</a>
</div>
</div>
<div class="flex items-center space-x-4">
<span class="text-sm">v1.0.0</span>
</div>
</div>
</div>
</nav>

View File

@@ -0,0 +1,155 @@
<aside class="sidebar" id="sidebar" aria-label="Главное меню">
<div class="sidebar-resize-handle" id="sidebar-resize-handle" title="Изменить ширину" aria-hidden="true"></div>
<div class="sidebar-header">
<a href="/" class="sidebar-brand" title="DevOpsLab">
<i class="fas fa-cogs brand-icon"></i>
<div class="sidebar-brand-text-column">
<div class="sidebar-header-badges">
<span class="sidebar-version-badge" title="Версия">v1.0.0</span>
</div>
<span class="brand-text">AnsibleLab</span>
</div>
</a>
<button type="button" class="sidebar-collapse-btn" id="sidebar-collapse-btn" aria-label="Свернуть меню" title="Свернуть меню">
<i class="fas fa-chevron-left sidebar-collapse-icon" aria-hidden="true"></i>
</button>
</div>
<nav class="sidebar-nav">
<ul class="sidebar-menu">
<li class="sidebar-menu-item">
<a href="/" class="sidebar-menu-link {% if request.url.path == '/' %}active{% endif %}" title="Дашборд">
<i class="fas fa-tachometer-alt menu-icon"></i>
<span class="menu-text">Дашборд</span>
</a>
</li>
<li class="sidebar-menu-divider"></li>
<li class="sidebar-menu-item">
<a href="/roles" class="sidebar-menu-link {% if request.url.path.startswith('/roles') and not request.url.path.startswith('/roles/create') and not request.url.path.startswith('/roles/import') %}active{% endif %}" title="Роли">
<i class="fas fa-tasks menu-icon"></i>
<span class="menu-text">Роли</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/lint" class="sidebar-menu-link {% if request.url.path.startswith('/lint') %}active{% endif %}" title="Проверка синтаксиса">
<i class="fas fa-check-circle menu-icon"></i>
<span class="menu-text">Линтинг</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/playbooks" class="sidebar-menu-link {% if request.url.path.startswith('/playbooks') %}active{% endif %}" title="Плейбуки">
<i class="fas fa-book menu-icon"></i>
<span class="menu-text">Плейбуки</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/deploy" class="sidebar-menu-link {% if request.url.path.startswith('/deploy') %}active{% endif %}" title="Деплой">
<i class="fas fa-rocket menu-icon"></i>
<span class="menu-text">Деплой</span>
</a>
</li>
<li class="sidebar-menu-divider"></li>
<li class="sidebar-menu-item">
<a href="/docker" class="sidebar-menu-link {% if request.url.path.startswith('/docker') and not request.url.path.startswith('/dockerfiles') %}active{% endif %}" title="Docker образы">
<i class="fab fa-docker menu-icon"></i>
<span class="menu-text">Docker</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/vault" class="sidebar-menu-link {% if request.url.path.startswith('/vault') %}active{% endif %}" title="Ansible Vault">
<i class="fas fa-lock menu-icon"></i>
<span class="menu-text">Vault</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/k8s" class="sidebar-menu-link {% if request.url.path.startswith('/k8s') %}active{% endif %}" title="Kubernetes">
<i class="fas fa-cube menu-icon"></i>
<span class="menu-text">Kubernetes</span>
</a>
</li>
<li class="sidebar-menu-divider"></li>
<li class="sidebar-menu-item sidebar-dropdown-item" id="tools-menu">
<a href="#" class="sidebar-menu-link sidebar-dropdown-toggle {% if request.url.path.startswith('/roles/create') or request.url.path.startswith('/presets/create') or request.url.path.startswith('/roles/import') %}active{% endif %}" onclick="toggleToolsMenu(event)" title="Инструменты">
<i class="fas fa-tools menu-icon"></i>
<span class="menu-text">Инструменты</span>
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sidebar-dropdown-menu">
<li class="sidebar-menu-item">
<a href="/roles/create" class="sidebar-menu-link {% if request.url.path == '/roles/create' %}active{% endif %}" title="Создать роль">
<i class="fas fa-plus menu-icon"></i>
<span class="menu-text">Создать роль</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/roles/import" class="sidebar-menu-link {% if request.url.path == '/roles/import' %}active{% endif %}" title="Импортировать роль">
<i class="fas fa-download menu-icon"></i>
<span class="menu-text">Импортировать роль</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/presets/create" class="sidebar-menu-link {% if request.url.path == '/presets/create' %}active{% endif %}" title="Создать preset">
<i class="fas fa-plus menu-icon"></i>
<span class="menu-text">Создать preset</span>
</a>
</li>
</ul>
</li>
<li class="sidebar-menu-item sidebar-dropdown-item" id="settings-menu">
<a href="#" class="sidebar-menu-link sidebar-dropdown-toggle {% if request.url.path.startswith('/dockerfiles') or request.url.path.startswith('/presets') %}active{% endif %}" onclick="toggleSettingsMenu(event)" title="Настройки">
<i class="fas fa-cog menu-icon"></i>
<span class="menu-text">Настройки</span>
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sidebar-dropdown-menu">
<li class="sidebar-menu-item">
<a href="/dockerfiles" class="sidebar-menu-link {% if request.url.path.startswith('/dockerfiles') %}active{% endif %}" title="Dockerfile">
<i class="fas fa-file-code menu-icon"></i>
<span class="menu-text">Dockerfiles</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/presets" class="sidebar-menu-link {% if request.url.path.startswith('/presets') and not request.url.path.startswith('/presets/create') %}active{% endif %}" title="Preset'ы">
<i class="fas fa-sliders-h menu-icon"></i>
<span class="menu-text">Пресеты Molecule</span>
</a>
</li>
</ul>
</li>
<li class="sidebar-menu-item sidebar-dropdown-item" id="profile-menu">
<a href="#" class="sidebar-menu-link sidebar-dropdown-toggle {% if request.url.path.startswith('/profile') %}active{% endif %}" onclick="toggleProfileMenu(event)" title="Профиль">
<i class="fas fa-user menu-icon"></i>
<span class="menu-text">Профиль</span>
<i class="fas fa-chevron-down dropdown-arrow"></i>
</a>
<ul class="sidebar-dropdown-menu">
<li class="sidebar-menu-item">
<a href="/profile" class="sidebar-menu-link {% if request.url.path == '/profile' %}active{% endif %}" title="Редактировать профиль">
<i class="fas fa-user-edit menu-icon"></i>
<span class="menu-text">Редактировать профиль</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/profile/docker-settings" class="sidebar-menu-link {% if request.url.path == '/profile/docker-settings' %}active{% endif %}" title="Настройки Docker">
<i class="fab fa-docker menu-icon"></i>
<span class="menu-text">Настройки Docker</span>
</a>
</li>
<li class="sidebar-menu-item">
<a href="/change-password" class="sidebar-menu-link {% if request.url.path == '/change-password' %}active{% endif %}" title="Смена пароля">
<i class="fas fa-key menu-icon"></i>
<span class="menu-text">Смена пароля</span>
</a>
</li>
</ul>
</li>
</ul>
</nav>
<div class="sidebar-footer">
<div class="sidebar-logout">
<a href="/api/v1/auth/logout" class="sidebar-menu-link btn-logout-sidebar" title="Выход">
<i class="fas fa-sign-out-alt menu-icon"></i>
<span class="menu-text">Выход</span>
</a>
</div>
</div>
</aside>