#!/bin/bash # Скрипт для сборки и публикации Docker образа set -e # Цвета для вывода RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color # Конфигурация REGISTRY="${DOCKER_REGISTRY:-ghcr.io}" USERNAME="${DOCKER_USERNAME:-username}" IMAGE_NAME="buh_bot" VERSION="${BOT_VERSION:-latest}" echo -e "${GREEN}🔨 Сборка Docker образа для BUH Bot${NC}" echo "Registry: $REGISTRY" echo "Username: $USERNAME" echo "Version: $VERSION" echo "" # Проверка авторизации echo -e "${YELLOW}Проверка авторизации в registry...${NC}" if ! docker info | grep -q "Username"; then echo -e "${RED}❌ Не авторизован в Docker registry${NC}" echo "Выполните: docker login $REGISTRY" exit 1 fi # Сборка образа echo -e "${YELLOW}📦 Сборка образа...${NC}" docker build \ --tag "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" \ --tag "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest" \ --build-arg BUILD_DATE="$(date -u +'%Y-%m-%dT%H:%M:%SZ')" \ --build-arg VCS_REF="$(git rev-parse --short HEAD)" \ . if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Образ успешно собран${NC}" else echo -e "${RED}❌ Ошибка сборки образа${NC}" exit 1 fi # Тестирование образа echo -e "${YELLOW}🧪 Тестирование образа...${NC}" docker run --rm "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" python -c " import sys from modules.moysklad_client import MoySkladClient from modules.validator import OrderValidator from modules.user_manager import UserManager print('✅ Все модули импортированы успешно') " if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Тестирование пройдено${NC}" else echo -e "${RED}❌ Ошибка тестирования${NC}" exit 1 fi # Публикация образа echo -e "${YELLOW}📤 Публикация образа в registry...${NC}" docker push "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" docker push "${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest" if [ $? -eq 0 ]; then echo -e "${GREEN}✅ Образ успешно опубликован${NC}" echo "" echo "📦 Образы доступны:" echo " ${REGISTRY}/${USERNAME}/${IMAGE_NAME}:${VERSION}" echo " ${REGISTRY}/${USERNAME}/${IMAGE_NAME}:latest" echo "" echo "🚀 Для деплоя используйте:" echo " ./deploy-prod.sh" else echo -e "${RED}❌ Ошибка публикации образа${NC}" exit 1 fi