Сборка из Исходного Кода

Это руководство охватывает сборку IceGate из исходного кода для разработки и продакшена.

Предварительные Требования

Обязательные

  • Rust >= 1.92.0 (для поддержки Rust 2024 edition)
  • Cargo (входит в Rust)
  • Git

Опциональные

  • Java (для регенерации ANTLR парсера)
  • Docker (для среды разработки)
  • protoc (для регенерации protobuf кода)

Установка Rust

# Установка через rustup
        curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
        
        # Проверка установки
        rustc --version
        cargo --version
        

Клонирование Репозитория

git clone https://github.com/icegatetech/icegate.git
        cd icegate
        

Сборка

Debug Сборка

cargo build
        

Артефакты сборки в target/debug/.

Release Сборка

cargo build --release
        

Артефакты сборки в target/release/.

Конкретные Бинарные Файлы

# Только сервис Query
        cargo build --bin query
        
        # Только сервис Ingest
        cargo build --bin ingest
        
        # Только сервис Maintain
        cargo build --bin maintain
        

Профили Сборки

Профиль Команда Назначение
dev cargo build Разработка, отладка
release cargo build --release Продакшен
test cargo test Запуск тестов
bench cargo bench Бенчмарки

Конфигурация Профилей

Пользовательские профили в Cargo.toml:

[profile.release]
        opt-level = 3
        lto = true
        codegen-units = 1
        
        [profile.dev]
        opt-level = 0
        debug = true
        

Структура Рабочего Пространства

IceGate использует Cargo workspace:

Cargo.toml (workspace)
        ├── crates/
        │   ├── icegate-common/Cargo.toml
        │   ├── icegate-catalog-s3/Cargo.toml
        │   ├── icegate-queue/Cargo.toml
        │   ├── icegate-query/Cargo.toml
        │   ├── icegate-ingest/Cargo.toml
        │   └── icegate-maintain/Cargo.toml
        

Сборка отдельных крейтов:

cargo build -p icegate-query
        cargo build -p icegate-common
        

Запуск Сервисов

Сервис Query

cargo run --bin query -- run -c config/docker/query.yaml
        

Сервис Ingest

cargo run --bin ingest -- run -c config/docker/ingest.yaml
        

Сервис Maintain

cargo run --bin maintain -- migrate create -c config/docker/maintain.yaml
        

Регенерация Парсера LogQL

Парсер LogQL генерируется из файлов грамматики ANTLR4.

Предварительные Требования

  • Java JDK 11+

Генерация Парсера

cd crates/icegate-query/src/logql
        
        # Установка ANTLR jar (первый раз)
        make install
        
        # Регенерация парсера из .g4 файлов
        make gen
        

Файлы грамматики находятся в crates/icegate-query/src/logql/antlr/.

Запуск Тестов

# Все тесты
        cargo test
        
        # Конкретный тест
        cargo test test_name
        
        # С выводом
        cargo test -- --nocapture
        
        # В release режиме (быстрее, но дольше собирается)
        cargo test --release
        

Качество Кода

# Проверка форматирования
        make fmt
        
        # Линтинг
        make clippy
        
        # Аудит безопасности
        make audit
        
        # Все проверки CI
        make ci
        

Устранение Проблем Сборки

Ошибки Компиляции

  1. Убедитесь, что версия Rust >= 1.92.0:

    rustup update
            
  2. Очистите артефакты сборки:

    cargo clean
            cargo build
            

Ошибки Линковки

Некоторые зависимости требуют системных библиотек:

macOS:

brew install openssl
        

Ubuntu/Debian:

apt install libssl-dev pkg-config
        

Нехватка Памяти

Крупные кодовые базы могут требовать больше памяти:

# Уменьшение параллелизма
        cargo build -j 2
        

Сборка Docker

Сборка контейнерных образов:

# Release-сборка (мульти-архитектурная, с кешем cargo-chef)
        docker build -t icegate/query:latest \
          --build-arg BINARY=query \
          -f config/docker/release.Dockerfile .
        
        # Dev-сборка (проще, одна архитектура)
        docker build -t icegate/query:dev \
          --build-arg BINARY=query \
          --build-arg PROFILE=debug \
          -f config/docker/Dockerfile .
        

Следующие Шаги