deployment-check.sh
Обзор
deployment-check.sh — это скрипт на Bash, предназначенный для проверки готовности проекта к развертыванию. Он автоматически проверяет наличие необходимых зависимостей, доступность портов, структуру проекта, успешность сборки смарт-контрактов и оффчейн-компонентов, а также корректность работы тестов и конфигурации Docker. В случае выявления проблем скрипт выводит подробную информацию и рекомендации по их устранению.
Скрипт значительно облегчает и автоматизирует подготовительный этап перед деплоем, минимизируя человеческие ошибки и обеспечивая стабильность разворачиваемой среды.
Описание функций
Цветовые константы и вспомогательные функции вывода
RED, GREEN, YELLOW, BLUE, NC — ANSI-коды для цветного форматирования вывода (красный, зелёный, жёлтый, синий и сброс цвета).
print_status(message)
Выводит информационное сообщение в зелёном цвете с префиксом [INFO].
Параметры:
message— строка, выводимая в консоль.
Пример использования:
print_status "Docker установлен"
print_warning(message)
Выводит предупреждение в жёлтом цвете с префиксом [WARNING].
Параметры:
message— предупреждающее сообщение.
print_error(message)
Выводит сообщение об ошибке в красном цвете с префиксом [ERROR].
Параметры:
message— текст ошибки.
print_header(title)
Выводит заголовок секции синим цветом с обрамлением из символов =.
Параметры:
title— название секции.
check_dependencies()
Проверяет наличие и версии всех необходимых внешних зависимостей:
Docker
Docker Compose
Foundry (
forgeиcast)Go
jq
Логика:
Для каждой зависимости проверяется доступность команды в PATH.
Если зависимость отсутствует, она добавляется в массив
missing_deps.В конце выводится список отсутствующих зависимостей и ссылки/команды по их установке.
Скрипт возвращает
0, если все зависимости найдены, и1при отсутствии хотя бы одной.
Пример вызова:
check_dependencies
check_ports()
Проверяет доступность ключевых портов, используемых проектом:
8545, 8546 — вероятно, для Ethereum-сетей/локальных нод
8081, 8082, 9091, 9092 — другие сервисные порты
Логика:
Используется
lsofдля проверки, слушается ли порт.Если порт занят, выводится предупреждение.
Возвращает 0, если все порты свободны, и 1 — если есть занятые.
check_project_structure()
Проверяет наличие обязательных файлов и каталогов в структуре проекта:
foundry.tomlpackage.jsongenerate_network.shoff-chain/go.modoff-chain/Makefilesrc/GameManager.solsrc/ManaToken.sol
Если какой-либо файл отсутствует — функция возвращает 1 и выводит ошибку.
build_contracts()
Собирает смарт-контракты проекта:
Устанавливает npm-зависимости (
npm install).Запускает сборку через Foundry (
forge build).Возвращает 0 при успешной сборке, 1 — при ошибках.
build_offchain()
Собирает оффчейн-компоненты:
Переходит в каталог
off-chain.Генерирует биндинги контрактов через
make generate-bindings.Компилирует Go-приложение
game_node.Возвращает 0 при успехе, 1 — при ошибке сборки.
run_tests()
Запускает тесты для смарт-контрактов через Foundry:
Выполняет
forge testс параметрами, исключающими тесты с названиемtestFork.Если тесты провалились, выводит предупреждение, но не останавливает процесс.
Возвращает всегда 0, позволяя продолжить деплой.
test_docker_deployment()
Проверяет корректность конфигурации Docker и Docker Compose:
Запускает скрипт
generate_network.shс вводом по умолчанию (4 оператора, 1 коммиттер, 1 агрегатор).Проверяет наличие директории
temp-network.Внутри неё проверяет валидность
docker compose config.Возвращает 0 при успешной проверке, 1 — при ошибках.
cleanup()
Удаляет временную директорию temp-network, если она существует.
main()
Основная функция запускающая все проверки и сборки последовательно:
Проверка зависимостей.
Проверка портов.
Проверка структуры проекта.
Сборка смарт-контрактов.
Сборка оффчейн-компонентов.
Запуск тестов (не критично для остановки).
Проверка Docker-деплоя.
Очистка временных файлов.
Вывод итогового отчета о готовности проекта.
Если все проверки прошли успешно — выводится инструкция по развертыванию.
Важные детали реализации
Используется
set -eдля немедленного выхода при ошибках в командах (за исключением тестов).Цветной вывод повышает читаемость логов.
Валидация портов и зависимостей помогает избежать типичных проблем перед деплоем.
Сценарий подразумевает запуск из корня проекта.
Используются стандартные инструменты Unix (
lsof,command -v,docker,forge,go,jq).
Взаимодействие с другими частями системы
Скрипт зависит от внешних инструментов и локальных скриптов/файлов:
generate_network.sh— скрипт генерации конфигурации сети.forgeиcast— инструменты Foundry для работы со смарт-контрактами.Go-компоненты в каталоге
off-chain.docker compose— для проверки и запуска контейнеров.
Вывод и рекомендации позволяют разработчикам быстро устранять проблемы.
Помогает интегрировать локальную разработку и CI-процессы.
Пример запуска
./deployment-check.sh
Mermaid-диаграмма: структура и взаимосвязь функций
flowchart TD
A[main] --> B[check_dependencies]
A --> C[check_ports]
A --> D[check_project_structure]
A --> E[build_contracts]
A --> F[build_offchain]
A --> G[run_tests]
A --> H[test_docker_deployment]
A --> I[cleanup]
subgraph Output Functions
J[print_status]
K[print_warning]
L[print_error]
M[print_header]
end
B --> J
B --> L
C --> J
C --> K
D --> J
D --> L
E --> J
E --> L
F --> J
F --> L
G --> J
G --> K
H --> J
H --> L
I --> J
Итог
deployment-check.sh — это удобный и многофункциональный инструмент для проверки инфраструктуры проекта перед развертыванием. Он повышает качество и предсказуемость процесса деплоя за счёт комплексной автоматической валидации. Рекомендуется запускать этот скрипт как часть CI/CD пайплайна и локальных подготовительных процедур.