127 lines
4 KiB
Text
127 lines
4 KiB
Text
# Docker Compose Build Configuration
|
|
# Generates docker-compose file optimized for building all services with BuildKit caching
|
|
# Usage: nickel export --format yaml docker-compose.build.yml.ncl > docker-compose.build.yml
|
|
#
|
|
# Pattern:
|
|
# - Imports all service defaults to extract build configs
|
|
# - Generates build-only services (no runtime config)
|
|
# - Supports BuildKit cache modes: registry, local, inline
|
|
# - Enables parallel builds with --parallel flag
|
|
#
|
|
# Generated file usage:
|
|
# docker compose -f docker-compose.build.yml build --parallel
|
|
# docker compose -f docker-compose.build.yml build orchestrator
|
|
|
|
# Import all service defaults
|
|
let orchestrator_defaults = import "../../defaults/orchestrator-defaults.ncl" in
|
|
let control_center_defaults = import "../../defaults/control-center-defaults.ncl" in
|
|
let extension_registry_defaults = import "../../defaults/extension-registry-defaults.ncl" in
|
|
let mcp_server_defaults = import "../../defaults/mcp-server-defaults.ncl" in
|
|
let daemon_defaults = import "../../defaults/provisioning-daemon-defaults.ncl" in
|
|
let ai_service_defaults = import "../../defaults/ai-service-defaults.ncl" in
|
|
let rag_defaults = import "../../defaults/rag-defaults.ncl" in
|
|
let vault_defaults = import "../../defaults/vault-service-defaults.ncl" in
|
|
|
|
# Helper function to generate cache configuration based on mode
|
|
let cache_config = fun build_cfg registry =>
|
|
let mode = build_cfg.buildkit.cache_mode in
|
|
if mode == 'registry then
|
|
{
|
|
cache_from = [
|
|
"type=registry,ref=" ++ registry ++ "/" ++ build_cfg.package ++ ":buildcache"
|
|
],
|
|
cache_to = [
|
|
"type=registry,ref=" ++ registry ++ "/" ++ build_cfg.package ++ ":buildcache,mode=max"
|
|
],
|
|
}
|
|
else if mode == 'local then
|
|
{
|
|
cache_from = [
|
|
"type=local,src=/tmp/docker-cache/" ++ build_cfg.package
|
|
],
|
|
cache_to = [
|
|
"type=local,dest=/tmp/docker-cache/" ++ build_cfg.package ++ ",mode=max"
|
|
],
|
|
}
|
|
else # inline
|
|
{
|
|
cache_from = [],
|
|
cache_to = [
|
|
"type=inline"
|
|
],
|
|
}
|
|
in
|
|
|
|
# Helper function to generate build args
|
|
let build_args = fun build_cfg => {
|
|
CARGO_BUILD_JOBS = std.string.from_number build_cfg.buildkit.parallel_jobs,
|
|
RUST_LOG = "info",
|
|
} in
|
|
|
|
# Helper function to generate service build config
|
|
let service_build = fun name dockerfile_path build_cfg registry => {
|
|
build = {
|
|
context = "../../platform",
|
|
dockerfile = dockerfile_path,
|
|
args = build_args build_cfg,
|
|
} & (cache_config build_cfg registry),
|
|
image = registry ++ "/" ++ build_cfg.package ++ ":latest",
|
|
} in
|
|
|
|
# Default registry (override by modifying this value or using nickel CLI --override)
|
|
# Example: nickel export --override registry='"myregistry.io"' --format yaml docker-compose.build.yml.ncl
|
|
let registry = "localhost:5000" in
|
|
|
|
{
|
|
version = "3.8",
|
|
|
|
services = {
|
|
orchestrator = service_build
|
|
"orchestrator"
|
|
"crates/orchestrator/Dockerfile"
|
|
orchestrator_defaults.orchestrator.build
|
|
registry,
|
|
|
|
control-center = service_build
|
|
"control-center"
|
|
"crates/control-center/Dockerfile"
|
|
control_center_defaults.control_center.build
|
|
registry,
|
|
|
|
extension-registry = service_build
|
|
"extension-registry"
|
|
"crates/extension-registry/Dockerfile"
|
|
extension_registry_defaults.extension_registry.build
|
|
registry,
|
|
|
|
mcp-server = service_build
|
|
"mcp-server"
|
|
"crates/mcp-server/Dockerfile"
|
|
mcp_server_defaults.mcp_server.build
|
|
registry,
|
|
|
|
provisioning-daemon = service_build
|
|
"provisioning-daemon"
|
|
"crates/daemon/Dockerfile"
|
|
daemon_defaults.provisioning_daemon.build
|
|
registry,
|
|
|
|
ai-service = service_build
|
|
"ai-service"
|
|
"crates/ai-service/Dockerfile"
|
|
ai_service_defaults.ai_service.build
|
|
registry,
|
|
|
|
rag = service_build
|
|
"rag"
|
|
"crates/rag/Dockerfile"
|
|
rag_defaults.rag.build
|
|
registry,
|
|
|
|
vault-service = service_build
|
|
"vault-service"
|
|
"crates/vault-service/Dockerfile"
|
|
vault_defaults.vault.build
|
|
registry,
|
|
},
|
|
}
|