@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.26
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Tiltfile +144 -0
- package/discovery/AGENTS.md +362 -0
- package/discovery/TILT_DISCOVERY.star +424 -0
- package/discovery/Tiltfile +58 -0
- package/discovery/config.star +258 -0
- package/discovery/constants.star +127 -0
- package/discovery/deterministic.star +211 -0
- package/discovery/discovery_daemon.star +191 -0
- package/discovery/discovery_orchestrator.star +460 -0
- package/discovery/filtering.star +5 -0
- package/discovery/identity-management-backend/service.yaml +26 -0
- package/discovery/identity-management-frontend/service.yaml +29 -0
- package/discovery/identity-sdk/service.yaml +9 -0
- package/discovery/incremental_discovery.star +213 -0
- package/discovery/indexing.star +7 -0
- package/discovery/json_manifest_scanner.star +51 -0
- package/discovery/libraries.star +46 -0
- package/discovery/loading.star +23 -0
- package/discovery/manifest/constants.star +104 -0
- package/discovery/manifest/loading.star +386 -0
- package/discovery/manifest/normalize.star +281 -0
- package/discovery/manifest/validation.star +108 -0
- package/discovery/normalization.star +11 -0
- package/discovery/registry.star +544 -0
- package/discovery/resource_snapshot.py +382 -0
- package/discovery/resource_snapshot.star +143 -0
- package/discovery/schemas.star +1 -0
- package/discovery/services/platform/cdc/debezium/nats-connector/service.yaml +9 -0
- package/discovery/services/platform/cdc/nats-http-bridge/service.yaml +9 -0
- package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +26 -0
- package/discovery/services/platform/synthetic-monitor/service.yaml +9 -0
- package/discovery/test_resource_snapshot.py +251 -0
- package/discovery/validation.star +78 -0
- package/discovery/versioning.star +1 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +1 -2
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +36 -41
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/resource.d.ts.map +1 -1
- package/dist/commands/resource.js +51 -55
- package/dist/commands/resource.js.map +1 -1
- package/dist/commands/stack.d.ts.map +1 -1
- package/dist/commands/stack.js +22 -24
- package/dist/commands/stack.js.map +1 -1
- package/dist/commands/ui.d.ts.map +1 -1
- package/dist/commands/ui.js +1 -2
- package/dist/commands/ui.js.map +1 -1
- package/dist/commands/up.d.ts.map +1 -1
- package/dist/commands/up.js +1 -2
- package/dist/commands/up.js.map +1 -1
- package/dist/commands/upgrade.d.ts +8 -0
- package/dist/commands/upgrade.d.ts.map +1 -1
- package/dist/commands/upgrade.js +59 -18
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/generator/extension-fetch.d.ts +19 -0
- package/dist/generator/extension-fetch.d.ts.map +1 -1
- package/dist/generator/extension-fetch.js +71 -5
- package/dist/generator/extension-fetch.js.map +1 -1
- package/dist/generator/template-engine.d.ts +1 -0
- package/dist/generator/template-engine.d.ts.map +1 -1
- package/dist/generator/template-engine.js +50 -6
- package/dist/generator/template-engine.js.map +1 -1
- package/dist/utils/command-helpers.d.ts.map +1 -1
- package/dist/utils/command-helpers.js +7 -9
- package/dist/utils/command-helpers.js.map +1 -1
- package/dist/utils/constants.d.ts +1 -0
- package/dist/utils/constants.d.ts.map +1 -1
- package/dist/utils/constants.js +1 -0
- package/dist/utils/constants.js.map +1 -1
- package/dist/utils/errors.d.ts +2 -0
- package/dist/utils/errors.d.ts.map +1 -1
- package/dist/utils/errors.js +6 -1
- package/dist/utils/errors.js.map +1 -1
- package/dist/utils/project-features.d.ts.map +1 -1
- package/dist/utils/project-features.js +1 -1
- package/dist/utils/project-features.js.map +1 -1
- package/dist/utils/resource-features.d.ts.map +1 -1
- package/dist/utils/resource-features.js +2 -2
- package/dist/utils/resource-features.js.map +1 -1
- package/dist/utils/tar.js +4 -4
- package/dist/utils/tar.js.map +1 -1
- package/dist/utils/validation.d.ts +7 -0
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +9 -0
- package/dist/utils/validation.js.map +1 -1
- package/engine/AGENTS.md +705 -0
- package/engine/README.md +29 -0
- package/engine/REFACTORING_MANIFEST_SYSTEM.md +974 -0
- package/engine/Tiltfile +80 -0
- package/engine/assets/docker/golden-layers.Dockerfile +221 -0
- package/engine/assets/scripts/cleanup-completed-migrator-images.sh +37 -0
- package/engine/assets/scripts/cleanup-tilt-images.sh +120 -0
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +121 -0
- package/engine/config.star +3 -0
- package/engine/docs/AUTODISCOVERY_TEST.md +182 -0
- package/engine/docs/C4-ARCHITECTURE-operations.md +396 -0
- package/engine/docs/C4-ARCHITECTURE-overview.md +284 -0
- package/engine/docs/C4-ARCHITECTURE.md +17 -0
- package/engine/docs/GOLDEN_IMAGE_INTEGRATION.md +349 -0
- package/engine/docs/MANIFEST_DRIVEN_ARCHITECTURE.md +357 -0
- package/engine/docs/README.md +284 -0
- package/engine/entrypoint.star +97 -0
- package/engine/lifecycle/orchestrator.star +260 -0
- package/engine/paths.star +717 -0
- package/engine/schemas/manifest-schema.json +301 -0
- package/engine/schemas/service-schema.json +301 -0
- package/engine/scripts/README.md +89 -0
- package/engine/scripts/build-and-publish-lib.sh +205 -0
- package/engine/scripts/check-lib-publish.sh +85 -0
- package/engine/scripts/debug-container.sh +258 -0
- package/engine/scripts/generate-manifest.sh +197 -0
- package/engine/spec.master +702 -0
- package/engine/spec.master.example +341 -0
- package/engine/topologies/README.md +34 -0
- package/engine/topologies/platform/docker/AGENTS.md +59 -0
- package/engine/topologies/platform/docker/auth/auth.star +167 -0
- package/engine/topologies/platform/docker/build/golden_image.star +37 -0
- package/engine/topologies/platform/docker/build/golden_image_build.star +82 -0
- package/engine/topologies/platform/docker/build/golden_image_constants.star +93 -0
- package/engine/topologies/platform/docker/build/golden_image_dockerfile.star +291 -0
- package/engine/topologies/platform/docker/compose/compose.star +636 -0
- package/engine/topologies/platform/docker/compose/compose_helpers.star +52 -0
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +53 -0
- package/engine/topologies/platform/docker/config/bunignore.star +142 -0
- package/engine/topologies/platform/docker/config/dockerignore.star +150 -0
- package/engine/topologies/platform/docker/constants.star +170 -0
- package/engine/topologies/platform/docker/dockerfile/dockerfile.star +54 -0
- package/engine/topologies/platform/docker/generators/golden_docker_generator_v2.star +73 -0
- package/engine/topologies/platform/docker/index.star +27 -0
- package/engine/topologies/platform/docker/layers/bun_helpers.star +23 -0
- package/engine/topologies/platform/docker/layers/infisical/index.star +40 -0
- package/engine/topologies/platform/docker/layers/infisical/infisical_docker.star +262 -0
- package/engine/topologies/platform/docker/layers/l1_base_layers.star +87 -0
- package/engine/topologies/platform/docker/layers/l2_dependency_layers.star +125 -0
- package/engine/topologies/platform/docker/layers/l3_builder_layers.star +209 -0
- package/engine/topologies/platform/docker/layers/l4_runtime_layers.star +214 -0
- package/engine/topologies/platform/docker/layers/prisma/constants.star +135 -0
- package/engine/topologies/platform/docker/layers/prisma/db_readiness.star +96 -0
- package/engine/topologies/platform/docker/layers/prisma/filesystem_setup.star +109 -0
- package/engine/topologies/platform/docker/layers/prisma/migrate_script.star +98 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +126 -0
- package/engine/topologies/platform/docker/layers/prisma/prisma_runtime.star +161 -0
- package/engine/topologies/platform/docker/layers/prisma/secret_resolution.star +119 -0
- package/engine/topologies/platform/docker/networking/api_path_constants.star +230 -0
- package/engine/topologies/platform/docker/networking/sablier_container_cycle.star +27 -0
- package/engine/topologies/platform/docker/networking/traefik.star +232 -0
- package/engine/topologies/platform/docker/networking/traefik_constants.star +146 -0
- package/engine/topologies/platform/docker/networking/traefik_helpers.star +160 -0
- package/engine/topologies/platform/docker/secrets/infisical.star +135 -0
- package/engine/topologies/platform/net/proxy.star +4 -0
- package/engine/topologies/platform/registries/local.star +4 -0
- package/engine/topologies/platform/security/secrets.star +239 -0
- package/engine/topologies/platform/state/relational.star +4 -0
- package/engine/topologies/tilt/common/AGENTS.md +59 -0
- package/engine/topologies/tilt/common/utils.star +364 -0
- package/engine/topologies/tilt/common/utils_debug.star +69 -0
- package/engine/topologies/tilt/common/utils_deterministic.star +168 -0
- package/engine/topologies/tilt/common/utils_docker_networks.star +46 -0
- package/engine/topologies/tilt/common/utils_env.star +43 -0
- package/engine/topologies/tilt/common/utils_output.star +97 -0
- package/engine/topologies/tilt/config/AGENTS.md +68 -0
- package/engine/topologies/tilt/config/defaults.star +3 -0
- package/engine/topologies/tilt/config/feature_flags.star +10 -0
- package/engine/topologies/tilt/config/global.star +55 -0
- package/engine/topologies/tilt/config/profiles.star +382 -0
- package/engine/topologies/tilt/generators/agents_md.star +62 -0
- package/engine/topologies/tilt/generators/api_gateway.star +145 -0
- package/engine/topologies/tilt/generators/index.star +124 -0
- package/engine/topologies/tilt/generators/infisical/README.md +424 -0
- package/engine/topologies/tilt/generators/infisical/examples.star +312 -0
- package/engine/topologies/tilt/generators/infisical/index.star +57 -0
- package/engine/topologies/tilt/generators/infisical/machine_identity.star +420 -0
- package/engine/topologies/tilt/generators/infisical/organization.star +534 -0
- package/engine/topologies/tilt/generators/infisical/path_manager.star +476 -0
- package/engine/topologies/tilt/generators/infisical/secrets_generator.star +420 -0
- package/engine/topologies/tilt/generators/nginx_conf.star +143 -0
- package/engine/topologies/tilt/generators/npmrc.star +111 -0
- package/engine/topologies/tilt/generators/tsconfig.star +23 -0
- package/engine/topologies/tilt/generators/typescript/backend_library_tsconfig.star +71 -0
- package/engine/topologies/tilt/generators/typescript/backend_tsconfig.star +124 -0
- package/engine/topologies/tilt/generators/typescript/common.star +7 -0
- package/engine/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +76 -0
- package/engine/topologies/tilt/generators/typescript/frontend_tsconfig.star +110 -0
- package/engine/topologies/tilt/generators/typescript/include.star +23 -0
- package/engine/topologies/tilt/generators/typescript/playwright_config.star +40 -0
- package/engine/topologies/tilt/generators/typescript/prisma_config.star +49 -0
- package/engine/topologies/tilt/generators/validators.star +853 -0
- package/engine/topologies/tilt/generators/vite/backend.star +78 -0
- package/engine/topologies/tilt/generators/vite/frontend.star +98 -0
- package/engine/topologies/tilt/generators/vite/generators.star +43 -0
- package/engine/topologies/tilt/generators/vite/helpers.star +244 -0
- package/engine/topologies/tilt/generators/vite/library.star +65 -0
- package/engine/topologies/tilt/generators/vite/sdk.star +73 -0
- package/engine/topologies/tilt/generators/vite/templates.star +737 -0
- package/engine/topologies/tilt/generators/vite_config.star +22 -0
- package/engine/topologies/tilt/manifest/AGENTS.md +61 -0
- package/engine/topologies/tilt/manifest/README.md +693 -0
- package/engine/topologies/tilt/manifest/__init__.star +218 -0
- package/engine/topologies/tilt/manifest/constants.star +252 -0
- package/engine/topologies/tilt/manifest/errors.star +266 -0
- package/engine/topologies/tilt/manifest/integration.star +339 -0
- package/engine/topologies/tilt/manifest/json_to_yaml.py +54 -0
- package/engine/topologies/tilt/manifest/loader.star +214 -0
- package/engine/topologies/tilt/manifest/mapper.star +227 -0
- package/engine/topologies/tilt/manifest/parser.star +400 -0
- package/engine/topologies/tilt/manifest/schema.star +462 -0
- package/engine/topologies/tilt/manifest/tests/test_integration.star +276 -0
- package/engine/topologies/tilt/manifest/tests/test_loader_parser.star +397 -0
- package/engine/topologies/tilt/manifest/tests/test_manifest.star +316 -0
- package/engine/topologies/tilt/manifest/tests/test_validator.star +470 -0
- package/engine/topologies/tilt/manifest/validator.star +717 -0
- package/engine/topologies/tilt/manifest/yaml_to_json.py +18 -0
- package/engine/topologies/tilt/resources/AGENTS.md +71 -0
- package/engine/topologies/tilt/resources/conditions.star +3 -0
- package/engine/topologies/tilt/resources/databases.star +244 -0
- package/engine/topologies/tilt/resources/declaration.star +3 -0
- package/engine/topologies/tilt/resources/deps.star +3 -0
- package/engine/topologies/tilt/resources/infra-loader.star +437 -0
- package/engine/topologies/tilt/resources/libs.star +30 -0
- package/engine/topologies/tilt/resources/libs_discovery.star +102 -0
- package/engine/topologies/tilt/resources/libs_paths.star +79 -0
- package/engine/topologies/tilt/resources/libs_resource_definition.star +151 -0
- package/engine/topologies/tilt/resources/libs_setup.star +164 -0
- package/engine/topologies/tilt/resources/libs_tsconfig.star +37 -0
- package/engine/topologies/tilt/resources/orchestrator/apply.star +77 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +431 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +81 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +148 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_resource_validation.star +36 -0
- package/engine/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +44 -0
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +164 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +75 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +21 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +134 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/env.star +258 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/frontend.star +169 -0
- package/engine/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +524 -0
- package/engine/topologies/tilt/resources/orchestrator/helpers.star +33 -0
- package/engine/topologies/tilt/resources/orchestrator.star +54 -0
- package/engine/topologies/tilt/resources/ordering.star +3 -0
- package/engine/topologies/tilt/resources/triggers.star +3 -0
- package/engine/topologies/tilt/resources/watchers.star +299 -0
- package/engine/where-things-live.star +717 -0
- package/ext/Tiltfile +66 -0
- package/ext/ide-components/README.md +219 -0
- package/ext/ide-components/code_executor/server.py +268 -0
- package/ext/ide-components/code_viewer/server.py +206 -0
- package/ext/ide-components/config_inspector/server.py +1050 -0
- package/ext/ide-components/file_browser/server.py +285 -0
- package/ext/ide-components/shared/config_service.py +469 -0
- package/ext/ide-components/shared/file_utils.py +298 -0
- package/ext/ide-components/shared/http_utils.py +232 -0
- package/ext/ide-components/shared/static/styles.css +1334 -0
- package/ext/ide-components/shared/syntax_highlighter.py +140 -0
- package/ext/ide-components/shared/template_engine.py +123 -0
- package/ext/ide-components/shared/templates/base.html +121 -0
- package/ext/ide-components/shared/test_config_service.py +326 -0
- package/ext/ide-components/shared/tilt_integration.py +158 -0
- package/ext/ui-enhancements/cron-status-server.sh +49 -0
- package/ext/ui-enhancements/cron-status-tracker.sh +146 -0
- package/ext/ui-enhancements/extension.yaml +36 -0
- package/ext/ui-enhancements/tiltfile.py +99 -0
- package/ext/ui-enhancements/ui/cron-jobs-tab.css +396 -0
- package/ext/ui-enhancements/ui/help-panel.css +279 -0
- package/ext/ui-enhancements/ui/icons.css +125 -0
- package/ext/ui-enhancements/ui/tooltips.css +114 -0
- package/package.json +13 -9
- package/specs/specs/TILT_SERVICE_DEFAULTS.star +205 -0
- package/specs/specs/TILT_TECH_STACK.star +159 -0
package/engine/Tiltfile
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🎯 TDK-ENGINE - Core Execution Engine
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# This is the Tiltfile entry point for the tdk-engine repo.
|
|
5
|
+
# It exports core orchestration, resource builders, and topology management.
|
|
6
|
+
#
|
|
7
|
+
# Usage:
|
|
8
|
+
# v1alpha1.extension_repo(name='tdk-engine', url='https://github.com/tdk-landscape/tdk-engine')
|
|
9
|
+
# load('ext://tdk-engine', 'Utils', 'Manifest', 'Config', ...)
|
|
10
|
+
# =============================================================================
|
|
11
|
+
|
|
12
|
+
# Core
|
|
13
|
+
load('./topologies/tilt/common/utils.star', _Utils='Utils')
|
|
14
|
+
load('./topologies/tilt/discovery/loading.star', _Manifest='Manifest')
|
|
15
|
+
load('./topologies/tilt/config/global.star', _Config='Config')
|
|
16
|
+
|
|
17
|
+
# Registry
|
|
18
|
+
load('./topologies/tilt/discovery/registry.star',
|
|
19
|
+
_GLOBAL_CONFIG_EXPORT='GLOBAL_CONFIG_EXPORT',
|
|
20
|
+
_APP_RESOURCES='APP_RESOURCES',
|
|
21
|
+
_INFRA_RESOURCES_EXPORT='INFRA_RESOURCES_EXPORT',
|
|
22
|
+
_DDD_LIBS_EXPORT='DDD_LIBS_EXPORT',
|
|
23
|
+
_DEFAULTS_EXPORT='DEFAULTS_EXPORT',
|
|
24
|
+
_RESOURCE_ALIASES='RESOURCE_ALIASES',
|
|
25
|
+
_RESOURCE_PATH_MAP='RESOURCE_PATH_MAP',
|
|
26
|
+
_get_platform_libs_export='get_platform_libs_export',
|
|
27
|
+
_get_product_libs_export='get_product_libs_export',
|
|
28
|
+
)
|
|
29
|
+
|
|
30
|
+
# Providers
|
|
31
|
+
load('./topologies/tilt/generators/vite_config.star', _Vite='Vite')
|
|
32
|
+
load('./topologies/tilt/generators/tsconfig.star', _TSConfig='TSConfig')
|
|
33
|
+
load('./topologies/platform/docker/index.star', _Docker='Docker')
|
|
34
|
+
load('./topologies/tilt/generators/npmrc.star', _PackageConfig='PackageConfig')
|
|
35
|
+
|
|
36
|
+
# Lifecycle
|
|
37
|
+
load('./topologies/tilt/resources/deps.star', _Libs='Libs')
|
|
38
|
+
load('./topologies/tilt/resources/conditions.star', _Database='Database')
|
|
39
|
+
load('./topologies/tilt/resources/declaration.star', _Orchestrator='Orchestrator')
|
|
40
|
+
load('./topologies/tilt/resources/ordering.star', _Infra='Infra')
|
|
41
|
+
load('./topologies/tilt/resources/triggers.star', _Watchers='Watchers')
|
|
42
|
+
|
|
43
|
+
# =============================================================================
|
|
44
|
+
# RE-EXPORTS
|
|
45
|
+
# =============================================================================
|
|
46
|
+
|
|
47
|
+
# Core
|
|
48
|
+
Utils = _Utils
|
|
49
|
+
Manifest = _Manifest
|
|
50
|
+
Config = _Config
|
|
51
|
+
|
|
52
|
+
# Registry Data
|
|
53
|
+
GLOBAL_CONFIG_EXPORT = _GLOBAL_CONFIG_EXPORT
|
|
54
|
+
APP_RESOURCES = _APP_RESOURCES
|
|
55
|
+
INFRA_RESOURCES_EXPORT = _INFRA_RESOURCES_EXPORT
|
|
56
|
+
DDD_LIBS_EXPORT = _DDD_LIBS_EXPORT
|
|
57
|
+
DEFAULTS_EXPORT = _DEFAULTS_EXPORT
|
|
58
|
+
RESOURCE_ALIASES = _RESOURCE_ALIASES
|
|
59
|
+
RESOURCE_PATH_MAP = _RESOURCE_PATH_MAP
|
|
60
|
+
|
|
61
|
+
def get_platform_libs_export():
|
|
62
|
+
return _get_platform_libs_export()
|
|
63
|
+
|
|
64
|
+
def get_product_libs_export():
|
|
65
|
+
return _get_product_libs_export()
|
|
66
|
+
|
|
67
|
+
# Providers
|
|
68
|
+
Vite = _Vite
|
|
69
|
+
TSConfig = _TSConfig
|
|
70
|
+
Docker = _Docker
|
|
71
|
+
PackageConfig = _PackageConfig
|
|
72
|
+
|
|
73
|
+
# Lifecycle
|
|
74
|
+
Libs = _Libs
|
|
75
|
+
Database = _Database
|
|
76
|
+
Orchestrator = _Orchestrator
|
|
77
|
+
Infra = _Infra
|
|
78
|
+
Watchers = _Watchers
|
|
79
|
+
|
|
80
|
+
print("✅ TDK Engine loaded: orchestration, resources, and lifecycle")
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
###############################################################################
|
|
2
|
+
# 🛑 CRITICAL: SYSTEM-GENERATED FILE - DO NOT MODIFY DIRECTLY
|
|
3
|
+
#
|
|
4
|
+
# ANY MANUAL CHANGES MADE TO THIS FILE WILL BE WIPED ON THE NEXT 'tilt up'.
|
|
5
|
+
# TO MODIFY THIS CONFIGURATION:
|
|
6
|
+
# 1. Edit the source generator in: .tilt/topologies/
|
|
7
|
+
# 2. Or update service.json
|
|
8
|
+
#
|
|
9
|
+
# Generation Source: GoldenImage.generate_layered_dockerfile()
|
|
10
|
+
# Service: beauty-crm-l1-l4
|
|
11
|
+
# Type: GOLDEN LAYERED IMAGES | L1-L4 Pre-built Layers
|
|
12
|
+
###############################################################################
|
|
13
|
+
|
|
14
|
+
# =============================================================================
|
|
15
|
+
# 🏗️ GOLDEN LAYERED IMAGES - Multi-Stage Base Images
|
|
16
|
+
# =============================================================================
|
|
17
|
+
# This Dockerfile builds 8 golden images:
|
|
18
|
+
# - beauty-crm-l1:latest - OS base + Bun runtime
|
|
19
|
+
# - beauty-crm-l2:latest - Dependencies installed
|
|
20
|
+
# - beauty-crm-l3-backend:latest - Backend build tools (Prisma, no Infisical CLI)
|
|
21
|
+
# - beauty-crm-l3-frontend:latest - Frontend build tools (no Prisma)
|
|
22
|
+
# - beauty-crm-l3-migrator:latest - Migrator build tools (Prisma, no Infisical CLI)
|
|
23
|
+
# - beauty-crm-l4-backend:latest - Backend production runtime
|
|
24
|
+
# - beauty-crm-l4-frontend:latest - Frontend production runtime (Nginx)
|
|
25
|
+
# - beauty-crm-l4-migrator:latest - Migrator production runtime
|
|
26
|
+
#
|
|
27
|
+
# Services use these as base images to skip heavy dependency installation.
|
|
28
|
+
#
|
|
29
|
+
# ⚠️ SKIP_INFISICAL_SETUP Support:
|
|
30
|
+
# All generated Dockerfiles support --build-arg SKIP_INFISICAL_SETUP=1
|
|
31
|
+
# to bypass Infisical CLI installation (avoids Cloudsmith CDN hangs).
|
|
32
|
+
# When SKIP_INFISICAL_SETUP=1, secrets are read from env vars only.
|
|
33
|
+
# See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
|
|
34
|
+
# =============================================================================
|
|
35
|
+
|
|
36
|
+
# =============================================================================
|
|
37
|
+
# L1: OS BASE + RUNTIME ENVIRONMENT
|
|
38
|
+
# =============================================================================
|
|
39
|
+
FROM oven/bun:1.3.11-alpine AS l1_golden
|
|
40
|
+
|
|
41
|
+
LABEL layer="l1" description="OS base with runtime environment" maintainer="beauty-crm"
|
|
42
|
+
|
|
43
|
+
# System dependencies for all services
|
|
44
|
+
RUN apk add --no-cache ca-certificates tzdata curl file bash openssl
|
|
45
|
+
|
|
46
|
+
# Create app user/group for security
|
|
47
|
+
RUN addgroup -S app && adduser -S app -G app
|
|
48
|
+
|
|
49
|
+
# Runtime environment
|
|
50
|
+
ENV NODE_ENV=development BUN_INSTALL_CACHE_DIR=/cache/bun
|
|
51
|
+
|
|
52
|
+
WORKDIR /app
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
# =============================================================================
|
|
56
|
+
# L2: DEPENDENCY RESOLVER
|
|
57
|
+
# =============================================================================
|
|
58
|
+
FROM l1_golden AS l2_golden
|
|
59
|
+
|
|
60
|
+
LABEL layer="l2" description="Base with common dependencies installed" maintainer="beauty-crm"
|
|
61
|
+
|
|
62
|
+
# Install minimal debugging tools (removed: vim, python3, make, g++ = -67MB)
|
|
63
|
+
RUN apk add --no-cache curl netcat-openbsd jq bind-tools
|
|
64
|
+
|
|
65
|
+
# Pre-create cache directories
|
|
66
|
+
RUN mkdir -p /cache/bun /cache/prisma
|
|
67
|
+
|
|
68
|
+
# Bun is already installed in base image
|
|
69
|
+
RUN echo "Bun version: $(bun --version)"
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
# =============================================================================
|
|
73
|
+
# L3-BACKEND: BACKEND BUILD TOOLS (PRISMA)
|
|
74
|
+
# =============================================================================
|
|
75
|
+
FROM l2_golden AS l3_backend_golden
|
|
76
|
+
|
|
77
|
+
LABEL layer="l3-backend" description="Backend build tools with Prisma" maintainer="beauty-crm"
|
|
78
|
+
|
|
79
|
+
# Install Prisma CLI globally (pinned for deterministic builds)
|
|
80
|
+
RUN bun add -g prisma@7.5.0 @prisma/client@7.5.0
|
|
81
|
+
|
|
82
|
+
# Verify Prisma installation
|
|
83
|
+
RUN echo "Prisma version: $(bunx prisma --version | head -1)"
|
|
84
|
+
|
|
85
|
+
# ⚠️ CRITICAL: Infisical CLI is NOT installed in golden L3 images
|
|
86
|
+
# Reason: curl to dl.cloudsmith.io hangs during Docker builds when CDN is slow
|
|
87
|
+
# Solution: Use SKIP_INFISICAL_SETUP=1 build arg or runtime env var injection
|
|
88
|
+
# Services read secrets from environment variables at runtime (no CLI needed)
|
|
89
|
+
# See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
# =============================================================================
|
|
93
|
+
# L3-FRONTEND: FRONTEND BUILD TOOLS (NO PRISMA)
|
|
94
|
+
# =============================================================================
|
|
95
|
+
FROM l2_golden AS l3_frontend_golden
|
|
96
|
+
|
|
97
|
+
LABEL layer="l3-frontend" description="Frontend build tools without Prisma" maintainer="beauty-crm"
|
|
98
|
+
|
|
99
|
+
# Frontend doesn't need Prisma, just verify Bun
|
|
100
|
+
RUN echo "Bun version: $(bun --version)"
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
# =============================================================================
|
|
104
|
+
# L3-MIGRATOR: MIGRATOR BUILD TOOLS (PRISMA)
|
|
105
|
+
# =============================================================================
|
|
106
|
+
FROM l2_golden AS l3_migrator_golden
|
|
107
|
+
|
|
108
|
+
LABEL layer="l3-migrator" description="Migrator build tools with Prisma" maintainer="beauty-crm"
|
|
109
|
+
|
|
110
|
+
# Install Prisma CLI globally (required for migrations, pinned)
|
|
111
|
+
RUN bun add -g prisma@7.5.0 @prisma/client@7.5.0
|
|
112
|
+
|
|
113
|
+
# Verify Prisma installation
|
|
114
|
+
RUN echo "Prisma version: $(bunx prisma --version | head -1)"
|
|
115
|
+
|
|
116
|
+
# ⚠️ CRITICAL: Infisical CLI is NOT installed in golden L3 images
|
|
117
|
+
# Reason: curl to dl.cloudsmith.io hangs during Docker builds when CDN is slow
|
|
118
|
+
# Solution: Use SKIP_INFISICAL_SETUP=1 build arg or runtime env var injection
|
|
119
|
+
# Services read secrets from environment variables at runtime (no CLI needed)
|
|
120
|
+
# See: .tilt/topologies/platform/docker/layers/l3_builder_layers.star
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
# =============================================================================
|
|
124
|
+
# L4-BACKEND-BUN: BACKEND PRODUCTION RUNTIME (BUN)
|
|
125
|
+
# =============================================================================
|
|
126
|
+
FROM l1_golden AS l4_backend_bun
|
|
127
|
+
|
|
128
|
+
LABEL layer="l4-backend-bun" description="Backend production runtime (Bun)" maintainer="beauty-crm"
|
|
129
|
+
|
|
130
|
+
ENV NODE_ENV=production
|
|
131
|
+
|
|
132
|
+
# Install hugo for services that require static site generation (specified via manifest features)
|
|
133
|
+
RUN apk add --no-cache hugo
|
|
134
|
+
|
|
135
|
+
# ⚠️ Infisical CLI is NOT installed in golden L4 images
|
|
136
|
+
# Services use TypeScript SDK (fetch API) or read from env vars - no CLI needed
|
|
137
|
+
# The entrypoint.sh gracefully handles missing CLI (falls back to env vars)
|
|
138
|
+
# Build with --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation
|
|
139
|
+
|
|
140
|
+
USER bun
|
|
141
|
+
|
|
142
|
+
# Backend-specific healthcheck (checks Bun runtime)
|
|
143
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD bun --version || exit 1
|
|
144
|
+
|
|
145
|
+
WORKDIR /app
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
# =============================================================================
|
|
149
|
+
# L4-BACKEND-NODE: BACKEND PRODUCTION RUNTIME (NODE.JS - LIGHTWEIGHT!)
|
|
150
|
+
# =============================================================================
|
|
151
|
+
FROM node:22-alpine AS l4_backend_node
|
|
152
|
+
|
|
153
|
+
LABEL layer="l4-backend-node" description="Backend production runtime (Node.js - lightweight)" maintainer="beauty-crm"
|
|
154
|
+
|
|
155
|
+
ENV NODE_ENV=production
|
|
156
|
+
|
|
157
|
+
# Minimal runtime dependencies
|
|
158
|
+
RUN apk add --no-cache ca-certificates tzdata curl
|
|
159
|
+
|
|
160
|
+
# Create app user for security
|
|
161
|
+
RUN addgroup -S app && adduser -S app -G app
|
|
162
|
+
|
|
163
|
+
# ⚠️ Infisical CLI is NOT installed in golden L4 images
|
|
164
|
+
# Services read secrets from environment variables at runtime
|
|
165
|
+
|
|
166
|
+
USER app
|
|
167
|
+
|
|
168
|
+
# Backend-specific healthcheck (checks Node.js runtime)
|
|
169
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD node --version || exit 1
|
|
170
|
+
|
|
171
|
+
WORKDIR /app
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
# Alias for backwards compatibility - defaults to Bun (most efficient)
|
|
175
|
+
FROM l4_backend_bun AS l4_backend_golden
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
# =============================================================================
|
|
179
|
+
# L4-FRONTEND: FRONTEND PRODUCTION RUNTIME
|
|
180
|
+
# =============================================================================
|
|
181
|
+
FROM nginx:alpine AS l4_frontend_golden
|
|
182
|
+
|
|
183
|
+
LABEL layer="l4-frontend" description="Frontend production runtime with Nginx" maintainer="beauty-crm"
|
|
184
|
+
|
|
185
|
+
ENV NODE_ENV=production
|
|
186
|
+
|
|
187
|
+
# Install curl for healthchecks
|
|
188
|
+
RUN apk add --no-cache curl
|
|
189
|
+
|
|
190
|
+
# Frontend-specific healthcheck (checks Nginx)
|
|
191
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 CMD curl -f http://localhost/ || exit 1
|
|
192
|
+
|
|
193
|
+
WORKDIR /usr/share/nginx/html
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
# =============================================================================
|
|
197
|
+
# L4-MIGRATOR: MIGRATOR PRODUCTION RUNTIME
|
|
198
|
+
# =============================================================================
|
|
199
|
+
FROM l1_golden AS l4_migrator_golden
|
|
200
|
+
|
|
201
|
+
LABEL layer="l4-migrator" description="Migrator runtime with Prisma" maintainer="beauty-crm"
|
|
202
|
+
|
|
203
|
+
ENV NODE_ENV=production
|
|
204
|
+
|
|
205
|
+
# Copy global Prisma installation from L3
|
|
206
|
+
COPY --from=l3_migrator_golden /root/.bun/install/global /root/.bun/install/global
|
|
207
|
+
|
|
208
|
+
# ⚠️ Infisical CLI is NOT included in golden L4 images
|
|
209
|
+
# The migrator reads secrets directly from environment variables at runtime
|
|
210
|
+
# (no entrypoint wrapper needed for database migrations)
|
|
211
|
+
# Use --build-arg SKIP_INFISICAL_SETUP=1 to skip CLI installation in derived images
|
|
212
|
+
|
|
213
|
+
# Ensure Bun cache path is writable for non-root runtime healthcheck commands.
|
|
214
|
+
RUN mkdir -p /cache/bun && chown -R bun:bun /cache/bun
|
|
215
|
+
|
|
216
|
+
USER bun
|
|
217
|
+
|
|
218
|
+
# Migrator-specific healthcheck (checks Prisma CLI)
|
|
219
|
+
HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 CMD bunx prisma --version || exit 1
|
|
220
|
+
|
|
221
|
+
WORKDIR /app
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
set -euo pipefail
|
|
3
|
+
|
|
4
|
+
# Delete images for completed DB migrator containers to free disk space.
|
|
5
|
+
# Safe guards:
|
|
6
|
+
# - only containers with names ending in -db-migrator are considered
|
|
7
|
+
# - only exited containers with exit code 0 are processed
|
|
8
|
+
# - image deletion is best-effort (skips if still in use)
|
|
9
|
+
|
|
10
|
+
mapfile -t migrator_containers < <(
|
|
11
|
+
docker ps -a --format '{{.Names}}' | grep -E -- '-db-migrator($|-)' 2>/dev/null || true
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
if [ "${#migrator_containers[@]}" -eq 0 ]; then
|
|
15
|
+
exit 0
|
|
16
|
+
fi
|
|
17
|
+
|
|
18
|
+
for name in "${migrator_containers[@]}"; do
|
|
19
|
+
state="$(docker inspect -f '{{.State.Status}}' "$name" 2>/dev/null || true)"
|
|
20
|
+
exit_code="$(docker inspect -f '{{.State.ExitCode}}' "$name" 2>/dev/null || true)"
|
|
21
|
+
|
|
22
|
+
if [ "$state" != "exited" ] || [ "$exit_code" != "0" ]; then
|
|
23
|
+
continue
|
|
24
|
+
fi
|
|
25
|
+
|
|
26
|
+
image_ref="$(docker inspect -f '{{.Config.Image}}' "$name" 2>/dev/null || true)"
|
|
27
|
+
if [ -z "$image_ref" ]; then
|
|
28
|
+
continue
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
# Remove the stopped migrator container so image can be deleted if unused.
|
|
32
|
+
docker rm "$name" >/dev/null 2>&1 || true
|
|
33
|
+
|
|
34
|
+
if docker image rm "$image_ref" >/dev/null 2>&1; then
|
|
35
|
+
echo "$(date +%H:%M:%S) pruned migrator image: $image_ref"
|
|
36
|
+
fi
|
|
37
|
+
done
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
set -euo pipefail
|
|
4
|
+
|
|
5
|
+
# Keep the newest N Tilt-tagged images per repository.
|
|
6
|
+
# Defaults to a safe dry-run unless --force is provided.
|
|
7
|
+
|
|
8
|
+
KEEP_COUNT=0
|
|
9
|
+
FORCE=0
|
|
10
|
+
|
|
11
|
+
usage() {
|
|
12
|
+
cat <<USAGE
|
|
13
|
+
Usage: $0 [--keep N] [--force]
|
|
14
|
+
|
|
15
|
+
Options:
|
|
16
|
+
--keep N Number of newest tilt-* images to keep per repository (default: 0)
|
|
17
|
+
--force Actually remove images. Without this, runs in dry-run mode.
|
|
18
|
+
USAGE
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
while [[ $# -gt 0 ]]; do
|
|
22
|
+
case "$1" in
|
|
23
|
+
--keep)
|
|
24
|
+
KEEP_COUNT="${2:-}"
|
|
25
|
+
shift 2
|
|
26
|
+
;;
|
|
27
|
+
--force)
|
|
28
|
+
FORCE=1
|
|
29
|
+
shift
|
|
30
|
+
;;
|
|
31
|
+
-h|--help)
|
|
32
|
+
usage
|
|
33
|
+
exit 0
|
|
34
|
+
;;
|
|
35
|
+
*)
|
|
36
|
+
echo "Unknown option: $1"
|
|
37
|
+
usage
|
|
38
|
+
exit 1
|
|
39
|
+
;;
|
|
40
|
+
esac
|
|
41
|
+
done
|
|
42
|
+
|
|
43
|
+
if ! [[ "$KEEP_COUNT" =~ ^[0-9]+$ ]] || [[ "$KEEP_COUNT" -lt 0 ]]; then
|
|
44
|
+
echo "--keep must be an integer >= 0"
|
|
45
|
+
exit 1
|
|
46
|
+
fi
|
|
47
|
+
|
|
48
|
+
echo "Scanning Tilt images (tag starts with tilt-) ..."
|
|
49
|
+
|
|
50
|
+
# Format: REPO TAG IMAGE_ID CREATED_AT
|
|
51
|
+
# Sort newest-first by creation time so first N are retained.
|
|
52
|
+
IMAGES_RAW="$(
|
|
53
|
+
docker image ls --format '{{.Repository}} {{.Tag}} {{.ID}} {{.CreatedAt}}' \
|
|
54
|
+
| awk '$2 ~ /^tilt-/' \
|
|
55
|
+
| sort -rk4,5
|
|
56
|
+
)"
|
|
57
|
+
|
|
58
|
+
if [[ -z "${IMAGES_RAW}" ]]; then
|
|
59
|
+
echo "No tilt-* images found."
|
|
60
|
+
exit 0
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
TO_DELETE=()
|
|
64
|
+
|
|
65
|
+
echo "Retention policy: keep newest $KEEP_COUNT tilt-* images per repository"
|
|
66
|
+
|
|
67
|
+
REPOS="$(printf '%s\n' "$IMAGES_RAW" | awk '{print $1}' | sort -u)"
|
|
68
|
+
for repo in $REPOS; do
|
|
69
|
+
repo_blob="$(printf '%s\n' "$IMAGES_RAW" | awk -v r="$repo" '$1==r')"
|
|
70
|
+
total=$(printf '%s\n' "$repo_blob" | awk 'NF{c++} END{print c+0}')
|
|
71
|
+
echo "- $repo: $total tilt image(s)"
|
|
72
|
+
|
|
73
|
+
if (( total <= KEEP_COUNT )); then
|
|
74
|
+
continue
|
|
75
|
+
fi
|
|
76
|
+
|
|
77
|
+
# Delete rows after KEEP_COUNT newest.
|
|
78
|
+
i=0
|
|
79
|
+
while IFS= read -r row; do
|
|
80
|
+
[[ -z "$row" ]] && continue
|
|
81
|
+
if (( i < KEEP_COUNT )); then
|
|
82
|
+
((i++))
|
|
83
|
+
continue
|
|
84
|
+
fi
|
|
85
|
+
image_id="$(awk '{print $3}' <<< "$row")"
|
|
86
|
+
tag="$(awk '{print $2}' <<< "$row")"
|
|
87
|
+
TO_DELETE+=("$image_id|$repo:$tag")
|
|
88
|
+
((i++))
|
|
89
|
+
done <<< "$repo_blob"
|
|
90
|
+
done
|
|
91
|
+
|
|
92
|
+
if [[ ${#TO_DELETE[@]} -eq 0 ]]; then
|
|
93
|
+
echo "Nothing to remove."
|
|
94
|
+
exit 0
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
echo
|
|
98
|
+
echo "Images selected for cleanup: ${#TO_DELETE[@]}"
|
|
99
|
+
for item in "${TO_DELETE[@]}"; do
|
|
100
|
+
IFS='|' read -r image_id ref <<< "$item"
|
|
101
|
+
echo " $ref ($image_id)"
|
|
102
|
+
done
|
|
103
|
+
|
|
104
|
+
echo
|
|
105
|
+
if [[ "$FORCE" -ne 1 ]]; then
|
|
106
|
+
echo "Dry-run only. Re-run with --force to remove these images."
|
|
107
|
+
exit 0
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
echo "Removing old tilt images..."
|
|
111
|
+
for item in "${TO_DELETE[@]}"; do
|
|
112
|
+
IFS='|' read -r image_id ref <<< "$item"
|
|
113
|
+
if docker rmi "$image_id" >/dev/null 2>&1; then
|
|
114
|
+
echo " removed $ref ($image_id)"
|
|
115
|
+
else
|
|
116
|
+
echo " skipped $ref ($image_id) - likely in use"
|
|
117
|
+
fi
|
|
118
|
+
done
|
|
119
|
+
|
|
120
|
+
echo "Cleanup complete."
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
|
|
3
|
+
# TDK Landscape Mac M1 Resource Monitor
|
|
4
|
+
# Monitors Docker container resource usage and provides optimization recommendations
|
|
5
|
+
|
|
6
|
+
set -e
|
|
7
|
+
|
|
8
|
+
# Colors for output
|
|
9
|
+
RED='\033[0;31m'
|
|
10
|
+
GREEN='\033[0;32m'
|
|
11
|
+
YELLOW='\033[1;33m'
|
|
12
|
+
BLUE='\033[0;34m'
|
|
13
|
+
NC='\033[0m' # No Color
|
|
14
|
+
|
|
15
|
+
echo -e "${BLUE}🍎 TDK Landscape Mac M1 Resource Monitor${NC}"
|
|
16
|
+
echo "=================================================="
|
|
17
|
+
|
|
18
|
+
# Check if Docker is running
|
|
19
|
+
if ! docker info >/dev/null 2>&1; then
|
|
20
|
+
echo -e "${RED}❌ Docker is not running${NC}"
|
|
21
|
+
exit 1
|
|
22
|
+
fi
|
|
23
|
+
|
|
24
|
+
# Get Docker Desktop memory limit
|
|
25
|
+
DOCKER_MEMORY=$(docker system info 2>/dev/null | grep -i "total memory" | awk '{print $3 $4}' || echo "Unknown")
|
|
26
|
+
echo -e "${BLUE}🐳 Docker Memory Limit:${NC} $DOCKER_MEMORY"
|
|
27
|
+
|
|
28
|
+
# Get system memory info (macOS)
|
|
29
|
+
SYSTEM_MEMORY=$(system_profiler SPHardwareDataType | grep "Memory:" | awk '{print $2 $3}' || echo "Unknown")
|
|
30
|
+
echo -e "${BLUE}💻 System Memory:${NC} $SYSTEM_MEMORY"
|
|
31
|
+
|
|
32
|
+
echo ""
|
|
33
|
+
|
|
34
|
+
# Check running TDK Landscape containers
|
|
35
|
+
PROJECT_CONTAINERS=$(docker ps --format "{{.Names}}" | grep -E "(postgres|redis|nats|kafka|traefik|clickhouse|elasticsearch|verdaccio|infisical)" | sort)
|
|
36
|
+
|
|
37
|
+
if [ -z "$PROJECT_CONTAINERS" ]; then
|
|
38
|
+
echo -e "${YELLOW}⚠️ No TDK Landscape containers are currently running${NC}"
|
|
39
|
+
echo "Run 'tilt up' to start services"
|
|
40
|
+
exit 0
|
|
41
|
+
fi
|
|
42
|
+
|
|
43
|
+
echo -e "${GREEN}📊 Running TDK Landscape Containers:${NC}"
|
|
44
|
+
echo "=================================================="
|
|
45
|
+
|
|
46
|
+
# Get detailed stats for TDK Landscape containers
|
|
47
|
+
TOTAL_MEMORY_MB=0
|
|
48
|
+
HIGH_CPU_COUNT=0
|
|
49
|
+
HIGH_MEMORY_COUNT=0
|
|
50
|
+
|
|
51
|
+
echo -e "${BLUE}Container Name${NC}\t\t${BLUE}CPU%${NC}\t${BLUE}Memory${NC}\t${BLUE}Status${NC}"
|
|
52
|
+
echo "------------------------------------------------------------------------"
|
|
53
|
+
|
|
54
|
+
while IFS= read -r container; do
|
|
55
|
+
if [ -n "$container" ]; then
|
|
56
|
+
# Get container stats
|
|
57
|
+
STATS=$(docker stats --no-stream --format "{{.CPUPerc}}\t{{.MemUsage}}" "$container" 2>/dev/null || echo "N/A\tN/A")
|
|
58
|
+
CPU_PERCENT=$(echo "$STATS" | cut -f1 | sed 's/%//')
|
|
59
|
+
MEMORY_USAGE=$(echo "$STATS" | cut -f2)
|
|
60
|
+
|
|
61
|
+
# Extract memory in MB for calculation
|
|
62
|
+
MEMORY_MB=$(echo "$MEMORY_USAGE" | grep -o '[0-9.]*MiB' | sed 's/MiB//' || echo "0")
|
|
63
|
+
if [ -z "$MEMORY_MB" ]; then
|
|
64
|
+
MEMORY_MB=0
|
|
65
|
+
fi
|
|
66
|
+
|
|
67
|
+
# Status indicators
|
|
68
|
+
STATUS=""
|
|
69
|
+
if (( $(echo "$CPU_PERCENT > 50" | bc -l 2>/dev/null || echo 0) )); then
|
|
70
|
+
STATUS="${RED}🔥 HIGH CPU${NC}"
|
|
71
|
+
HIGH_CPU_COUNT=$((HIGH_CPU_COUNT + 1))
|
|
72
|
+
elif (( $(echo "$MEMORY_MB > 200" | bc -l 2>/dev/null || echo 0) )); then
|
|
73
|
+
STATUS="${YELLOW}⚠️ HIGH MEM${NC}"
|
|
74
|
+
HIGH_MEMORY_COUNT=$((HIGH_MEMORY_COUNT + 1))
|
|
75
|
+
else
|
|
76
|
+
STATUS="${GREEN}✅ OK${NC}"
|
|
77
|
+
fi
|
|
78
|
+
|
|
79
|
+
# Add to total memory
|
|
80
|
+
TOTAL_MEMORY_MB=$(echo "$TOTAL_MEMORY_MB + $MEMORY_MB" | bc -l 2>/dev/null || echo "$TOTAL_MEMORY_MB")
|
|
81
|
+
|
|
82
|
+
# Format container name for display
|
|
83
|
+
CONTAINER_DISPLAY=$(echo "$container" | sed 's/TDK_//' | cut -c1-20)
|
|
84
|
+
|
|
85
|
+
printf "%-20s\t%s%%\t%s\t%s\n" "$CONTAINER_DISPLAY" "$CPU_PERCENT" "$MEMORY_USAGE" "$STATUS"
|
|
86
|
+
fi
|
|
87
|
+
done <<< "$BEAUTY_CONTAINERS"
|
|
88
|
+
|
|
89
|
+
echo ""
|
|
90
|
+
echo -e "${BLUE}📈 Resource Summary:${NC}"
|
|
91
|
+
echo "=================================================="
|
|
92
|
+
echo -e "Total Memory Usage: ${YELLOW}~${TOTAL_MEMORY_MB}MB${NC}"
|
|
93
|
+
echo -e "High CPU Containers: ${RED}$HIGH_CPU_COUNT${NC}"
|
|
94
|
+
echo -e "High Memory Containers: ${YELLOW}$HIGH_MEMORY_COUNT${NC}"
|
|
95
|
+
|
|
96
|
+
# Recommendations
|
|
97
|
+
echo ""
|
|
98
|
+
echo -e "${BLUE}🔧 Mac M1 Optimization Recommendations:${NC}"
|
|
99
|
+
echo "=================================================="
|
|
100
|
+
|
|
101
|
+
if (( $(echo "$TOTAL_MEMORY_MB > 3000" | bc -l 2>/dev/null || echo 0) )); then
|
|
102
|
+
echo -e "${RED}⚠️ HIGH MEMORY USAGE DETECTED!${NC}"
|
|
103
|
+
echo "• Consider stopping unnecessary services with 'tilt down'"
|
|
104
|
+
echo "• Avoid running monitoring + elk + all apps simultaneously"
|
|
105
|
+
echo "• Use selective service loading: 'tilt up --focus <domain>' instead of all services"
|
|
106
|
+
elif (( $(echo "$TOTAL_MEMORY_MB > 2000" | bc -l 2>/dev/null || echo 0) )); then
|
|
107
|
+
echo -e "${YELLOW}⚡ MODERATE MEMORY USAGE${NC}"
|
|
108
|
+
echo "• Memory usage is acceptable for Mac M1"
|
|
109
|
+
echo "• Monitor for performance issues"
|
|
110
|
+
else
|
|
111
|
+
echo -e "${GREEN}✅ OPTIMAL MEMORY USAGE${NC}"
|
|
112
|
+
echo "• Memory usage is well optimized for Mac M1"
|
|
113
|
+
fi
|
|
114
|
+
|
|
115
|
+
echo ""
|
|
116
|
+
echo "• Increase Docker Desktop memory limit to 6-8GB if experiencing issues"
|
|
117
|
+
echo "• Use 'tilt trigger resource-monitor' for regular monitoring"
|
|
118
|
+
echo "• Use 'tilt trigger memory-optimizer' for additional suggestions"
|
|
119
|
+
|
|
120
|
+
echo ""
|
|
121
|
+
echo -e "${BLUE}🔄 To refresh this report: ./.tilt/assets/scripts/mac-m1-resource-monitor.sh${NC}"
|