From 3853d03cf61cdd4b2904f249a530bc3669610128 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 21 Aug 2026 16:10:58 +0200 Subject: [PATCH 1/6] feat: added cli manifest --- docker-compose/manifest.json | 182 +++++++++++++++++++++++++++++++++++ 1 file changed, 182 insertions(+) create mode 100644 docker-compose/manifest.json diff --git a/docker-compose/manifest.json b/docker-compose/manifest.json new file mode 100644 index 00000000..7644526b --- /dev/null +++ b/docker-compose/manifest.json @@ -0,0 +1,182 @@ +{ + "version": "0.1.0", + "steps": [ + { + "id": "initial_root_mail", + "type": "input", + "section": "Admin account", + "prompt": "Root email", + "default": "root@code0.tech" + }, + { + "id": "initial_root_password", + "type": "password", + "section": "Admin account", + "prompt": "Root password", + "confirm": true, + "default": "root" + }, + { + "id": "compose_profiles", + "type": "multiselect", + "section": "Runtime profiles", + "prompt": "Choose profiles", + "join": ",", + "options": [ + { "label": "ide", "value": "ide", "default": true }, + { "label": "runtime", "value": "runtime", "default": true }, + { "label": "ai", "value": "ide_velorum", "default": false } + ] + }, + { + "id": "image_registry", + "type": "select", + "section": "Runtime artifacts", + "prompt": "Choose artifact registry", + "allow_custom": true, + "custom_prompt": "Custom image registry", + "options": [ + { "label": "github", "value": "ghcr.io/code0-tech/reticulum/ci-builds" }, + { "label": "gitlab", "value": "registry.gitlab.com/code0-tech/packages" } + ] + }, + { + "id": "image_edition", + "type": "select", + "section": "Runtime artifacts", + "prompt": "Choose edition", + "options": [ + { "label": "Community Edition (ce)", "value": "ce", "default": true }, + { "label": "Cloud / Commercial (cc)", "value": "cc" } + ] + }, + { + "id": "image_tag", + "type": "input", + "section": "Runtime artifacts", + "prompt": "Version", + "default": "latest" + }, + { + "id": "action_image_tag", + "type": "input", + "section": "Runtime artifacts", + "prompt": "Built-in actions version (rest-action, cron-action)", + "default": "0.0.0-experimental-2758971679-6d488c639d742bd4443e093c66c7d4cb54c5b0da" + } + ], + "secrets": [ + { + "id": ["initial_runtime_token", "aquila_backend_token"], + "label": "shared Sagittarius <-> Aquila token" + }, + { + "id": "taurus_aquila_token", + "label": "Taurus Aquila token" + }, + { + "id": "aquila_action_rest_token", + "label": "REST action Aquila token" + }, + { + "id": "aquila_action_cron_token", + "label": "Cron action Aquila token" + }, + { + "id": "velorum_jwt_secret", + "length": 32, + "label": "Velorum JWT secret" + }, + { + "id": "sagittarius_gateway_jwt_secret", + "length": 32, + "label": "Sagittarius gateway JWT secret" + }, + { + "id": "sagittarius_db_encryption_primary_key", + "length": 32, + "label": "Sagittarius DB encryption primary key" + }, + { + "id": "sagittarius_db_encryption_deterministic_key", + "length": 32, + "label": "Sagittarius DB encryption deterministic key" + }, + { + "id": "sagittarius_db_encryption_key_derivation_salt", + "length": 32, + "label": "Sagittarius DB encryption key derivation salt" + }, + { + "id": "sagittarius_rails_secret_key_base", + "length": 32, + "label": "Sagittarius Rails secret key base" + } + ], + "static": { + "hostname": "localhost", + "http_port": 80, + "https_port": 443, + "ssl_enabled": false, + "ssl_cert_file": "", + "ssl_key_file": "", + "postgres_db": "sagittarius_production", + "postgres_user": "sagittarius", + "postgres_password": "sagittarius", + "postgres_host": "postgres", + "postgres_port": 5432, + "aquila_log_level": "info", + "aquila_nats_url": "nats://nats:4222", + "aquila_nats_bucket": "flow_store", + "aquila_backend_url": "http://nginx:80", + "aquila_backend_unary_timeout_secs": 10, + "aquila_grpc_host": "0.0.0.0", + "aquila_grpc_port": 8081, + "aquila_grpc_health_service": false, + "aquila_grpc_connect_timeout_secs": 2, + "aquila_grpc_request_timeout_secs": 10, + "rest_action_port": 8084, + "aquila_action_rest_identifier": "rest-action", + "aquila_action_cron_identifier": "cron-action", + "action_image_registry": "ghcr.io/code0-tech/centaurus/ci-builds", + "velorum_host": "velorum", + "velorum_port": 50051, + "opentelemetry_enabled": false, + "opentelemetry_grpc_host": "http://localhost:4317", + "opentelemetry_logs_http_endpoint": "http://localhost:4318/v1/logs", + "opentelemetry_metrics_http_endpoint": "http://localhost:4318/v1/metrics", + "opentelemetry_traces_http_endpoint": "http://localhost:4318/v1/traces", + "opentelemetry_logs_clientside_http_endpoint": "http://localhost:4318/v1/logs", + "opentelemetry_metrics_clientside_http_endpoint": "http://localhost:4318/v1/metrics", + "opentelemetry_traces_clientside_http_endpoint": "http://localhost:4318/v1/traces", + "opentelemetry_service_name_sagittarius_web": "sagittarius-web", + "opentelemetry_service_name_sagittarius_cable": "sagittarius-cable", + "opentelemetry_service_name_sagittarius_grpc": "sagittarius-grpc", + "opentelemetry_service_name_sagittarius_background": "sagittarius-background", + "opentelemetry_service_name_sagittarius_gateway": "sagittarius-gateway", + "opentelemetry_service_name_nginx": "nginx", + "opentelemetry_service_name_sculptor": "sculptor", + "opentelemetry_service_name_sculptor_clientside": "sculptor-clientside", + "sagittarius_rails_host": "sagittarius-rails-web", + "sagittarius_rails_port": 3000, + "sagittarius_cable_host": "sagittarius-rails-cable", + "sagittarius_cable_port": 3000, + "sagittarius_grpc_host": "sagittarius-grpc", + "sagittarius_grpc_port": 50051, + "sagittarius_gateway_host": "sagittarius-gateway", + "sagittarius_gateway_port": 50051, + "sagittarius_gateway_log_level": "info", + "sagittarius_gateway_jwt_ttl_seconds": 300, + "sagittarius_log_level": "info", + "sagittarius_rails_web_threads": 3, + "sagittarius_rails_grpc_threads": 6, + "sagittarius_db_pool_size": 8, + "sculptor_host": "sculptor", + "sculptor_port": 3000 + }, + "templates": [ + { "template": "env.tera", "output": ".env" }, + { "template": "docker-compose.yml", "output": "docker-compose.yml" }, + { "template": "service.configuration.json.tera", "output": "service.configuration.json" } + ] +} From 45da25e8373cb5e66a4be9af5b96e48dbdb0e576 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 21 Aug 2026 16:56:33 +0200 Subject: [PATCH 2/6] feat: added service config placeholder --- docker-compose/manifest.json | 63 +------------------ .../service.configuration.json.tera | 8 +++ 2 files changed, 9 insertions(+), 62 deletions(-) create mode 100644 docker-compose/service.configuration.json.tera diff --git a/docker-compose/manifest.json b/docker-compose/manifest.json index 7644526b..09b3ad55 100644 --- a/docker-compose/manifest.json +++ b/docker-compose/manifest.json @@ -113,69 +113,8 @@ "label": "Sagittarius Rails secret key base" } ], - "static": { - "hostname": "localhost", - "http_port": 80, - "https_port": 443, - "ssl_enabled": false, - "ssl_cert_file": "", - "ssl_key_file": "", - "postgres_db": "sagittarius_production", - "postgres_user": "sagittarius", - "postgres_password": "sagittarius", - "postgres_host": "postgres", - "postgres_port": 5432, - "aquila_log_level": "info", - "aquila_nats_url": "nats://nats:4222", - "aquila_nats_bucket": "flow_store", - "aquila_backend_url": "http://nginx:80", - "aquila_backend_unary_timeout_secs": 10, - "aquila_grpc_host": "0.0.0.0", - "aquila_grpc_port": 8081, - "aquila_grpc_health_service": false, - "aquila_grpc_connect_timeout_secs": 2, - "aquila_grpc_request_timeout_secs": 10, - "rest_action_port": 8084, - "aquila_action_rest_identifier": "rest-action", - "aquila_action_cron_identifier": "cron-action", - "action_image_registry": "ghcr.io/code0-tech/centaurus/ci-builds", - "velorum_host": "velorum", - "velorum_port": 50051, - "opentelemetry_enabled": false, - "opentelemetry_grpc_host": "http://localhost:4317", - "opentelemetry_logs_http_endpoint": "http://localhost:4318/v1/logs", - "opentelemetry_metrics_http_endpoint": "http://localhost:4318/v1/metrics", - "opentelemetry_traces_http_endpoint": "http://localhost:4318/v1/traces", - "opentelemetry_logs_clientside_http_endpoint": "http://localhost:4318/v1/logs", - "opentelemetry_metrics_clientside_http_endpoint": "http://localhost:4318/v1/metrics", - "opentelemetry_traces_clientside_http_endpoint": "http://localhost:4318/v1/traces", - "opentelemetry_service_name_sagittarius_web": "sagittarius-web", - "opentelemetry_service_name_sagittarius_cable": "sagittarius-cable", - "opentelemetry_service_name_sagittarius_grpc": "sagittarius-grpc", - "opentelemetry_service_name_sagittarius_background": "sagittarius-background", - "opentelemetry_service_name_sagittarius_gateway": "sagittarius-gateway", - "opentelemetry_service_name_nginx": "nginx", - "opentelemetry_service_name_sculptor": "sculptor", - "opentelemetry_service_name_sculptor_clientside": "sculptor-clientside", - "sagittarius_rails_host": "sagittarius-rails-web", - "sagittarius_rails_port": 3000, - "sagittarius_cable_host": "sagittarius-rails-cable", - "sagittarius_cable_port": 3000, - "sagittarius_grpc_host": "sagittarius-grpc", - "sagittarius_grpc_port": 50051, - "sagittarius_gateway_host": "sagittarius-gateway", - "sagittarius_gateway_port": 50051, - "sagittarius_gateway_log_level": "info", - "sagittarius_gateway_jwt_ttl_seconds": 300, - "sagittarius_log_level": "info", - "sagittarius_rails_web_threads": 3, - "sagittarius_rails_grpc_threads": 6, - "sagittarius_db_pool_size": 8, - "sculptor_host": "sculptor", - "sculptor_port": 3000 - }, "templates": [ - { "template": "env.tera", "output": ".env" }, + { "template": ".env", "output": ".env" }, { "template": "docker-compose.yml", "output": "docker-compose.yml" }, { "template": "service.configuration.json.tera", "output": "service.configuration.json" } ] diff --git a/docker-compose/service.configuration.json.tera b/docker-compose/service.configuration.json.tera new file mode 100644 index 00000000..dd6a33cb --- /dev/null +++ b/docker-compose/service.configuration.json.tera @@ -0,0 +1,8 @@ +{ + "actions": [], + "runtimes": [ + { "identifier": "taurus", "token": "{{ taurus_aquila_token }}" }, + { "identifier": "rest-action", "token": "{{ aquila_action_rest_token }}" }, + { "identifier": "cron-action", "token": "{{ aquila_action_cron_token }}" } + ] +} From 03440031d08b74fe59c184161ec9655197bd7127 Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 21 Aug 2026 22:21:24 +0200 Subject: [PATCH 3/6] feat: added compose overwrite --- docker-compose/docker-compose.override.yml | 6 ++++++ docker-compose/manifest.json | 3 ++- docker-compose/service.configuration.json.tera | 7 ++++--- 3 files changed, 12 insertions(+), 4 deletions(-) create mode 100644 docker-compose/docker-compose.override.yml diff --git a/docker-compose/docker-compose.override.yml b/docker-compose/docker-compose.override.yml new file mode 100644 index 00000000..3b4eb13e --- /dev/null +++ b/docker-compose/docker-compose.override.yml @@ -0,0 +1,6 @@ +services: + aquila: + environment: + AQUILA_SERVICE_CONFIG_PATH: /codezero/service.configuration.json + volumes: + - ./service.configuration.json:/codezero/service.configuration.json:ro diff --git a/docker-compose/manifest.json b/docker-compose/manifest.json index 09b3ad55..5af05213 100644 --- a/docker-compose/manifest.json +++ b/docker-compose/manifest.json @@ -116,6 +116,7 @@ "templates": [ { "template": ".env", "output": ".env" }, { "template": "docker-compose.yml", "output": "docker-compose.yml" }, - { "template": "service.configuration.json.tera", "output": "service.configuration.json" } + { "template": "service.configuration.json.tera", "output": "service.configuration.json" }, + { "template": "docker-compose.override.yml", "output": "docker-compose.override.yml", "required": false } ] } diff --git a/docker-compose/service.configuration.json.tera b/docker-compose/service.configuration.json.tera index dd6a33cb..b5dba6c1 100644 --- a/docker-compose/service.configuration.json.tera +++ b/docker-compose/service.configuration.json.tera @@ -1,8 +1,9 @@ { - "actions": [], - "runtimes": [ - { "identifier": "taurus", "token": "{{ taurus_aquila_token }}" }, + "actions": [ { "identifier": "rest-action", "token": "{{ aquila_action_rest_token }}" }, { "identifier": "cron-action", "token": "{{ aquila_action_cron_token }}" } + ], + "runtimes": [ + { "identifier": "taurus", "token": "{{ taurus_aquila_token }}" } ] } From 30dbcfc813754a66b93d6c0707bc2280f9c8199c Mon Sep 17 00:00:00 2001 From: Raphael Date: Fri, 21 Aug 2026 23:06:26 +0200 Subject: [PATCH 4/6] feat: added port mapping for aquila --- docker-compose/docker-compose.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docker-compose/docker-compose.yml b/docker-compose/docker-compose.yml index aef48e6c..ab21a0da 100644 --- a/docker-compose/docker-compose.yml +++ b/docker-compose/docker-compose.yml @@ -213,6 +213,8 @@ services: volumes: - generated-configs:/tmp/generated-configs:ro restart: unless-stopped + ports: + - "${AQUILA_GRPC_PORT}:8081" profiles: - runtime networks: From 12e3f7d722da86203b5e64b860d6432d2c4e51a6 Mon Sep 17 00:00:00 2001 From: Raphael Date: Sun, 23 Aug 2026 13:27:36 +0200 Subject: [PATCH 5/6] feat: moved cli files into cli folder --- {docker-compose => cli}/docker-compose.override.yml | 0 {docker-compose => cli}/manifest.json | 0 {docker-compose => cli}/service.configuration.json.tera | 0 3 files changed, 0 insertions(+), 0 deletions(-) rename {docker-compose => cli}/docker-compose.override.yml (100%) rename {docker-compose => cli}/manifest.json (100%) rename {docker-compose => cli}/service.configuration.json.tera (100%) diff --git a/docker-compose/docker-compose.override.yml b/cli/docker-compose.override.yml similarity index 100% rename from docker-compose/docker-compose.override.yml rename to cli/docker-compose.override.yml diff --git a/docker-compose/manifest.json b/cli/manifest.json similarity index 100% rename from docker-compose/manifest.json rename to cli/manifest.json diff --git a/docker-compose/service.configuration.json.tera b/cli/service.configuration.json.tera similarity index 100% rename from docker-compose/service.configuration.json.tera rename to cli/service.configuration.json.tera From 9be5d81e19cbaf887fe92c9681e47db2bda309b6 Mon Sep 17 00:00:00 2001 From: Raphael Date: Sun, 23 Aug 2026 13:29:22 +0200 Subject: [PATCH 6/6] feat: made aquila external grpc port configurable --- docker-compose/.env | 1 + 1 file changed, 1 insertion(+) diff --git a/docker-compose/.env b/docker-compose/.env index 3944a41e..e6d661d4 100644 --- a/docker-compose/.env +++ b/docker-compose/.env @@ -22,6 +22,7 @@ AQUILA_BACKEND_TOKEN=runtime AQUILA_BACKEND_UNARY_TIMEOUT_SECS=10 AQUILA_GRPC_HOST=0.0.0.0 AQUILA_GRPC_PORT=8081 +AQUILA_GRPC_EXTERNAL_PORT=8081 AQUILA_GRPC_HEALTH_SERVICE=false REST_ACTION_PORT=8084