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,153 @@
{% extends "base.html" %}
{% block title %}Настройки Docker - DevOpsLab{% endblock %}
{% block page_title %}Настройки Docker (Harbor и Docker Hub){% endblock %}
{% block header_actions %}
<a href="/profile" class="btn btn-secondary btn-sm">
<i class="fas fa-arrow-left me-2"></i>
Назад к профилю
</a>
{% endblock %}
{% block content %}
<div class="row">
<!-- Docker Hub настройки -->
<div class="col-12 col-lg-6 mb-3">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<i class="fab fa-docker me-2"></i>
Docker Hub
</h5>
</div>
<div class="card-body">
<form
hx-post="/api/v1/profile/docker-settings"
hx-target="#docker-result"
hx-swap="innerHTML"
>
<div class="mb-3">
<label class="form-label">Имя пользователя</label>
<input
type="text"
name="dockerhub_username"
value="{{ profile.dockerhub_username if profile and profile.dockerhub_username else '' }}"
class="form-control"
placeholder="username"
>
</div>
<div class="mb-3">
<label class="form-label">Пароль / Access Token</label>
<input
type="password"
name="dockerhub_password"
value=""
class="form-control"
placeholder="Оставьте пустым, чтобы не изменять"
>
<div class="form-text">
Используйте Access Token вместо пароля для большей безопасности
</div>
</div>
<div class="mb-3">
<label class="form-label">Репозиторий по умолчанию</label>
<input
type="text"
name="dockerhub_repository"
value="{{ profile.dockerhub_repository if profile and profile.dockerhub_repository else '' }}"
class="form-control"
placeholder="ansible-lab"
>
<div class="form-text">
Имя репозитория (без namespace)
</div>
</div>
<div id="docker-result" class="mb-3"></div>
<button type="submit" class="btn btn-primary w-100">
<i class="fas fa-save me-2"></i>
Сохранить настройки Docker Hub
</button>
</form>
</div>
</div>
</div>
<!-- Harbor настройки -->
<div class="col-12 col-lg-6 mb-3">
<div class="card">
<div class="card-header">
<h5 class="mb-0">
<i class="fas fa-server me-2"></i>
Harbor
</h5>
</div>
<div class="card-body">
<form
hx-post="/api/v1/profile/docker-settings"
hx-target="#harbor-result"
hx-swap="innerHTML"
>
<div class="mb-3">
<label class="form-label">URL Harbor</label>
<input
type="url"
name="harbor_url"
value="{{ profile.harbor_url if profile and profile.harbor_url else '' }}"
class="form-control"
placeholder="https://harbor.example.com"
>
</div>
<div class="mb-3">
<label class="form-label">Имя пользователя</label>
<input
type="text"
name="harbor_username"
value="{{ profile.harbor_username if profile and profile.harbor_username else '' }}"
class="form-control"
placeholder="admin"
>
</div>
<div class="mb-3">
<label class="form-label">Пароль</label>
<input
type="password"
name="harbor_password"
value=""
class="form-control"
placeholder="Оставьте пустым, чтобы не изменять"
>
</div>
<div class="mb-3">
<label class="form-label">Проект</label>
<input
type="text"
name="harbor_project"
value="{{ profile.harbor_project if profile and profile.harbor_project else '' }}"
class="form-control"
placeholder="library"
>
<div class="form-text">
Имя проекта в Harbor
</div>
</div>
<div id="harbor-result" class="mb-3"></div>
<button type="submit" class="btn btn-primary w-100">
<i class="fas fa-save me-2"></i>
Сохранить настройки Harbor
</button>
</form>
</div>
</div>
</div>
</div>
{% endblock %}