@tdk-landscape/tdk-cli-core 1.3.15 → 1.3.22
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
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# Standalone Traefik compose for generated TDK projects
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Full platform checkouts load Introvertic/platform proxy compose files.
|
|
5
|
+
# Standalone `tdk project` output does not ship those files, so Tilt used to
|
|
6
|
+
# skip Traefik entirely and api.{project}.localhost never served.
|
|
7
|
+
|
|
8
|
+
load("../constants.star", "PlatformDockerConstants")
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def generate_standalone_traefik_compose():
|
|
12
|
+
"""Minimal Traefik that routes Docker labels on api.{project}.localhost."""
|
|
13
|
+
network = PlatformDockerConstants.NETWORK_TRAEFIK_PUBLIC
|
|
14
|
+
name = PlatformDockerConstants.PROJECT_NAME
|
|
15
|
+
return """###############################################################################
|
|
16
|
+
# SYSTEM-GENERATED - DO NOT EDIT
|
|
17
|
+
# Standalone Traefik for TDK projects without platform/introvertic proxy files.
|
|
18
|
+
###############################################################################
|
|
19
|
+
|
|
20
|
+
services:
|
|
21
|
+
traefik:
|
|
22
|
+
image: traefik:v3.6.8
|
|
23
|
+
container_name: {name}_traefik
|
|
24
|
+
restart: unless-stopped
|
|
25
|
+
command:
|
|
26
|
+
- "--api.insecure=true"
|
|
27
|
+
- "--ping=true"
|
|
28
|
+
- "--providers.docker=true"
|
|
29
|
+
- "--providers.docker.exposedbydefault=false"
|
|
30
|
+
- "--providers.docker.watch=true"
|
|
31
|
+
- "--providers.docker.network={network}"
|
|
32
|
+
- "--entrypoints.web.address=:80"
|
|
33
|
+
- "--entrypoints.websecure.address=:443"
|
|
34
|
+
- "--log.level=INFO"
|
|
35
|
+
ports:
|
|
36
|
+
- "80:80"
|
|
37
|
+
- "8080:8080"
|
|
38
|
+
volumes:
|
|
39
|
+
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
40
|
+
networks:
|
|
41
|
+
- traefik-public
|
|
42
|
+
healthcheck:
|
|
43
|
+
test: ["CMD", "traefik", "healthcheck", "--ping"]
|
|
44
|
+
interval: 10s
|
|
45
|
+
timeout: 5s
|
|
46
|
+
retries: 6
|
|
47
|
+
start_period: 10s
|
|
48
|
+
|
|
49
|
+
networks:
|
|
50
|
+
traefik-public:
|
|
51
|
+
name: {network}
|
|
52
|
+
external: true
|
|
53
|
+
""".format(name=name, network=network)
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🐳 TILT SDK - BUNIGNORE GENERATORS (Option 2: Reduce node_modules size)
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/topologies/platform/docker/bunignore.star
|
|
5
|
+
# Purpose: .bunignore generation to prevent unnecessary files from being installed
|
|
6
|
+
# Strategy: Exclude test files, docs, examples, and other non-production files
|
|
7
|
+
# =============================================================================
|
|
8
|
+
|
|
9
|
+
load('../../../tilt/common/utils.star', 'Utils')
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _get_common_bunignore_rules():
|
|
13
|
+
"""Get common .bunignore rules for all packages."""
|
|
14
|
+
return """# Documentation files (not needed at runtime)
|
|
15
|
+
*.md
|
|
16
|
+
*.markdown
|
|
17
|
+
*.rst
|
|
18
|
+
*.adoc
|
|
19
|
+
README*
|
|
20
|
+
CHANGELOG*
|
|
21
|
+
HISTORY*
|
|
22
|
+
CONTRIBUTING*
|
|
23
|
+
LICENSE*
|
|
24
|
+
COPYING*
|
|
25
|
+
AUTHORS*
|
|
26
|
+
NOTICE*
|
|
27
|
+
|
|
28
|
+
# Test files and directories
|
|
29
|
+
__tests__
|
|
30
|
+
__mocks__
|
|
31
|
+
test
|
|
32
|
+
tests
|
|
33
|
+
spec
|
|
34
|
+
specs
|
|
35
|
+
.test
|
|
36
|
+
.spec
|
|
37
|
+
*.test.js
|
|
38
|
+
*.test.ts
|
|
39
|
+
*.test.tsx
|
|
40
|
+
*.spec.js
|
|
41
|
+
*.spec.ts
|
|
42
|
+
*.spec.tsx
|
|
43
|
+
*.test.mjs
|
|
44
|
+
*.spec.mjs
|
|
45
|
+
test-results
|
|
46
|
+
playwright-report
|
|
47
|
+
vitest.config.*
|
|
48
|
+
jest.config.*
|
|
49
|
+
mocha.opts
|
|
50
|
+
|
|
51
|
+
# Example and demo files
|
|
52
|
+
examples
|
|
53
|
+
example
|
|
54
|
+
demo
|
|
55
|
+
demos
|
|
56
|
+
sample
|
|
57
|
+
samples
|
|
58
|
+
|
|
59
|
+
# Development and build configuration
|
|
60
|
+
.github
|
|
61
|
+
.gitlab
|
|
62
|
+
.gitignore
|
|
63
|
+
.editorconfig
|
|
64
|
+
.prettierrc*
|
|
65
|
+
.eslintrc*
|
|
66
|
+
.eslintignore
|
|
67
|
+
biome.json
|
|
68
|
+
tsconfig.json
|
|
69
|
+
tsconfig.*.json
|
|
70
|
+
vite.config.*
|
|
71
|
+
webpack.config.*
|
|
72
|
+
rollup.config.*
|
|
73
|
+
babel.config.*
|
|
74
|
+
.babelrc*
|
|
75
|
+
.npmrc
|
|
76
|
+
.yarnrc*
|
|
77
|
+
bunfig.toml
|
|
78
|
+
|
|
79
|
+
# Source code (not needed in node_modules)
|
|
80
|
+
src
|
|
81
|
+
lib/src
|
|
82
|
+
source
|
|
83
|
+
|
|
84
|
+
# Development dependencies markers
|
|
85
|
+
.peerDependencies
|
|
86
|
+
.optionalDependencies
|
|
87
|
+
|
|
88
|
+
# CI/CD and automation
|
|
89
|
+
.github
|
|
90
|
+
.gitlab-ci.yml
|
|
91
|
+
.travis.yml
|
|
92
|
+
.circleci
|
|
93
|
+
azure-pipelines.yml
|
|
94
|
+
Jenkinsfile
|
|
95
|
+
.drone.yml
|
|
96
|
+
|
|
97
|
+
# IDE and editor files
|
|
98
|
+
.vscode
|
|
99
|
+
.idea
|
|
100
|
+
.sublime-project
|
|
101
|
+
.sublime-workspace
|
|
102
|
+
*.swp
|
|
103
|
+
*.swo
|
|
104
|
+
*~
|
|
105
|
+
.DS_Store
|
|
106
|
+
|
|
107
|
+
# Build artifacts (keep only dist/lib)
|
|
108
|
+
build
|
|
109
|
+
out
|
|
110
|
+
.next
|
|
111
|
+
.nuxt
|
|
112
|
+
.output
|
|
113
|
+
coverage
|
|
114
|
+
.nyc_output
|
|
115
|
+
|
|
116
|
+
# Package manager lock files (not needed in node_modules)
|
|
117
|
+
package-lock.json
|
|
118
|
+
yarn.lock
|
|
119
|
+
pnpm-lock.yaml
|
|
120
|
+
bun.lockb
|
|
121
|
+
"""
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def generate_bunignore():
|
|
125
|
+
"""
|
|
126
|
+
Generate .bunignore file for the workspace root.
|
|
127
|
+
|
|
128
|
+
This file tells Bun which files to exclude when installing packages,
|
|
129
|
+
reducing node_modules size by ~30-40% without affecting functionality.
|
|
130
|
+
|
|
131
|
+
Returns:
|
|
132
|
+
.bunignore content string
|
|
133
|
+
"""
|
|
134
|
+
header = Utils.get_template_header(
|
|
135
|
+
'bunignore',
|
|
136
|
+
'Docker.generate_bunignore()',
|
|
137
|
+
'workspace-root',
|
|
138
|
+
'PRODUCTION OPTIMIZATION'
|
|
139
|
+
)
|
|
140
|
+
|
|
141
|
+
return header + _get_common_bunignore_rules()
|
|
142
|
+
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🐳 TILT SDK - DOCKERIGNORE GENERATORS (modular)
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Path: .tilt/topologies/platform/docker/dockerignore.star
|
|
5
|
+
# Purpose: .dockerignore generation helpers extracted from .tilt/providers/docker.star
|
|
6
|
+
# =============================================================================
|
|
7
|
+
|
|
8
|
+
# Import shared utilities for template headers
|
|
9
|
+
load('../../../tilt/common/utils.star', 'Utils')
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def _get_common_dockerignore_rules():
|
|
13
|
+
"""Get common .dockerignore rules for all service types."""
|
|
14
|
+
return """# Development files
|
|
15
|
+
node_modules
|
|
16
|
+
.git
|
|
17
|
+
.gitignore
|
|
18
|
+
.DS_Store
|
|
19
|
+
.env
|
|
20
|
+
.env.*
|
|
21
|
+
!.env.example
|
|
22
|
+
|
|
23
|
+
# IDE files
|
|
24
|
+
.vscode
|
|
25
|
+
.idea
|
|
26
|
+
*.swp
|
|
27
|
+
*~
|
|
28
|
+
|
|
29
|
+
# Build artifacts
|
|
30
|
+
coverage
|
|
31
|
+
*.log
|
|
32
|
+
npm-debug.log*
|
|
33
|
+
yarn-debug.log*
|
|
34
|
+
|
|
35
|
+
# Documentation
|
|
36
|
+
*.md
|
|
37
|
+
*.adoc
|
|
38
|
+
docs/
|
|
39
|
+
README*
|
|
40
|
+
|
|
41
|
+
# Configuration files not needed in production
|
|
42
|
+
.prettierrc
|
|
43
|
+
.eslintrc*
|
|
44
|
+
biome.json
|
|
45
|
+
tsconfig.tsbuildinfo
|
|
46
|
+
playwright.config.ts
|
|
47
|
+
playwright.config.autogenerated.ts
|
|
48
|
+
playwright.config.js
|
|
49
|
+
playwright.config.mjs
|
|
50
|
+
playwright.config.cjs
|
|
51
|
+
playwright.config.mts
|
|
52
|
+
playwright.config.cts
|
|
53
|
+
playwright.config.tsx
|
|
54
|
+
|
|
55
|
+
# Temporary files
|
|
56
|
+
tmp/
|
|
57
|
+
.cache/
|
|
58
|
+
.tmp/
|
|
59
|
+
|
|
60
|
+
# Shared packages source code (published to Verdaccio, installed via bun)
|
|
61
|
+
# These are not needed in Docker build context
|
|
62
|
+
shared-platform-engineering/
|
|
63
|
+
!shared-platform-engineering/docker-templates/
|
|
64
|
+
shared-product-engineering/
|
|
65
|
+
cli-platform-engineering/
|
|
66
|
+
shared-ddd-layers/
|
|
67
|
+
"""
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
def _get_backend_specific_rules():
|
|
71
|
+
"""Get backend-specific .dockerignore rules."""
|
|
72
|
+
return """# Test files
|
|
73
|
+
**/__tests__
|
|
74
|
+
**/__mocks__
|
|
75
|
+
*.test.ts
|
|
76
|
+
*.spec.ts
|
|
77
|
+
test-results
|
|
78
|
+
playwright-report
|
|
79
|
+
|
|
80
|
+
# Config files
|
|
81
|
+
vitest.config.ts
|
|
82
|
+
"""
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def _get_frontend_specific_rules():
|
|
86
|
+
"""Get frontend-specific .dockerignore rules."""
|
|
87
|
+
return """# Test files
|
|
88
|
+
**/__tests__
|
|
89
|
+
**/__mocks__
|
|
90
|
+
*.test.ts
|
|
91
|
+
*.test.tsx
|
|
92
|
+
*.spec.ts
|
|
93
|
+
*.spec.tsx
|
|
94
|
+
**/*.stories.tsx
|
|
95
|
+
test-results
|
|
96
|
+
playwright-report
|
|
97
|
+
e2e/
|
|
98
|
+
cucumber/
|
|
99
|
+
|
|
100
|
+
# Config files
|
|
101
|
+
# vite.config.ts
|
|
102
|
+
# vite.config.autogenerated.ts
|
|
103
|
+
# vite.config.frontend.autogenerated.ts
|
|
104
|
+
# vite.config.backend.autogenerated.ts
|
|
105
|
+
vitest.config.ts
|
|
106
|
+
|
|
107
|
+
# Build artifacts (dist is included in final image)
|
|
108
|
+
.next
|
|
109
|
+
.nuxt
|
|
110
|
+
.output
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def _get_migrator_specific_rules():
|
|
115
|
+
"""Get migrator-specific .dockerignore rules."""
|
|
116
|
+
return """# Test files (migrators typically don't have tests)
|
|
117
|
+
**/__tests__
|
|
118
|
+
**/__mocks__
|
|
119
|
+
*.test.ts
|
|
120
|
+
*.spec.ts
|
|
121
|
+
|
|
122
|
+
# Build artifacts
|
|
123
|
+
dist
|
|
124
|
+
"""
|
|
125
|
+
|
|
126
|
+
|
|
127
|
+
def generate_dockerignore(res_path, resource_type='backend'):
|
|
128
|
+
"""
|
|
129
|
+
Generate .dockerignore file for a service.
|
|
130
|
+
"""
|
|
131
|
+
# Generate header using shared utility
|
|
132
|
+
header = Utils.get_template_header(
|
|
133
|
+
'dockerignore',
|
|
134
|
+
'Docker.generate_dockerignore()',
|
|
135
|
+
res_path.split('/')[-1],
|
|
136
|
+
resource_type.upper()
|
|
137
|
+
)
|
|
138
|
+
|
|
139
|
+
# Start with common rules
|
|
140
|
+
content = header + _get_common_dockerignore_rules()
|
|
141
|
+
|
|
142
|
+
# Add service-specific rules
|
|
143
|
+
if resource_type == 'frontend':
|
|
144
|
+
content += _get_frontend_specific_rules()
|
|
145
|
+
elif resource_type == 'migrator':
|
|
146
|
+
content += _get_migrator_specific_rules()
|
|
147
|
+
else: # backend
|
|
148
|
+
content += _get_backend_specific_rules()
|
|
149
|
+
|
|
150
|
+
return content
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
# =============================================================================
|
|
2
|
+
# 🐳 PLATFORM DOCKER CONSTANTS
|
|
3
|
+
# =============================================================================
|
|
4
|
+
# Centralized configuration constants for Docker Compose generation.
|
|
5
|
+
# All DATABASE_URL formats, project names, runtime versions, and other
|
|
6
|
+
# shared constants are defined here to ensure consistency across the topology.
|
|
7
|
+
# =============================================================================
|
|
8
|
+
|
|
9
|
+
# Load project name from project.json (makes TDK CLI portable across projects)
|
|
10
|
+
# Falls back to 'tdk_project' / 'tdk-project' if project.json not found
|
|
11
|
+
# Use TDK_PROJECT_ROOT env var set by Tilt, fallback to current directory
|
|
12
|
+
def _load_project_names():
|
|
13
|
+
project_root = os.environ.get('TDK_PROJECT_ROOT', '')
|
|
14
|
+
project_json_path = '.tdk/project.json'
|
|
15
|
+
if project_root:
|
|
16
|
+
project_json_path = project_root + '/' + project_json_path
|
|
17
|
+
|
|
18
|
+
if os.path.exists(project_json_path):
|
|
19
|
+
_project_json = read_json(project_json_path)
|
|
20
|
+
_PROJECT_NAME_HYPHEN = _project_json.get('project', {}).get('name', 'tdk-project')
|
|
21
|
+
# Convert hyphenated name to underscore (e.g., "my-project" -> "my_project")
|
|
22
|
+
_PROJECT_NAME = _PROJECT_NAME_HYPHEN.replace('-', '_')
|
|
23
|
+
return _PROJECT_NAME, _PROJECT_NAME_HYPHEN
|
|
24
|
+
return "tdk_project", "tdk-project"
|
|
25
|
+
|
|
26
|
+
_PROJECT_NAME, _PROJECT_NAME_HYPHEN = _load_project_names()
|
|
27
|
+
|
|
28
|
+
# Project name constants
|
|
29
|
+
PROJECT_NAME = _PROJECT_NAME
|
|
30
|
+
PROJECT_NAME_HYPHEN = _PROJECT_NAME_HYPHEN
|
|
31
|
+
|
|
32
|
+
# Domain constants
|
|
33
|
+
LOCAL_DOMAIN = PROJECT_NAME_HYPHEN + ".localhost"
|
|
34
|
+
APP_SUBDOMAIN_PREFIX = "app"
|
|
35
|
+
API_SUBDOMAIN_PREFIX = "api"
|
|
36
|
+
APP_LOCAL_DOMAIN = APP_SUBDOMAIN_PREFIX + "." + LOCAL_DOMAIN
|
|
37
|
+
API_LOCAL_DOMAIN = API_SUBDOMAIN_PREFIX + "." + LOCAL_DOMAIN
|
|
38
|
+
EMAIL_DOMAIN = PROJECT_NAME_HYPHEN + ".local"
|
|
39
|
+
|
|
40
|
+
# NPM scope constant
|
|
41
|
+
NPM_SCOPE = "@" + PROJECT_NAME_HYPHEN + "/"
|
|
42
|
+
|
|
43
|
+
# Bun runtime constants
|
|
44
|
+
BUN_VERSION = "1.3.11"
|
|
45
|
+
BUN_IMAGE = "oven/bun:" + BUN_VERSION + "-alpine"
|
|
46
|
+
|
|
47
|
+
# Database connection constants
|
|
48
|
+
DB_USER = PROJECT_NAME
|
|
49
|
+
DB_HOST = PROJECT_NAME + "_postgres"
|
|
50
|
+
DB_PORT = "5432"
|
|
51
|
+
# ⚠️ SECURITY: No default password - must be provided via DB_PASSWORD env var
|
|
52
|
+
DB_PASSWORD_SHELL = "${DB_PASSWORD}" # Requires DB_PASSWORD to be set
|
|
53
|
+
DB_SCHEMA = "public"
|
|
54
|
+
|
|
55
|
+
# Network names
|
|
56
|
+
NETWORK_TRAEFIK_PUBLIC = PROJECT_NAME + "_traefik-public"
|
|
57
|
+
NETWORK_BACKEND = PROJECT_NAME + "_backend"
|
|
58
|
+
NETWORK_DATABASE = PROJECT_NAME + "_database"
|
|
59
|
+
NETWORK_INFISICAL = PROJECT_NAME + "_infisical-network"
|
|
60
|
+
NETWORK_PROXY = PROJECT_NAME + "_proxy"
|
|
61
|
+
|
|
62
|
+
# NATS constants
|
|
63
|
+
NATS_HOST = PROJECT_NAME + "_nats"
|
|
64
|
+
NATS_PORT = "4222"
|
|
65
|
+
NATS_URL = "nats://" + NATS_HOST + ":" + NATS_PORT
|
|
66
|
+
|
|
67
|
+
# Verdaccio constants
|
|
68
|
+
VERDACCIO_PORT = 4873
|
|
69
|
+
VERDACCIO_HOST = "localhost"
|
|
70
|
+
VERDACCIO_HOST_DOCKER = "host.docker.internal"
|
|
71
|
+
VERDACCIO_CONTAINER_NAME = PROJECT_NAME_HYPHEN + "-verdaccio"
|
|
72
|
+
VERDACCIO_URL_LOCAL = "http://" + VERDACCIO_HOST + ":" + str(VERDACCIO_PORT)
|
|
73
|
+
VERDACCIO_URL_DOCKER = "http://" + VERDACCIO_HOST_DOCKER + ":" + str(VERDACCIO_PORT)
|
|
74
|
+
VERDACCIO_NETWORK = PROJECT_NAME + "_verdaccio-network"
|
|
75
|
+
VERDACCIO_NPM_REGISTRY = "https://registry.npmjs.org/"
|
|
76
|
+
# Resource and service names
|
|
77
|
+
VERDACCIO_RESOURCE_NAME = "verdaccio"
|
|
78
|
+
VERDACCIO_CONNECT_NETWORK_RESOURCE = "verdaccio-connect-network"
|
|
79
|
+
VERDACCIO_DOMAIN = "verdaccio"
|
|
80
|
+
VERDACCIO_TRAEFIK_HOST = "verdaccio.localhost"
|
|
81
|
+
|
|
82
|
+
# Helper function to generate database name
|
|
83
|
+
def get_db_name(domain_or_service):
|
|
84
|
+
"""Returns standardized database name for a domain or service."""
|
|
85
|
+
return PROJECT_NAME + "_" + domain_or_service.replace("-", "_")
|
|
86
|
+
|
|
87
|
+
# Base JDBC URL format (without database name)
|
|
88
|
+
def get_database_url_base():
|
|
89
|
+
"""Returns base DATABASE_URL format without database name."""
|
|
90
|
+
return "postgresql://" + DB_USER + ":" + DB_PASSWORD_SHELL + "@" + DB_HOST + ":" + DB_PORT + "/"
|
|
91
|
+
|
|
92
|
+
# Complete DATABASE_URL with database name (for .env files)
|
|
93
|
+
def get_database_url_for_env(db_name):
|
|
94
|
+
"""Returns DATABASE_URL format for .env files (shell syntax preserved)."""
|
|
95
|
+
return get_database_url_base() + db_name + "?schema=" + DB_SCHEMA
|
|
96
|
+
|
|
97
|
+
# Complete DATABASE_URL with database name (for shell scripts)
|
|
98
|
+
def get_database_url_for_shell(db_name):
|
|
99
|
+
"""Returns DATABASE_URL format for shell scripts."""
|
|
100
|
+
return "postgresql://" + DB_USER + ":$DB_PASSWORD@" + DB_HOST + ":" + DB_PORT + "/" + db_name + "?schema=" + DB_SCHEMA
|
|
101
|
+
|
|
102
|
+
# Docker Compose environment variable format with fallback
|
|
103
|
+
def get_compose_env_database_url(db_name):
|
|
104
|
+
"""Returns Docker Compose environment variable format with fallback."""
|
|
105
|
+
base_url = get_database_url_for_env(db_name)
|
|
106
|
+
return "${{DATABASE_URL:-" + base_url + "}}"
|
|
107
|
+
|
|
108
|
+
# Tilt resource DATABASE_URL format (for Starlark .format() with host/port placeholders)
|
|
109
|
+
def get_tilt_database_url_template():
|
|
110
|
+
"""Returns DATABASE_URL template with {host} and {port} placeholders for .format()."""
|
|
111
|
+
# ⚠️ SECURITY: No default password - DB_PASSWORD must be set
|
|
112
|
+
return "postgresql://" + PROJECT_NAME + ":${DB_PASSWORD}@{host}:{port}/{db}?schema=public"
|
|
113
|
+
|
|
114
|
+
# Database config entry for config.star
|
|
115
|
+
DB_CONFIG = {
|
|
116
|
+
"host": DB_HOST,
|
|
117
|
+
"port": int(DB_PORT),
|
|
118
|
+
"user": DB_USER,
|
|
119
|
+
"password": DB_PASSWORD_SHELL,
|
|
120
|
+
"name_prefix": PROJECT_NAME + "_",
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
PlatformDockerConstants = struct(
|
|
124
|
+
PROJECT_NAME = PROJECT_NAME,
|
|
125
|
+
PROJECT_NAME_HYPHEN = PROJECT_NAME_HYPHEN,
|
|
126
|
+
LOCAL_DOMAIN = LOCAL_DOMAIN,
|
|
127
|
+
APP_SUBDOMAIN_PREFIX = APP_SUBDOMAIN_PREFIX,
|
|
128
|
+
API_SUBDOMAIN_PREFIX = API_SUBDOMAIN_PREFIX,
|
|
129
|
+
APP_LOCAL_DOMAIN = APP_LOCAL_DOMAIN,
|
|
130
|
+
API_LOCAL_DOMAIN = API_LOCAL_DOMAIN,
|
|
131
|
+
EMAIL_DOMAIN = EMAIL_DOMAIN,
|
|
132
|
+
NPM_SCOPE = NPM_SCOPE,
|
|
133
|
+
BUN_VERSION = BUN_VERSION,
|
|
134
|
+
BUN_IMAGE = BUN_IMAGE,
|
|
135
|
+
DB_USER = DB_USER,
|
|
136
|
+
DB_HOST = DB_HOST,
|
|
137
|
+
DB_PORT = DB_PORT,
|
|
138
|
+
DB_PASSWORD_SHELL = DB_PASSWORD_SHELL,
|
|
139
|
+
DB_SCHEMA = DB_SCHEMA,
|
|
140
|
+
NETWORK_TRAEFIK_PUBLIC = NETWORK_TRAEFIK_PUBLIC,
|
|
141
|
+
NETWORK_BACKEND = NETWORK_BACKEND,
|
|
142
|
+
NETWORK_DATABASE = NETWORK_DATABASE,
|
|
143
|
+
NETWORK_INFISICAL = NETWORK_INFISICAL,
|
|
144
|
+
NETWORK_PROXY = NETWORK_PROXY,
|
|
145
|
+
NATS_HOST = NATS_HOST,
|
|
146
|
+
NATS_PORT = NATS_PORT,
|
|
147
|
+
NATS_URL = NATS_URL,
|
|
148
|
+
# Verdaccio constants
|
|
149
|
+
VERDACCIO_PORT = VERDACCIO_PORT,
|
|
150
|
+
VERDACCIO_HOST = VERDACCIO_HOST,
|
|
151
|
+
VERDACCIO_HOST_DOCKER = VERDACCIO_HOST_DOCKER,
|
|
152
|
+
VERDACCIO_CONTAINER_NAME = VERDACCIO_CONTAINER_NAME,
|
|
153
|
+
VERDACCIO_URL_LOCAL = VERDACCIO_URL_LOCAL,
|
|
154
|
+
VERDACCIO_URL_DOCKER = VERDACCIO_URL_DOCKER,
|
|
155
|
+
VERDACCIO_NETWORK = VERDACCIO_NETWORK,
|
|
156
|
+
VERDACCIO_NPM_REGISTRY = VERDACCIO_NPM_REGISTRY,
|
|
157
|
+
VERDACCIO_RESOURCE_NAME = VERDACCIO_RESOURCE_NAME,
|
|
158
|
+
VERDACCIO_CONNECT_NETWORK_RESOURCE = VERDACCIO_CONNECT_NETWORK_RESOURCE,
|
|
159
|
+
VERDACCIO_DOMAIN = VERDACCIO_DOMAIN,
|
|
160
|
+
VERDACCIO_TRAEFIK_HOST = VERDACCIO_TRAEFIK_HOST,
|
|
161
|
+
DB_CONFIG = DB_CONFIG,
|
|
162
|
+
get_db_name = get_db_name,
|
|
163
|
+
get_database_url_base = get_database_url_base,
|
|
164
|
+
get_database_url_for_env = get_database_url_for_env,
|
|
165
|
+
get_database_url_for_shell = get_database_url_for_shell,
|
|
166
|
+
get_compose_env_database_url = get_compose_env_database_url,
|
|
167
|
+
get_tilt_database_url_template = get_tilt_database_url_template,
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
CONSTANTS = {}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Dockerfile generation exports
|
|
2
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
3
|
+
BASE_PORT_FRONTEND = 3000
|
|
4
|
+
BASE_PORT_BACKEND = 4000
|
|
5
|
+
# === END INLINED CONSTANTS ===
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
load('../generators/golden_docker_generator_v2.star', 'L4_generate_orchestrator')
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def generate_frontend_dockerfile(res_path, resource_name, port=BASE_PORT_FRONTEND, target_path='/app/dist', build_cmd='bun run build', cmd='bun run start', use_nginx=False, use_infisical=True, use_shared_libs=True, use_prisma=False, use_golden=True, manifest=None):
|
|
12
|
+
"""Generate Dockerfile for frontend services."""
|
|
13
|
+
return L4_generate_orchestrator(
|
|
14
|
+
res_path=res_path,
|
|
15
|
+
res_type='frontend',
|
|
16
|
+
resource_name=resource_name,
|
|
17
|
+
use_nginx=use_nginx,
|
|
18
|
+
port=port,
|
|
19
|
+
target_path=target_path,
|
|
20
|
+
build_cmd=build_cmd,
|
|
21
|
+
cmd=cmd,
|
|
22
|
+
use_infisical=use_infisical,
|
|
23
|
+
use_shared_libs=use_shared_libs,
|
|
24
|
+
use_prisma=use_prisma,
|
|
25
|
+
use_golden=use_golden,
|
|
26
|
+
manifest=manifest,
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
def generate_app_dockerfile(res_path, resource_name, port=BASE_PORT_BACKEND, build_cmd='bun run build', cmd='bun run start', use_infisical=True, use_shared_libs=True, use_prisma=True, use_golden=True, manifest=None):
|
|
30
|
+
"""Generate Dockerfile for backend/app services."""
|
|
31
|
+
return L4_generate_orchestrator(
|
|
32
|
+
res_path=res_path,
|
|
33
|
+
res_type='backend',
|
|
34
|
+
resource_name=resource_name,
|
|
35
|
+
port=port,
|
|
36
|
+
build_cmd=build_cmd,
|
|
37
|
+
cmd=cmd,
|
|
38
|
+
use_infisical=use_infisical,
|
|
39
|
+
use_shared_libs=use_shared_libs,
|
|
40
|
+
use_prisma=use_prisma,
|
|
41
|
+
use_golden=use_golden,
|
|
42
|
+
manifest=manifest,
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
def generate_migrator_dockerfile(res_path, resource_name, use_infisical=True, use_golden=True, manifest=None):
|
|
46
|
+
"""Generate Dockerfile for database migrator services."""
|
|
47
|
+
return L4_generate_orchestrator(
|
|
48
|
+
res_path=res_path,
|
|
49
|
+
res_type='migrator',
|
|
50
|
+
resource_name=resource_name,
|
|
51
|
+
use_infisical=use_infisical,
|
|
52
|
+
use_golden=use_golden,
|
|
53
|
+
manifest=manifest,
|
|
54
|
+
)
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# === INLINED CONSTANTS for pure extension loading ===
|
|
2
|
+
OUTPUT = struct(AUTOGENERATED_FOLDER = ".autogenerated")
|
|
3
|
+
# === END INLINED CONSTANTS ===
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
BUN_BASE = "oven/bun:1.3.11-alpine"
|
|
7
|
+
ALPINE_BASE = "alpine:3.18"
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
load('../../../tilt/common/utils.star', 'Utils')
|
|
11
|
+
load('../../../tilt/manifest/constants.star', 'GENERATED_CONFIG_FILENAMES')
|
|
12
|
+
|
|
13
|
+
# Load layer generators from dedicated modules
|
|
14
|
+
load('../layers/l1_base_layers.star', 'L1_generate_os_base', 'L1_generate_runtime_env')
|
|
15
|
+
load('../layers/l2_dependency_layers.star', 'L2_generate_dependency_manifest')
|
|
16
|
+
load('../layers/l3_builder_layers.star',
|
|
17
|
+
'L3_generate_backend_compiler',
|
|
18
|
+
'L3_generate_frontend_builder',
|
|
19
|
+
'L3_generate_production_purger'
|
|
20
|
+
)
|
|
21
|
+
load('../layers/prisma/prisma_build.star', 'L3_generate_migration_engine')
|
|
22
|
+
load('../layers/prisma/prisma_runtime.star', 'L4_generate_migrator_runtime')
|
|
23
|
+
load('../layers/l4_runtime_layers.star',
|
|
24
|
+
'L4_generate_backend_runtime',
|
|
25
|
+
'L4_generate_frontend_runtime',
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
def L4_generate_orchestrator(res_path, res_type = 'backend', resource_name = 'service', use_nginx = False, port = 3000, target_path = '/app/dist', build_cmd = 'bun run build', cmd = 'bun run start', use_infisical = True, use_shared_libs = True, use_prisma = True, use_golden = True, manifest = None):
|
|
29
|
+
parts = []
|
|
30
|
+
migrator_name_match = (
|
|
31
|
+
resource_name == 'migrator'
|
|
32
|
+
or resource_name.endswith('-migrator')
|
|
33
|
+
or resource_name.endswith('-db-migrator')
|
|
34
|
+
)
|
|
35
|
+
prisma_config_exists = use_prisma and read_file(res_path + '/' + OUTPUT.AUTOGENERATED_FOLDER + '/' + GENERATED_CONFIG_FILENAMES['prisma'], default='') != ''
|
|
36
|
+
parts.append(L1_generate_os_base(use_golden=use_golden))
|
|
37
|
+
parts.append(L1_generate_runtime_env(None))
|
|
38
|
+
parts.append(L2_generate_dependency_manifest(res_path, use_golden=use_golden))
|
|
39
|
+
|
|
40
|
+
if res_type == 'migrator' or (res_type == 'backend' and migrator_name_match):
|
|
41
|
+
# For migrators, skip backend_compiler and production_purger.
|
|
42
|
+
# Keep migration_engine only.
|
|
43
|
+
parts.append(L3_generate_migration_engine(res_path, use_golden=use_golden))
|
|
44
|
+
elif res_type == 'frontend':
|
|
45
|
+
parts.append(L3_generate_frontend_builder(res_path, build_cmd, use_infisical, use_shared_libs, use_golden=use_golden))
|
|
46
|
+
else:
|
|
47
|
+
parts.append(L3_generate_backend_compiler(res_path, build_cmd, use_prisma, use_shared_libs, use_infisical, use_golden=use_golden, has_prisma_config=prisma_config_exists))
|
|
48
|
+
# Backend runtime needs production-purged deps. Prisma migration stage
|
|
49
|
+
# is only required when Prisma is enabled for this resource.
|
|
50
|
+
if use_prisma:
|
|
51
|
+
parts.append(L3_generate_migration_engine(res_path, use_golden=use_golden))
|
|
52
|
+
parts.append(L3_generate_production_purger(res_path))
|
|
53
|
+
|
|
54
|
+
if res_type == 'frontend':
|
|
55
|
+
parts.append(L4_generate_frontend_runtime(res_path, target_path, use_nginx, use_golden=use_golden, port=port))
|
|
56
|
+
elif res_type == 'migrator' or (res_type == 'backend' and migrator_name_match):
|
|
57
|
+
parts.append(L4_generate_migrator_runtime(res_path, resource_name, use_golden=use_golden))
|
|
58
|
+
else:
|
|
59
|
+
parts.append(
|
|
60
|
+
L4_generate_backend_runtime(
|
|
61
|
+
res_path,
|
|
62
|
+
port,
|
|
63
|
+
cmd,
|
|
64
|
+
use_infisical,
|
|
65
|
+
resource_name,
|
|
66
|
+
use_golden=use_golden,
|
|
67
|
+
has_prisma_config=prisma_config_exists,
|
|
68
|
+
manifest=manifest,
|
|
69
|
+
),
|
|
70
|
+
)
|
|
71
|
+
dockerfile = "\n\n".join(parts)
|
|
72
|
+
footer = Utils.get_template_header("dockerfile", "golden_docker_generator_v2.L4_generate_orchestrator", resource_name, "Use docker_build(dockerfile_contents=...) in Tiltfile")
|
|
73
|
+
return dockerfile + "\n\n" + footer
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
load(
|
|
2
|
+
"./dockerfile/dockerfile.star",
|
|
3
|
+
"generate_frontend_dockerfile",
|
|
4
|
+
"generate_app_dockerfile",
|
|
5
|
+
"generate_migrator_dockerfile",
|
|
6
|
+
)
|
|
7
|
+
load("./config/dockerignore.star", "generate_dockerignore")
|
|
8
|
+
load(
|
|
9
|
+
"./compose/compose.star",
|
|
10
|
+
"generate_frontend_compose",
|
|
11
|
+
"generate_backend_compose_entry",
|
|
12
|
+
"generate_app_compose_from_entries",
|
|
13
|
+
"generate_migrator_compose",
|
|
14
|
+
)
|
|
15
|
+
load("./build/golden_image.star", "GoldenImage")
|
|
16
|
+
|
|
17
|
+
Docker = struct(
|
|
18
|
+
frontend = generate_frontend_dockerfile,
|
|
19
|
+
backend = generate_app_dockerfile,
|
|
20
|
+
migrator = generate_migrator_dockerfile,
|
|
21
|
+
generate_dockerignore = generate_dockerignore,
|
|
22
|
+
frontend_compose = generate_frontend_compose,
|
|
23
|
+
backend_compose = generate_backend_compose_entry,
|
|
24
|
+
app_compose = generate_app_compose_from_entries,
|
|
25
|
+
migrator_compose = generate_migrator_compose,
|
|
26
|
+
golden_image = GoldenImage,
|
|
27
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
Bun Helper Functions
|
|
3
|
+
"""
|
|
4
|
+
|
|
5
|
+
def bun_hoisted_packages_symlink_fix():
|
|
6
|
+
"""
|
|
7
|
+
Fix all Bun-hoisted package symlinks in node_modules.
|
|
8
|
+
|
|
9
|
+
When packages are installed with Bun's isolated store, they may be symlinked
|
|
10
|
+
from node_modules to .bun/. These symlinks break when copied to Docker.
|
|
11
|
+
This function recreates the necessary symlinks for runtime resolution.
|
|
12
|
+
|
|
13
|
+
Handles:
|
|
14
|
+
- Regular packages with nested node_modules (e.g., hono)
|
|
15
|
+
- Scoped packages (@hono/*, @prisma/*)
|
|
16
|
+
"""
|
|
17
|
+
return (
|
|
18
|
+
"# Fix Bun hoisted package symlinks that break when copied to Docker\n"
|
|
19
|
+
+ "USER root\n"
|
|
20
|
+
+ "COPY shared-platform-engineering/docker-templates/bun-hoisted-symlink-fix.sh /usr/local/bin/bun-hoisted-symlink-fix.sh\n"
|
|
21
|
+
+ "RUN chmod +x /usr/local/bin/bun-hoisted-symlink-fix.sh && /usr/local/bin/bun-hoisted-symlink-fix.sh\n"
|
|
22
|
+
+ "USER bun\n"
|
|
23
|
+
)
|