@flisk-sh/flisk 1.3.207 → 1.4.0
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/LICENSE +1 -1
- package/README.md +40 -37
- package/cli/dist/agent-runtimes/custom.js +3 -3
- package/cli/dist/agent-runtimes/registry.js +3 -3
- package/cli/dist/backend-frameworks/registry.js +8 -8
- package/cli/dist/backend-languages/python.js +4 -1
- package/cli/dist/backend-languages/registry.js +3 -3
- package/cli/dist/cli.js +4 -3
- package/cli/dist/commands/__tests__/project-e2e-helpers.js +6 -6
- package/cli/dist/commands/agent.js +8 -8
- package/cli/dist/commands/completion.js +26 -26
- package/cli/dist/commands/config.js +8 -8
- package/cli/dist/commands/doctor.js +18 -18
- package/cli/dist/commands/down.js +1 -1
- package/cli/dist/commands/eject.js +10 -10
- package/cli/dist/commands/help.js +2 -2
- package/cli/dist/commands/import.js +2 -2
- package/cli/dist/commands/logs.js +2 -2
- package/cli/dist/commands/mcp.js +2 -2
- package/cli/dist/commands/networks.js +2 -2
- package/cli/dist/commands/open.js +0 -1
- package/cli/dist/commands/project.js +19 -19
- package/cli/dist/commands/projects.js +1 -1
- package/cli/dist/commands/resource.js +21 -21
- package/cli/dist/commands/resources.js +2 -2
- package/cli/dist/commands/restart.js +7 -4
- package/cli/dist/commands/runtime.js +15 -3
- package/cli/dist/commands/stack.js +8 -8
- package/cli/dist/commands/up.js +23 -23
- package/cli/dist/commands/upgrade.js +44 -40
- package/cli/dist/frontend-frameworks/registry.js +3 -3
- package/cli/dist/generator/extension-fetch.js +12 -9
- package/cli/dist/generator/template-engine.js +66 -53
- package/cli/dist/mcp/tools.js +2 -2
- package/cli/dist/utils/agent-host.js +1 -1
- package/cli/dist/utils/cli-command.js +1 -1
- package/cli/dist/utils/cold-preflight.js +2 -2
- package/cli/dist/utils/constants.js +3 -3
- package/cli/dist/utils/discovery-paths.js +2 -2
- package/cli/dist/utils/doctor-fix.js +10 -10
- package/cli/dist/utils/doctor-report.js +3 -3
- package/cli/dist/utils/doctor-runtime.js +4 -3
- package/cli/dist/utils/doctor-starlark.js +3 -3
- package/cli/dist/utils/doctor-wiring.js +4 -4
- package/cli/dist/utils/down-cleanup.js +2 -2
- package/cli/dist/utils/env-compat-init.js +8 -0
- package/cli/dist/utils/env-compat.js +27 -0
- package/cli/dist/utils/env-selection.js +9 -9
- package/cli/dist/utils/errors.js +13 -13
- package/cli/dist/utils/file-helpers.js +5 -5
- package/cli/dist/utils/{tdk-version.js → flisk-version.js} +8 -8
- package/cli/dist/utils/generated-paths.js +6 -6
- package/cli/dist/utils/host-port-config.js +10 -10
- package/cli/dist/utils/host-port-plan.js +3 -3
- package/cli/dist/utils/machine-output.js +2 -2
- package/cli/dist/utils/native-windows.js +1 -1
- package/cli/dist/utils/paths.js +3 -3
- package/cli/dist/utils/platform.js +9 -9
- package/cli/dist/utils/port-conflict-fix.js +3 -3
- package/cli/dist/utils/port-fallback-notice.js +3 -3
- package/cli/dist/utils/project-config-defaults.js +1 -1
- package/cli/dist/utils/project-features.js +2 -2
- package/cli/dist/utils/resource-features.js +3 -3
- package/cli/dist/utils/runtime-layout.js +58 -0
- package/cli/dist/utils/schema-version-gate.js +3 -2
- package/cli/dist/utils/service-urls.js +3 -3
- package/cli/dist/utils/services.js +2 -2
- package/cli/dist/utils/shared-infra.js +2 -2
- package/cli/dist/utils/shared-platform-postgres.js +6 -6
- package/cli/dist/utils/tar.js +1 -1
- package/cli/dist/utils/tilt.js +1 -1
- package/cli/dist/utils/up-readiness.js +1 -1
- package/cli/dist/utils/windows-doctor.js +3 -3
- package/cli/dist-bundle/{chunk-D2DIEX5E.js → chunk-36SOQVAL.js} +2 -2
- package/cli/dist-bundle/{chunk-YZRPX76N.js → chunk-3J6XI3NX.js} +1 -1
- package/cli/dist-bundle/chunk-5EZ4EX6U.js +2 -0
- package/cli/dist-bundle/chunk-763VK575.js +54 -0
- package/cli/dist-bundle/{chunk-5LRMAY67.js → chunk-B6Q5VKL7.js} +13 -13
- package/cli/dist-bundle/{chunk-AGXA5DOQ.js → chunk-BWK6MPCB.js} +3 -3
- package/cli/dist-bundle/{chunk-SLKTM6ZO.js → chunk-D7N2GGJH.js} +14 -14
- package/cli/dist-bundle/chunk-HEMPQKD6.js +7 -0
- package/cli/dist-bundle/chunk-ICXF6PXA.js +35 -0
- package/cli/dist-bundle/chunk-K6SOCO6V.js +3 -0
- package/cli/dist-bundle/{chunk-6EA4DGCY.js → chunk-KJZUBHLO.js} +1 -1
- package/cli/dist-bundle/{chunk-GOEBYLFN.js → chunk-MINZ25AC.js} +1 -1
- package/cli/dist-bundle/{chunk-FAHNFTWN.js → chunk-PVBAGX5X.js} +2 -2
- package/cli/dist-bundle/chunk-QQEV6D74.js +2 -0
- package/cli/dist-bundle/chunk-VHFFSBVJ.js +10 -0
- package/cli/dist-bundle/chunk-VMB5673O.js +57 -0
- package/cli/dist-bundle/{chunk-53M5D4KE.js → chunk-XD3BBFZB.js} +1 -1
- package/cli/dist-bundle/{chunk-GIMHTZNR.js → chunk-YL56J2WX.js} +1 -1
- package/cli/dist-bundle/cli.js +254 -254
- package/cli/dist-bundle/cold-preflight-ABU26DYW.js +2 -0
- package/cli/dist-bundle/colima-GBURKN54.js +2 -0
- package/cli/dist-bundle/{demo-stage-ANHJKDZC.js → demo-stage-EBIUCJBX.js} +2 -2
- package/cli/dist-bundle/{devtools-MGITLOWZ.js → devtools-ZD6XIOLD.js} +2 -2
- package/cli/dist-bundle/extension-fetch-VEFSCG4B.js +2 -0
- package/cli/dist-bundle/native-windows-BWVEYVPO.js +2 -0
- package/cli/dist-bundle/{one-command-P6XVAXWV.js → one-command-VNKQAMFJ.js} +2 -2
- package/cli/dist-bundle/open-2KSAF6M2.js +2 -0
- package/cli/dist-bundle/project-YD3C4ZV3.js +2 -0
- package/cli/dist-bundle/project-templates-EYSQG2EO.js +2 -0
- package/cli/dist-bundle/{services-CBXN4SXC.js → services-V6Q55JR5.js} +2 -2
- package/cli/dist-bundle/{stack-progress-6GO2TCRH.js → stack-progress-NIFM5T2K.js} +2 -2
- package/cli/dist-bundle/tilt-port-owner-MWJ7P6NB.js +2 -0
- package/cli/dist-bundle/url-actions-HXJLBTX6.js +2 -0
- package/cli/package.json +5 -5
- package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -2
- package/cli/shared-platform-engineering/docker-templates/install-deps.sh +2 -2
- package/cli/templates/.tiltignore.hbs +2 -2
- package/cli/templates/TILT_RESOURCE_DEFAULTS.star.hbs +1 -1
- package/cli/templates/TILT_TECH_STACK.star.hbs +1 -1
- package/cli/templates/Tiltfile.hbs +21 -21
- package/cli/templates/spec.master.hbs +4 -4
- package/examples/tdk-example/LICENSE +1 -1
- package/examples/tdk-example/Tiltfile +10 -10
- package/examples/tdk-example/services/platform/messaging/docker-compose.yml +7 -7
- package/examples/tdk-example/services/shop/orders-api/service.json +1 -1
- package/examples/tdk-example/services/shop/orders-api/src/index.ts +1 -1
- package/examples/tdk-example/services/shop/orders-app/index.html +1 -1
- package/examples/tdk-example/services/shop/orders-worker/service.json +1 -1
- package/examples/tdk-example/services/shop/orders-worker/src/index.ts +1 -1
- package/package.json +29 -11
- package/{Tiltfile → runtime/Tiltfile} +9 -5
- package/{discovery → runtime/discovery}/AGENTS.md +1 -1
- package/{discovery → runtime/discovery}/TILT_DISCOVERY.star +5 -5
- package/{discovery → runtime/discovery}/Tiltfile +5 -5
- package/{discovery → runtime/discovery}/config.star +5 -5
- package/{discovery → runtime/discovery}/constants.star +14 -14
- package/{discovery → runtime/discovery}/deterministic.star +1 -1
- package/{discovery → runtime/discovery}/discovery_daemon.star +2 -2
- package/{discovery → runtime/discovery}/discovery_orchestrator.star +17 -17
- package/{discovery → runtime/discovery}/identity-management-backend/service.yaml +2 -2
- package/{discovery → runtime/discovery}/incremental_discovery.star +1 -1
- package/{discovery → runtime/discovery}/json_manifest_scanner.star +2 -2
- package/{discovery → runtime/discovery}/libraries.star +1 -1
- package/{discovery → runtime/discovery}/manifest/constants.star +1 -1
- package/{discovery → runtime/discovery}/manifest/loading.star +7 -7
- package/{discovery → runtime/discovery}/manifest/normalize.star +12 -15
- package/{discovery → runtime/discovery}/registry.star +11 -11
- package/{discovery → runtime/discovery}/resource_snapshot.py +2 -2
- package/{discovery → runtime/discovery}/resource_snapshot.star +6 -6
- package/{discovery → runtime/discovery}/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +2 -2
- package/{discovery → runtime/discovery}/test_resource_snapshot.py +6 -6
- package/{engine → runtime/engine}/AGENTS.md +6 -6
- package/{engine → runtime/engine}/README.md +2 -2
- package/{engine → runtime/engine}/Tiltfile +5 -5
- package/{engine → runtime/engine}/assets/docker/golden-layers.Dockerfile +17 -17
- package/{engine → runtime/engine}/assets/docker/wake-gateway/Dockerfile +7 -0
- package/{engine → runtime/engine}/entrypoint.star +1 -1
- package/{engine → runtime/engine}/paths.star +5 -5
- package/{engine → runtime/engine}/schemas/project-schema.json +2 -2
- package/{engine → runtime/engine}/schemas/service-schema.json +5 -5
- package/{engine → runtime/engine}/scripts/debug-container.sh +3 -3
- package/{engine → runtime/engine}/spec.master +3 -3
- package/{engine → runtime/engine}/topologies/README.md +3 -3
- package/{engine → runtime/engine}/topologies/platform/docker/build/golden_image_build.star +5 -5
- package/{engine → runtime/engine}/topologies/platform/docker/build/golden_image_constants.star +7 -7
- package/{engine → runtime/engine}/topologies/platform/docker/build/golden_image_dockerfile.star +8 -8
- package/{engine → runtime/engine}/topologies/platform/docker/compose/compose.star +12 -12
- package/{engine → runtime/engine}/topologies/platform/docker/compose/traefik_standalone.star +21 -6
- package/{engine → runtime/engine}/topologies/platform/docker/config/healthcheck.star +7 -7
- package/{engine → runtime/engine}/topologies/platform/docker/constants.star +7 -7
- package/{engine → runtime/engine}/topologies/platform/docker/dockerfile/language_dockerfile.star +3 -3
- package/{engine → runtime/engine}/topologies/platform/docker/layers/l1_base_layers.star +5 -5
- package/{engine → runtime/engine}/topologies/platform/docker/layers/l2_dependency_layers.star +14 -14
- package/{engine → runtime/engine}/topologies/platform/docker/layers/l3_builder_layers.star +5 -5
- package/{engine → runtime/engine}/topologies/platform/docker/layers/l4_runtime_layers.star +8 -8
- package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/constants.star +5 -5
- package/{engine → runtime/engine}/topologies/platform/docker/networking/api_path_constants.star +5 -5
- package/{engine → runtime/engine}/topologies/platform/docker/networking/sablier_container_cycle.star +1 -1
- package/{engine → runtime/engine}/topologies/platform/docker/networking/traefik_static_routes.star +1 -1
- package/{engine → runtime/engine}/topologies/platform/docker/secrets/env_secrets.star +2 -2
- package/{engine → runtime/engine}/topologies/platform/docker/secrets/infisical.star +4 -4
- package/{engine → runtime/engine}/topologies/platform/registries/verdaccio_loader.star +1 -1
- package/{engine → runtime/engine}/topologies/platform/security/secrets.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/common/utils.star +9 -10
- package/{engine → runtime/engine}/topologies/tilt/common/utils_debug.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/common/utils_deterministic.star +2 -2
- package/{engine → runtime/engine}/topologies/tilt/common/utils_env.star +5 -5
- package/{engine → runtime/engine}/topologies/tilt/config/profiles.star +4 -4
- package/{engine → runtime/engine}/topologies/tilt/generators/agents_md.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/generators/infisical/README.md +1 -1
- package/{engine → runtime/engine}/topologies/tilt/generators/infisical/organization.star +6 -6
- package/{engine → runtime/engine}/topologies/tilt/generators/npmrc.star +5 -5
- package/{engine → runtime/engine}/topologies/tilt/generators/typescript/backend_tsconfig.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/generators/typescript/playwright_config.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/generators/vite/helpers.star +7 -7
- package/{engine → runtime/engine}/topologies/tilt/generators/vite/templates.star +5 -5
- package/{engine → runtime/engine}/topologies/tilt/manifest/json_to_yaml.py +2 -2
- package/{engine → runtime/engine}/topologies/tilt/manifest/loader.star +2 -2
- package/{engine → runtime/engine}/topologies/tilt/manifest/schema.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/manifest/yaml_to_json.py +1 -1
- package/{engine → runtime/engine}/topologies/tilt/resources/build_concurrency.star +3 -3
- package/{engine → runtime/engine}/topologies/tilt/resources/databases.star +7 -6
- package/{engine → runtime/engine}/topologies/tilt/resources/infra-loader.star +12 -12
- package/{engine → runtime/engine}/topologies/tilt/resources/libs_paths.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/resources/libs_resource_definition.star +2 -2
- package/{engine → runtime/engine}/topologies/tilt/resources/libs_setup.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +36 -28
- package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply_migrator_orchestration.star +1 -1
- package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/frontend.star +5 -5
- package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/manifest_resource.star +4 -4
- package/{engine → runtime/engine}/topologies/tilt/resources/watchers.star +20 -20
- package/{engine → runtime/engine}/where-things-live.star +5 -5
- package/{ext → runtime/ext}/Tiltfile +5 -5
- package/{ext → runtime/ext}/ide-components/code_viewer/server.py +1 -1
- package/{ext → runtime/ext}/ide-components/config_inspector/server.py +2 -2
- package/{ext → runtime/ext}/ide-components/file_browser/server.py +1 -1
- package/{ext → runtime/ext}/ide-components/shared/config_service.py +2 -2
- package/{ext → runtime/ext}/ide-components/shared/file_utils.py +2 -2
- package/{ext → runtime/ext}/ide-components/shared/http_utils.py +1 -1
- package/{ext → runtime/ext}/ide-components/shared/syntax_highlighter.py +1 -1
- package/{ext → runtime/ext}/ide-components/shared/template_engine.py +1 -1
- package/{ext → runtime/ext}/ide-components/shared/templates/base.html +1 -1
- package/{ext → runtime/ext}/ide-components/shared/test_config_service.py +1 -1
- package/{ext → runtime/ext}/ide-components/shared/tilt_integration.py +1 -1
- package/{ext → runtime/ext}/ui-enhancements/tiltfile.py +1 -1
- package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -2
- package/shared-platform-engineering/docker-templates/install-deps.sh +2 -2
- package/cli/dist-bundle/chunk-42IVF3YT.js +0 -3
- package/cli/dist-bundle/chunk-AT5MFZ3D.js +0 -10
- package/cli/dist-bundle/chunk-BHWJU6HY.js +0 -2
- package/cli/dist-bundle/chunk-DWR3LLHS.js +0 -2
- package/cli/dist-bundle/chunk-GB6DJJ5N.js +0 -57
- package/cli/dist-bundle/chunk-ODYL6LET.js +0 -52
- package/cli/dist-bundle/chunk-YTXQPTCN.js +0 -35
- package/cli/dist-bundle/chunk-Z2C55UFP.js +0 -7
- package/cli/dist-bundle/cold-preflight-7PFKXNK7.js +0 -2
- package/cli/dist-bundle/colima-SVZX2UML.js +0 -2
- package/cli/dist-bundle/extension-fetch-6XNTDF44.js +0 -2
- package/cli/dist-bundle/native-windows-X5XVLFJS.js +0 -2
- package/cli/dist-bundle/open-VJZ7W4JR.js +0 -2
- package/cli/dist-bundle/project-QSH7LOWI.js +0 -2
- package/cli/dist-bundle/project-templates-JDRE7AVL.js +0 -2
- package/cli/dist-bundle/tilt-port-owner-SMN5SAQJ.js +0 -2
- package/cli/dist-bundle/url-actions-D6ROTHZG.js +0 -2
- /package/cli/bin/{tdk.js → flisk.js} +0 -0
- /package/{discovery → runtime/discovery}/filtering.star +0 -0
- /package/{discovery → runtime/discovery}/identity-management-frontend/service.yaml +0 -0
- /package/{discovery → runtime/discovery}/identity-sdk/service.yaml +0 -0
- /package/{discovery → runtime/discovery}/indexing.star +0 -0
- /package/{discovery → runtime/discovery}/loading.star +0 -0
- /package/{discovery → runtime/discovery}/manifest/validation.star +0 -0
- /package/{discovery → runtime/discovery}/normalization.star +0 -0
- /package/{discovery → runtime/discovery}/schemas.star +0 -0
- /package/{discovery → runtime/discovery}/services/platform/cdc/debezium/nats-connector/service.yaml +0 -0
- /package/{discovery → runtime/discovery}/services/platform/cdc/nats-http-bridge/service.yaml +0 -0
- /package/{discovery → runtime/discovery}/services/platform/synthetic-monitor/service.yaml +0 -0
- /package/{discovery → runtime/discovery}/validation.star +0 -0
- /package/{discovery → runtime/discovery}/versioning.star +0 -0
- /package/{engine → runtime/engine}/REFACTORING_MANIFEST_SYSTEM.md +0 -0
- /package/{engine → runtime/engine}/assets/docker/wake-gateway/decide.test.ts +0 -0
- /package/{engine → runtime/engine}/assets/docker/wake-gateway/decide.ts +0 -0
- /package/{engine → runtime/engine}/assets/docker/wake-gateway/server.ts +0 -0
- /package/{engine → runtime/engine}/assets/scripts/cleanup-completed-migrator-images.sh +0 -0
- /package/{engine → runtime/engine}/assets/scripts/cleanup-tilt-images.sh +0 -0
- /package/{engine → runtime/engine}/assets/scripts/mac-m1-resource-monitor.sh +0 -0
- /package/{engine → runtime/engine}/config.star +0 -0
- /package/{engine → runtime/engine}/lifecycle/orchestrator.star +0 -0
- /package/{engine → runtime/engine}/scripts/README.md +0 -0
- /package/{engine → runtime/engine}/scripts/build-and-publish-lib.sh +0 -0
- /package/{engine → runtime/engine}/scripts/check-lib-publish.sh +0 -0
- /package/{engine → runtime/engine}/scripts/generate-manifest.sh +0 -0
- /package/{engine → runtime/engine}/spec.master.example +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/auth/auth.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/build/frontend_build_plan.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/build/golden_image.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/compose/compose_helpers.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/compose/unsafe_value.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/config/bunignore.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/config/dockerignore.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/dockerfile/dockerfile.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/generators/golden_docker_generator_v2.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/index.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/bun_helpers.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/infisical/index.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/infisical/infisical_docker.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/db_readiness.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/filesystem_setup.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/migrate_script.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/prisma_build.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/prisma_runtime.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/layers/prisma/secret_resolution.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/networking/traefik.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/networking/traefik_constants.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/docker/networking/traefik_helpers.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/net/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/platform/net/proxy.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/registries/local.star +0 -0
- /package/{engine → runtime/engine}/topologies/platform/security/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/platform/state/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/platform/state/relational.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/common/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/common/utils_docker_networks.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/common/utils_output.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/config/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/config/defaults.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/config/feature_flags.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/config/global.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/api_gateway.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/index.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/infisical/examples.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/infisical/index.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/infisical/machine_identity.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/infisical/path_manager.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/infisical/secrets_generator.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/nginx_conf.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/tsconfig.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/backend_library_tsconfig.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/common.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/frontend_library_tsconfig.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/frontend_tsconfig.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/include.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/typescript/prisma_config.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/validators.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/backend.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/lit.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/preact.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/qwik.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/react.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/solid.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/svelte.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/vanilla.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frameworks/vue.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/frontend.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/generators.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/library.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite/sdk.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/generators/vite_config.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/README.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/__init__.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/constants.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/errors.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/integration.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/mapper.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/parser.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/tests/test_integration.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/tests/test_loader_parser.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/tests/test_manifest.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/tests/test_validator.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/manifest/validator.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/conditions.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/declaration.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/deps.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/libs.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/libs_discovery.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/libs_tsconfig.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply_manifest_orchestration.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply_resource_validation.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/apply_runtime_flags.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/builders/typescript.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/dependencies/AGENTS.md +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/dependencies/index.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/dependencies/resolver.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/generators/env.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator/helpers.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/orchestrator.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/ordering.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/shared-platform-postgres.star +0 -0
- /package/{engine → runtime/engine}/topologies/tilt/resources/triggers.star +0 -0
- /package/{ext → runtime/ext}/ide-components/README.md +0 -0
- /package/{ext → runtime/ext}/ide-components/shared/static/styles.css +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/cron-status-server.sh +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/cron-status-tracker.sh +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/extension.yaml +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/ui/cron-jobs-tab.css +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/ui/help-panel.css +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/ui/icons.css +0 -0
- /package/{ext → runtime/ext}/ui-enhancements/ui/tooltips.css +0 -0
- /package/{specs → runtime/specs}/specs/TILT_SERVICE_DEFAULTS.star +0 -0
- /package/{specs → runtime/specs}/specs/TILT_TECH_STACK.star +0 -0
|
@@ -8,8 +8,9 @@ import { PLATFORM_STANDARDS } from "../config/platform-standards.js";
|
|
|
8
8
|
import { writeTextFileAtomic } from "../utils/atomic-write.js";
|
|
9
9
|
import { AUTOGENERATED_DIR, DATABASE_MANAGEMENT_FEATURE, DOCKER_COMPOSE_FILE, PACKAGE_JSON, PROJECT_JSON, RESOURCE_DEFAULTS_FILE, TECH_STACK_FILE, TILTIGNORE_FILE, } from "../utils/constants.js";
|
|
10
10
|
import { writeTextFile } from "../utils/file-helpers.js";
|
|
11
|
-
import {
|
|
11
|
+
import { assertFliskGeneratedPath } from "../utils/generated-paths.js";
|
|
12
12
|
import { DEFAULT_ALWAYS_ENABLED_INFRA } from "../utils/project-config-defaults.js";
|
|
13
|
+
import { describeLayoutProblems, EXTENSION_DIRS, hasExtensionLayout, inspectExtensionLayout, resolveExtensionDir, resolveTiltfile, } from "../utils/runtime-layout.js";
|
|
13
14
|
import { generatedFieldErrorsForFile, validateServiceManifestFile, } from "../utils/service-manifest.js";
|
|
14
15
|
import { discoverResourcesFromRoot, discoverServiceManifestPaths } from "../utils/services.js";
|
|
15
16
|
import { isStackFeatureEnabledInStacks } from "../utils/stack-features.js";
|
|
@@ -26,9 +27,9 @@ export function loadTemplate(filename) {
|
|
|
26
27
|
path.join(process.cwd(), "node_modules", "@flisk-sh", "flisk", "templates"), // Monorepo root
|
|
27
28
|
// Compiled single-file binary (bun build --compile): __dirname resolves inside the
|
|
28
29
|
// virtual $bunfs filesystem, not a real path, so fall back to the directory the actual
|
|
29
|
-
// executable lives in. release-binaries.sh bundles cli/templates at
|
|
30
|
+
// executable lives in. release-binaries.sh bundles cli/templates at flisk-cli/cli/templates
|
|
30
31
|
// next to the platform binaries.
|
|
31
|
-
path.join(path.dirname(process.execPath), "
|
|
32
|
+
path.join(path.dirname(process.execPath), "flisk-cli", "cli", "templates"),
|
|
32
33
|
];
|
|
33
34
|
const triedPaths = [];
|
|
34
35
|
for (const templateDir of templateDirs) {
|
|
@@ -225,11 +226,11 @@ function toComposeProjectName(projectName) {
|
|
|
225
226
|
return projectName.replace(/-/g, "_");
|
|
226
227
|
}
|
|
227
228
|
export function generateDatabaseManagementCompose(projectConfig) {
|
|
228
|
-
const name = toComposeProjectName(projectConfig.project.name || "
|
|
229
|
+
const name = toComposeProjectName(projectConfig.project.name || "flisk_project");
|
|
229
230
|
return `###############################################################################
|
|
230
231
|
# SYSTEM-GENERATED - DO NOT EDIT
|
|
231
232
|
# Stack feature: database-management
|
|
232
|
-
# Source: .
|
|
233
|
+
# Source: .flisk/project.json phases.*.enabledStacks includes "database-management"
|
|
233
234
|
# Regenerate with: flisk config regenerate
|
|
234
235
|
###############################################################################
|
|
235
236
|
|
|
@@ -243,7 +244,7 @@ services:
|
|
|
243
244
|
POSTGRES_PASSWORD: \${DB_PASSWORD}
|
|
244
245
|
POSTGRES_DB: postgres
|
|
245
246
|
ports:
|
|
246
|
-
- "\${
|
|
247
|
+
- "\${FLISK_BIND_ADDRESS:-127.0.0.1}:\${FLISK_POSTGRES_PORT:-15432}:5432"
|
|
247
248
|
volumes:
|
|
248
249
|
- ${name}_postgres_data:/var/lib/postgresql/data
|
|
249
250
|
networks:
|
|
@@ -361,11 +362,11 @@ function normalizeProjectConfig(value) {
|
|
|
361
362
|
overrides: config.overrides,
|
|
362
363
|
};
|
|
363
364
|
}
|
|
364
|
-
/** The project has no .
|
|
365
|
+
/** The project has no .flisk/project.json yet, as opposed to one that exists but is unreadable or invalid. */
|
|
365
366
|
export class ProjectConfigNotFoundError extends Error {
|
|
366
367
|
}
|
|
367
368
|
/**
|
|
368
|
-
* Reads, parses, and normalizes `.
|
|
369
|
+
* Reads, parses, and normalizes `.flisk/project.json` from the given project root.
|
|
369
370
|
*
|
|
370
371
|
* The file is read directly instead of being existence-checked first: `fs.existsSync` swallows
|
|
371
372
|
* filesystem errors and reports an inaccessible config as missing, which hides the real reason.
|
|
@@ -375,7 +376,7 @@ export class ProjectConfigNotFoundError extends Error {
|
|
|
375
376
|
* @returns The validated and normalized {@link ProjectConfig}.
|
|
376
377
|
*/
|
|
377
378
|
export function readProjectConfig(projectRoot) {
|
|
378
|
-
const projectJsonPath = path.join(projectRoot, ".
|
|
379
|
+
const projectJsonPath = path.join(projectRoot, ".flisk", PROJECT_JSON);
|
|
379
380
|
let jsonContent;
|
|
380
381
|
try {
|
|
381
382
|
jsonContent = fs.readFileSync(projectJsonPath, "utf-8");
|
|
@@ -409,8 +410,8 @@ export function readProjectConfig(projectRoot) {
|
|
|
409
410
|
// Premium, but unlike Verdaccio below, this is NOT the enforcement - it's a
|
|
410
411
|
// friendly heads-up. The real gate is that engine/.../sablier_container_cycle.star
|
|
411
412
|
// in this (public) repo is a free-tier stub that always returns disabled; the
|
|
412
|
-
// working implementation only exists in the private
|
|
413
|
-
// bundle, applied by
|
|
413
|
+
// working implementation only exists in the private flisk-cli-extensions/premium/
|
|
414
|
+
// bundle, applied by vendorFliskExtension()'s applyPremiumOverlay() below when a
|
|
414
415
|
// license grants it. Forking this repo and deleting a license check (as you
|
|
415
416
|
// could with Verdaccio/DDD) gets you nothing here, because there's no check to
|
|
416
417
|
// delete - the actual code simply isn't present without the overlay. This just
|
|
@@ -425,11 +426,11 @@ async function warnIfSablierUnlicensed(projectRoot) {
|
|
|
425
426
|
return;
|
|
426
427
|
console.warn(`⚠️ Sablier (on-demand scaling) is a Premium feature - no valid license key found. ` +
|
|
427
428
|
`${resources.length} resource${resources.length === 1 ? " has" : "s have"} a \`sablier\` block, ` +
|
|
428
|
-
"but it will have no effect without a license. Set
|
|
429
|
+
"but it will have no effect without a license. Set FLISK_LICENSE_KEY to a key that grants it, " +
|
|
429
430
|
"or remove the `sablier` block from the affected service.json file(s) to silence this warning.");
|
|
430
431
|
}
|
|
431
432
|
function ensureRootWorkspaceManifest(projectRoot, projectConfig) {
|
|
432
|
-
const packageJsonPath =
|
|
433
|
+
const packageJsonPath = assertFliskGeneratedPath(projectRoot, PACKAGE_JSON);
|
|
433
434
|
if (fs.existsSync(packageJsonPath)) {
|
|
434
435
|
return false;
|
|
435
436
|
}
|
|
@@ -459,8 +460,8 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
459
460
|
// enforcement - it's a friendly heads-up. The real gate is that
|
|
460
461
|
// engine/topologies/platform/registries/verdaccio_loader.star in this
|
|
461
462
|
// (public) repo is a free-tier stub that always skips; the working loader
|
|
462
|
-
// only exists in the private
|
|
463
|
-
// by
|
|
463
|
+
// only exists in the private flisk-cli-extensions/premium/ bundle, applied
|
|
464
|
+
// by vendorFliskExtension()'s applyPremiumOverlay() below when a license
|
|
464
465
|
// grants it. Forking this repo and deleting a license check gets you
|
|
465
466
|
// nothing, because there's no check left to delete - the actual code
|
|
466
467
|
// simply isn't present without the overlay. This just tells a confused
|
|
@@ -471,11 +472,11 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
471
472
|
const granted = await hasVerdaccioLicense(projectRoot);
|
|
472
473
|
if (!granted) {
|
|
473
474
|
console.warn("⚠️ Verdaccio is a Premium feature - no valid license key found. It's enabled in " +
|
|
474
|
-
"this project's config, but will have no effect without a license. Set
|
|
475
|
+
"this project's config, but will have no effect without a license. Set FLISK_LICENSE_KEY " +
|
|
475
476
|
"to a key that grants it, or run `flisk config disable-infra verdaccio` to silence this warning.");
|
|
476
477
|
}
|
|
477
478
|
}
|
|
478
|
-
const outputDir = path.join(projectRoot, ".
|
|
479
|
+
const outputDir = path.join(projectRoot, ".flisk", ".flisk-out");
|
|
479
480
|
if (!fs.existsSync(outputDir)) {
|
|
480
481
|
fs.mkdirSync(outputDir, { recursive: true });
|
|
481
482
|
}
|
|
@@ -483,13 +484,13 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
483
484
|
const files = engine.generateAll(projectConfig);
|
|
484
485
|
for (const filename of ALL_GENERATED_FILES) {
|
|
485
486
|
const content = files[filename];
|
|
486
|
-
const filePath =
|
|
487
|
+
const filePath = assertFliskGeneratedPath(projectRoot, path.join(".flisk", ".flisk-out", filename));
|
|
487
488
|
writeTextFileAtomic(filePath, content);
|
|
488
489
|
if (!options.quiet)
|
|
489
|
-
console.log(`✓ Generated: .
|
|
490
|
+
console.log(`✓ Generated: .flisk/.flisk-out/${filename}`);
|
|
490
491
|
}
|
|
491
492
|
if (isStackFeatureEnabledInStacks(projectConfig.phases, DATABASE_MANAGEMENT_FEATURE)) {
|
|
492
|
-
const composePath =
|
|
493
|
+
const composePath = assertFliskGeneratedPath(projectRoot, path.join("services", "platform", DATABASE_MANAGEMENT_FEATURE, DOCKER_COMPOSE_FILE));
|
|
493
494
|
const composeDir = path.dirname(composePath);
|
|
494
495
|
fs.mkdirSync(composeDir, { recursive: true });
|
|
495
496
|
writeTextFileAtomic(composePath, generateDatabaseManagementCompose(projectConfig));
|
|
@@ -499,7 +500,7 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
499
500
|
}
|
|
500
501
|
// Copy .tiltignore to project root so Tilt uses it
|
|
501
502
|
const tiltignoreSource = path.join(outputDir, TILTIGNORE_FILE);
|
|
502
|
-
const tiltignoreTarget =
|
|
503
|
+
const tiltignoreTarget = assertFliskGeneratedPath(projectRoot, TILTIGNORE_FILE);
|
|
503
504
|
if (fs.existsSync(tiltignoreSource)) {
|
|
504
505
|
if (!fs.existsSync(tiltignoreTarget)) {
|
|
505
506
|
fs.copyFileSync(tiltignoreSource, tiltignoreTarget);
|
|
@@ -510,7 +511,7 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
510
511
|
// Only a file Flisk wrote (it carries the header) may be restored; one without the
|
|
511
512
|
// header is the team's own and `verifyMasterConfigs` reports it as a warning.
|
|
512
513
|
const current = fs.readFileSync(tiltignoreTarget, "utf-8");
|
|
513
|
-
if (current.includes(
|
|
514
|
+
if (current.includes(FLISK_GENERATED_MARKER) &&
|
|
514
515
|
current !== fs.readFileSync(tiltignoreSource, "utf-8")) {
|
|
515
516
|
fs.copyFileSync(tiltignoreSource, tiltignoreTarget);
|
|
516
517
|
if (!options.quiet) {
|
|
@@ -525,7 +526,7 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
525
526
|
console.log(`✓ Copied: ${asset} → project root`);
|
|
526
527
|
}
|
|
527
528
|
}
|
|
528
|
-
await
|
|
529
|
+
await vendorFliskExtension(projectRoot, { quiet: options.quiet });
|
|
529
530
|
if (!options.quiet) {
|
|
530
531
|
console.log("");
|
|
531
532
|
console.log("💡 To start Tilt: flisk up");
|
|
@@ -533,11 +534,11 @@ export async function generateMasterConfigs(projectRoot, options = {}) {
|
|
|
533
534
|
}
|
|
534
535
|
// The generated Tiltfile loads the Flisk Tilt extension (engine, discovery,
|
|
535
536
|
// specs, ext starlark modules). The extension repo may stay private, so we
|
|
536
|
-
// vendor a working copy into .
|
|
537
|
+
// vendor a working copy into .flisk/.flisk-out/flisk-cli-ext/ at generation time.
|
|
537
538
|
// This makes `flisk up` work offline and on any machine - no hardcoded paths,
|
|
538
539
|
// no dependency on a private GitHub repo.
|
|
539
540
|
// The engine's own unit tests (for example wake-gateway/decide.test.ts, which imports bun:test) are
|
|
540
|
-
// not needed to run a stack. Vendoring them under .
|
|
541
|
+
// not needed to run a stack. Vendoring them under .flisk/.flisk-out makes a Node project's test runner
|
|
541
542
|
// (Vitest, Jest) discover them and fail, so they are left out of the vendored copy.
|
|
542
543
|
const TEST_FILE_PATTERN = /\.(?:test|spec)\.[cm]?[jt]sx?$/;
|
|
543
544
|
export function isTestFile(filePath) {
|
|
@@ -556,7 +557,7 @@ function removeVendoredTestFiles(dir) {
|
|
|
556
557
|
}
|
|
557
558
|
}
|
|
558
559
|
}
|
|
559
|
-
const
|
|
560
|
+
const FLISK_EXTENSION_DIRS = EXTENSION_DIRS;
|
|
560
561
|
const PROJECT_RUNTIME_ASSET_DIRS = [["shared-platform-engineering", "docker-templates"]];
|
|
561
562
|
const REQUIRED_DOCKER_TEMPLATE_FILES = [
|
|
562
563
|
"install-deps.sh",
|
|
@@ -571,7 +572,7 @@ const REQUIRED_DOCKER_TEMPLATE_FILES = [
|
|
|
571
572
|
function findSelfContainedEngineRoot() {
|
|
572
573
|
let dir = import.meta.dirname || process.cwd();
|
|
573
574
|
for (let i = 0; i < 6; i++) {
|
|
574
|
-
if (
|
|
575
|
+
if (hasExtensionLayout(dir)) {
|
|
575
576
|
return dir;
|
|
576
577
|
}
|
|
577
578
|
const parent = path.dirname(dir);
|
|
@@ -594,7 +595,7 @@ export function findCliAssetRoot() {
|
|
|
594
595
|
}
|
|
595
596
|
const exeDir = path.dirname(process.execPath);
|
|
596
597
|
const candidates = [
|
|
597
|
-
path.join(exeDir, "
|
|
598
|
+
path.join(exeDir, "flisk-cli"),
|
|
598
599
|
path.join(process.cwd(), "node_modules", "@flisk-sh", "flisk"),
|
|
599
600
|
];
|
|
600
601
|
return (candidates.find((candidate) => fs.existsSync(path.join(candidate, "shared-platform-engineering", "docker-templates"))) ?? null);
|
|
@@ -609,7 +610,7 @@ export function ensureProjectRuntimeAssets(projectRoot) {
|
|
|
609
610
|
}
|
|
610
611
|
for (const parts of PROJECT_RUNTIME_ASSET_DIRS) {
|
|
611
612
|
const source = path.join(sourceRoot, ...parts);
|
|
612
|
-
const target =
|
|
613
|
+
const target = assertFliskGeneratedPath(projectRoot, path.join(...parts));
|
|
613
614
|
if (!fs.existsSync(source)) {
|
|
614
615
|
continue;
|
|
615
616
|
}
|
|
@@ -625,16 +626,16 @@ export function ensureProjectRuntimeAssets(projectRoot) {
|
|
|
625
626
|
}
|
|
626
627
|
return copied;
|
|
627
628
|
}
|
|
628
|
-
async function
|
|
629
|
-
const vendoredDir =
|
|
629
|
+
async function vendorFliskExtension(projectRoot, options = {}) {
|
|
630
|
+
const vendoredDir = assertFliskGeneratedPath(projectRoot, path.join(".flisk", ".flisk-out", "flisk-cli-ext"));
|
|
630
631
|
// Source resolution order:
|
|
631
|
-
// 1. $
|
|
632
|
+
// 1. $FLISK_EXTENSION_SOURCE (explicit override)
|
|
632
633
|
// 2. Self-contained repo (engine/ ships next to cli/ - public flisk)
|
|
633
634
|
// 3. Executable-adjacent checkout (bundled installs)
|
|
634
|
-
// 4. Relative ../
|
|
635
|
+
// 4. Relative ../flisk-cli sibling (monorepo maintainer layout)
|
|
635
636
|
const sources = [];
|
|
636
|
-
if (process.env.
|
|
637
|
-
sources.push(process.env.
|
|
637
|
+
if (process.env.FLISK_EXTENSION_SOURCE) {
|
|
638
|
+
sources.push(process.env.FLISK_EXTENSION_SOURCE);
|
|
638
639
|
}
|
|
639
640
|
const selfContainedRoot = findSelfContainedEngineRoot();
|
|
640
641
|
if (selfContainedRoot) {
|
|
@@ -648,37 +649,49 @@ async function vendorTdkExtension(projectRoot, options = {}) {
|
|
|
648
649
|
// Bun's process object - it was always undefined, silently falling
|
|
649
650
|
// back to cwd() instead of the binary's real location.
|
|
650
651
|
const exeDir = path.dirname(process.execPath);
|
|
651
|
-
sources.push(path.join(exeDir, "
|
|
652
|
-
sources.push(path.join(projectRoot, "..", "
|
|
652
|
+
sources.push(path.join(exeDir, "flisk-cli"));
|
|
653
|
+
sources.push(path.join(projectRoot, "..", "flisk-cli"));
|
|
654
|
+
// An explicit override that fails the layout check is skipped below; say why instead of silently falling
|
|
655
|
+
// back to a different copy of the extension.
|
|
656
|
+
const override = process.env.FLISK_EXTENSION_SOURCE;
|
|
657
|
+
if (override && fs.existsSync(override) && !hasExtensionLayout(override)) {
|
|
658
|
+
console.warn(`⚠️ FLISK_EXTENSION_SOURCE is not a usable Flisk extension and is ignored:\n ${describeLayoutProblems(override)}`);
|
|
659
|
+
}
|
|
653
660
|
let sourceRoot = "";
|
|
654
661
|
for (const candidate of sources) {
|
|
655
|
-
if (candidate &&
|
|
656
|
-
fs.existsSync(path.join(candidate, "Tiltfile")) &&
|
|
657
|
-
fs.existsSync(path.join(candidate, "engine"))) {
|
|
662
|
+
if (candidate && hasExtensionLayout(candidate)) {
|
|
658
663
|
sourceRoot = candidate;
|
|
659
664
|
break;
|
|
660
665
|
}
|
|
661
666
|
}
|
|
662
667
|
if (!sourceRoot) {
|
|
663
|
-
|
|
664
|
-
|
|
668
|
+
// A candidate that has some extension entries but fails the layout check is a stale or half-migrated tree.
|
|
669
|
+
const broken = sources
|
|
670
|
+
.filter((candidate) => candidate && fs.existsSync(candidate))
|
|
671
|
+
.map((candidate) => ({ candidate, report: inspectExtensionLayout(candidate) }))
|
|
672
|
+
.filter(({ report }) => report.kind === "mixed" || report.missing.length < 5);
|
|
673
|
+
console.warn("⚠️ Flisk extension not found - set FLISK_EXTENSION_SOURCE to its checkout path " +
|
|
674
|
+
"and re-run `flisk project` (or `flisk config regenerate`) to vendor it before `flisk up`." +
|
|
675
|
+
broken
|
|
676
|
+
.map(({ candidate, report }) => `\n ${describeLayoutProblems(candidate, report)}`)
|
|
677
|
+
.join(""));
|
|
665
678
|
return;
|
|
666
679
|
}
|
|
667
680
|
if (!fs.existsSync(vendoredDir)) {
|
|
668
681
|
fs.mkdirSync(vendoredDir, { recursive: true });
|
|
669
682
|
}
|
|
670
|
-
fs.copyFileSync(
|
|
671
|
-
for (const dir of
|
|
683
|
+
fs.copyFileSync(resolveTiltfile(sourceRoot), path.join(vendoredDir, "Tiltfile"));
|
|
684
|
+
for (const dir of FLISK_EXTENSION_DIRS) {
|
|
672
685
|
// A project vendored by an older Flisk already holds test files; cpSync only adds, so drop them.
|
|
673
686
|
removeVendoredTestFiles(path.join(vendoredDir, dir));
|
|
674
|
-
fs.cpSync(
|
|
687
|
+
fs.cpSync(resolveExtensionDir(sourceRoot, dir), path.join(vendoredDir, dir), {
|
|
675
688
|
recursive: true,
|
|
676
689
|
filter: (source) => !isTestFile(source),
|
|
677
690
|
});
|
|
678
691
|
}
|
|
679
692
|
if (!options.quiet)
|
|
680
|
-
console.log(`✓ Vendored Flisk extension → .
|
|
681
|
-
// Best-effort: if
|
|
693
|
+
console.log(`✓ Vendored Flisk extension → .flisk/.flisk-out/flisk-cli-ext/`);
|
|
694
|
+
// Best-effort: if FLISK_LICENSE_KEY is set and grants any paid resource,
|
|
682
695
|
// overlay the premium bundle over the stub files just vendored above.
|
|
683
696
|
// No-ops silently (beyond a warning) if there's no key, the fetch
|
|
684
697
|
// fails, or nothing's granted - the free engine already works fine on
|
|
@@ -691,7 +704,7 @@ async function vendorTdkExtension(projectRoot, options = {}) {
|
|
|
691
704
|
console.warn(`⚠️ Premium overlay skipped: ${err.message}`);
|
|
692
705
|
}
|
|
693
706
|
}
|
|
694
|
-
const
|
|
707
|
+
const FLISK_GENERATED_MARKER = "SYSTEM-GENERATED BY Flisk CLI";
|
|
695
708
|
export function verifyMasterConfigs(projectRoot, options) {
|
|
696
709
|
const errors = [];
|
|
697
710
|
const warnings = [];
|
|
@@ -709,11 +722,11 @@ export function verifyMasterConfigs(projectRoot, options) {
|
|
|
709
722
|
const projectConfig = readProjectConfig(projectRoot);
|
|
710
723
|
const engine = new TemplateEngine();
|
|
711
724
|
const expectedFiles = engine.generateAll(projectConfig);
|
|
712
|
-
const outputDir = path.join(projectRoot, ".
|
|
725
|
+
const outputDir = path.join(projectRoot, ".flisk", ".flisk-out");
|
|
713
726
|
for (const filename of ALL_GENERATED_FILES) {
|
|
714
727
|
const expectedContent = expectedFiles[filename];
|
|
715
728
|
const filePath = path.join(outputDir, filename);
|
|
716
|
-
addDrift(`.
|
|
729
|
+
addDrift(`.flisk/.flisk-out/${filename}`, fs.existsSync(filePath) ? fs.readFileSync(filePath, "utf-8") : undefined, expectedContent);
|
|
717
730
|
}
|
|
718
731
|
// `flisk project` never overwrites a root .tiltignore the repo already has, so one
|
|
719
732
|
// without Flisk's header belongs to the team: it is not drift.
|
|
@@ -721,7 +734,7 @@ export function verifyMasterConfigs(projectRoot, options) {
|
|
|
721
734
|
const rootTiltIgnoreText = fs.existsSync(rootTiltIgnore)
|
|
722
735
|
? fs.readFileSync(rootTiltIgnore, "utf-8")
|
|
723
736
|
: undefined;
|
|
724
|
-
if (rootTiltIgnoreText !== undefined && !rootTiltIgnoreText.includes(
|
|
737
|
+
if (rootTiltIgnoreText !== undefined && !rootTiltIgnoreText.includes(FLISK_GENERATED_MARKER)) {
|
|
725
738
|
warnings.push(".tiltignore: not generated by Flisk, left as is");
|
|
726
739
|
}
|
|
727
740
|
else {
|
|
@@ -763,7 +776,7 @@ function verifyGeneratedResourceFiles(projectRoot, serviceJsonPath) {
|
|
|
763
776
|
const generatedFiles = [];
|
|
764
777
|
const collect = (directory, relativeDir = "") => {
|
|
765
778
|
for (const entry of fs.readdirSync(directory, { withFileTypes: true })) {
|
|
766
|
-
if (relativeDir === "" && entry.name === ".
|
|
779
|
+
if (relativeDir === "" && entry.name === ".flisk-contract")
|
|
767
780
|
continue;
|
|
768
781
|
const relativeFile = path.join(relativeDir, entry.name);
|
|
769
782
|
const fullPath = path.join(directory, entry.name);
|
|
@@ -776,7 +789,7 @@ function verifyGeneratedResourceFiles(projectRoot, serviceJsonPath) {
|
|
|
776
789
|
collect(generatedDir);
|
|
777
790
|
if (generatedFiles.length === 0)
|
|
778
791
|
return { errors: [], handEdited: [] };
|
|
779
|
-
const contractDir = path.join(generatedDir, ".
|
|
792
|
+
const contractDir = path.join(generatedDir, ".flisk-contract");
|
|
780
793
|
const sourceSnapshot = path.join(contractDir, "service.json.source");
|
|
781
794
|
const errors = [];
|
|
782
795
|
const handEdited = [];
|
package/cli/dist/mcp/tools.js
CHANGED
|
@@ -19,7 +19,7 @@ export function cliInvocation(execPath = process.execPath, script = process.argv
|
|
|
19
19
|
return [execPath, script];
|
|
20
20
|
}
|
|
21
21
|
/** Runs this same CLI (`flisk <args>`) so every tool behaves exactly like its command. */
|
|
22
|
-
export const
|
|
22
|
+
export const runFliskCli = (args, options = {}) => new Promise((resolve, reject) => {
|
|
23
23
|
const [command, ...prefix] = cliInvocation();
|
|
24
24
|
const child = spawn(command, [...prefix, ...args], {
|
|
25
25
|
cwd: options.cwd,
|
|
@@ -219,7 +219,7 @@ function projectPath(value) {
|
|
|
219
219
|
}
|
|
220
220
|
return value;
|
|
221
221
|
}
|
|
222
|
-
export function
|
|
222
|
+
export function createFliskTools(run = runFliskCli, up = defaultUpDeps) {
|
|
223
223
|
const viaCli = (build) => async (args) => toToolResult(await run(build(args), { cwd: projectPath(args.projectPath) }));
|
|
224
224
|
return [
|
|
225
225
|
{
|
|
@@ -25,7 +25,7 @@ export function detectHost(inputs = defaultInputs()) {
|
|
|
25
25
|
}
|
|
26
26
|
// Mirrors nativeWindowsUpRefusal in commands/up.ts: native Windows is inspect-only unless explicitly overridden.
|
|
27
27
|
if (platform === "win32") {
|
|
28
|
-
return { kind: "native-windows", canUp: env.
|
|
28
|
+
return { kind: "native-windows", canUp: env.FLISK_ALLOW_NATIVE_WINDOWS === "1" };
|
|
29
29
|
}
|
|
30
30
|
if (platform === "linux" && env.WSL_DISTRO_NAME)
|
|
31
31
|
return { kind: "wsl2", canUp: true };
|
|
@@ -87,7 +87,7 @@ export function readyNextStep(env = process.env, cwd = process.cwd()) {
|
|
|
87
87
|
}
|
|
88
88
|
const workspace = suggestedWorkspace(env);
|
|
89
89
|
return (`Next: mkdir -p ${workspace} && cd ${workspace} && ${CLI_COMMAND} project --yes\n` +
|
|
90
|
-
`(${CLI_COMMAND} project writes .
|
|
90
|
+
`(${CLI_COMMAND} project writes .flisk/ and the master configs into the current folder, ` +
|
|
91
91
|
`so it starts clean in a folder of its own. Or clone a starter: ${CLI_COMMAND} project example)`);
|
|
92
92
|
}
|
|
93
93
|
/**
|
|
@@ -155,7 +155,7 @@ export async function runColdPreflight(opts = {}) {
|
|
|
155
155
|
id: "ports",
|
|
156
156
|
ok: false,
|
|
157
157
|
message: error instanceof Error ? error.message : String(error),
|
|
158
|
-
fix: "Set
|
|
158
|
+
fix: "Set FLISK_HTTP_PORT, FLISK_HTTPS_PORT, or FLISK_POSTGRES_PORT to available host ports.",
|
|
159
159
|
});
|
|
160
160
|
}
|
|
161
161
|
// Project wiring (NATS, Prisma database) describes a running stack, so it is
|
|
@@ -167,7 +167,7 @@ export async function runColdPreflight(opts = {}) {
|
|
|
167
167
|
if (usesPrisma(projectRoot)) {
|
|
168
168
|
let dbUp = false;
|
|
169
169
|
try {
|
|
170
|
-
const config = JSON.parse(readFileSync(join(projectRoot, ".
|
|
170
|
+
const config = JSON.parse(readFileSync(join(projectRoot, ".flisk", PROJECT_JSON), "utf-8"));
|
|
171
171
|
const projectName = String(config?.project?.name ?? "").replace(/-/g, "_");
|
|
172
172
|
if (projectName) {
|
|
173
173
|
const running = execFileSync(findOnPath("docker") ?? "docker", [
|
|
@@ -24,7 +24,7 @@ export const AUTOGENERATED_DIR = ".autogenerated";
|
|
|
24
24
|
export const TECH_STACK_FILE = "TILT_TECH_STACK.star";
|
|
25
25
|
export const RESOURCE_DEFAULTS_FILE = "TILT_RESOURCE_DEFAULTS.star";
|
|
26
26
|
// Flisk project manifest file name. The canonical project config lives at
|
|
27
|
-
// `<project-root>/.
|
|
27
|
+
// `<project-root>/.flisk/project.json` — discovery, doctor, generator, config
|
|
28
28
|
// edits, and stack-features all read/write it. Referenced by value across
|
|
29
29
|
// these modules, so a typo in one copy would compile and silently stop
|
|
30
30
|
// matching (or worse, read a different file). Keep the literal here and
|
|
@@ -90,11 +90,11 @@ export const STANDARD_PORTS = {
|
|
|
90
90
|
traefik: 8080,
|
|
91
91
|
};
|
|
92
92
|
export const QUICKSTART_DOCS_URL = "https://flisk.sh/docs/quickstart/";
|
|
93
|
-
export const BASE_DOMAIN_DEFAULT = "
|
|
93
|
+
export const BASE_DOMAIN_DEFAULT = "flisk-project.localhost";
|
|
94
94
|
export const APP_SUBDOMAIN_PREFIX = "app";
|
|
95
95
|
export const API_SUBDOMAIN_PREFIX = "api";
|
|
96
96
|
export function getBaseDomain() {
|
|
97
|
-
const override = process.env.
|
|
97
|
+
const override = process.env.FLISK_SERVICE_BASE_URL ?? process.env.FLISK_PUBLIC_HOST;
|
|
98
98
|
if (override) {
|
|
99
99
|
try {
|
|
100
100
|
const u = new URL(override.includes("://") ? override : `http://${override}`);
|
|
@@ -47,9 +47,9 @@ function globMatchesDir(patternSegments, dirSegments) {
|
|
|
47
47
|
return (patternSegments.length === dirSegments.length &&
|
|
48
48
|
patternSegments.every((segment, index) => segmentMatches(segment, dirSegments[index])));
|
|
49
49
|
}
|
|
50
|
-
/** `discovery.paths` from .
|
|
50
|
+
/** `discovery.paths` from .flisk/project.json, or the generic default when unset/unreadable. */
|
|
51
51
|
export function readDiscoveryPaths(projectRoot) {
|
|
52
|
-
const configPath = join(projectRoot, ".
|
|
52
|
+
const configPath = join(projectRoot, ".flisk", PROJECT_JSON);
|
|
53
53
|
if (!existsSync(configPath))
|
|
54
54
|
return DEFAULT_DISCOVERY_PATHS;
|
|
55
55
|
try {
|
|
@@ -7,13 +7,13 @@ import { join } from "node:path";
|
|
|
7
7
|
import { promisify } from "node:util";
|
|
8
8
|
import { checkColima, nativeLimaPath, planColimaRepair } from "./colima.js";
|
|
9
9
|
import { DISK_WARN_GIB } from "./doctor-host.js";
|
|
10
|
-
import { findProjectTiltUpPids,
|
|
10
|
+
import { findProjectTiltUpPids, fliskNetworkOwner, fliskNetworkPrefixes, projectNetworkNames, } from "./down-cleanup.js";
|
|
11
11
|
import { tiltGetUiResources } from "./up-readiness.js";
|
|
12
12
|
import { findAllOnPath } from "./which.js";
|
|
13
13
|
const execFilePromise = promisify(execFile);
|
|
14
14
|
const DOCKER_TIMEOUT_MS = 15_000;
|
|
15
15
|
/** The networks `flisk doctor` creates to test capacity; an interrupted run leaves one behind. */
|
|
16
|
-
const PROBE_NETWORK = /^
|
|
16
|
+
const PROBE_NETWORK = /^flisk_doctor_probe_(\d+)$/;
|
|
17
17
|
const runDocker = async (args) => {
|
|
18
18
|
const { stdout } = await execFilePromise("docker", args, {
|
|
19
19
|
encoding: "utf-8",
|
|
@@ -305,7 +305,7 @@ export async function planDoctorFixes(projectName, deps = dockerFixDeps, context
|
|
|
305
305
|
}
|
|
306
306
|
}
|
|
307
307
|
const own = new Set(projectName ? projectNetworkNames(projectName) : []);
|
|
308
|
-
const prefixes =
|
|
308
|
+
const prefixes = fliskNetworkPrefixes(networks.map((network) => network.name));
|
|
309
309
|
for (const network of networks) {
|
|
310
310
|
const probe = PROBE_NETWORK.exec(network.name);
|
|
311
311
|
let scope;
|
|
@@ -319,10 +319,10 @@ export async function planDoctorFixes(projectName, deps = dockerFixDeps, context
|
|
|
319
319
|
scope = "project";
|
|
320
320
|
check = "Docker networks";
|
|
321
321
|
}
|
|
322
|
-
else if (context.machine &&
|
|
322
|
+
else if (context.machine && fliskNetworkOwner(network.name, prefixes)) {
|
|
323
323
|
scope = "machine";
|
|
324
324
|
check = "Docker networks";
|
|
325
|
-
reason = `unused network of project "${
|
|
325
|
+
reason = `unused network of project "${fliskNetworkOwner(network.name, prefixes)}"`;
|
|
326
326
|
}
|
|
327
327
|
else {
|
|
328
328
|
continue;
|
|
@@ -424,7 +424,7 @@ export async function applyDoctorFixes(actions, options, deps = dockerFixDeps) {
|
|
|
424
424
|
export function hasFailedActions(actions) {
|
|
425
425
|
return actions.some((action) => action.status === "failed");
|
|
426
426
|
}
|
|
427
|
-
async function
|
|
427
|
+
async function readFliskVersion(path) {
|
|
428
428
|
try {
|
|
429
429
|
const { stdout } = await execFilePromise(path, ["--version"], {
|
|
430
430
|
encoding: "utf-8",
|
|
@@ -438,7 +438,7 @@ async function readTdkVersion(path) {
|
|
|
438
438
|
}
|
|
439
439
|
}
|
|
440
440
|
/** Every distinct `flisk` on PATH (symlinks to one binary count once), in PATH order. */
|
|
441
|
-
export async function
|
|
441
|
+
export async function findFliskInstalls(paths = findAllOnPath("flisk"), readVersion = readFliskVersion) {
|
|
442
442
|
const seen = new Set();
|
|
443
443
|
const installs = [];
|
|
444
444
|
for (const path of paths) {
|
|
@@ -457,8 +457,8 @@ export async function findTdkInstalls(paths = findAllOnPath("flisk"), readVersio
|
|
|
457
457
|
return installs;
|
|
458
458
|
}
|
|
459
459
|
/** Two `flisk` binaries can disagree (a dashboard or MCP client may launch the older one), so say which is which. */
|
|
460
|
-
export async function
|
|
461
|
-
const found = installs ?? (await
|
|
460
|
+
export async function checkDuplicateFliskInstalls(installs) {
|
|
461
|
+
const found = installs ?? (await findFliskInstalls());
|
|
462
462
|
if (found.length <= 1) {
|
|
463
463
|
return { name: "Flisk installs", didPass: true, message: "One flisk install on PATH" };
|
|
464
464
|
}
|
|
@@ -486,7 +486,7 @@ export function projectTiltPids(projectRoot, find = findProjectTiltUpPids) {
|
|
|
486
486
|
}
|
|
487
487
|
const pids = new Set();
|
|
488
488
|
for (const root of roots) {
|
|
489
|
-
for (const pid of find(join(root, ".
|
|
489
|
+
for (const pid of find(join(root, ".flisk", ".flisk-out", "Tiltfile")))
|
|
490
490
|
pids.add(pid);
|
|
491
491
|
}
|
|
492
492
|
return [...pids];
|
|
@@ -50,19 +50,19 @@ export function createDoctorReport(checks, inProject, errors = [], portPlan, hos
|
|
|
50
50
|
http: {
|
|
51
51
|
requested: portPlan?.requested.ingressHttp ?? 80,
|
|
52
52
|
chosen: portPlan?.ingressHttp ?? null,
|
|
53
|
-
explicit: portPlan?.explicit.ingressHttp ?? Boolean(process.env.
|
|
53
|
+
explicit: portPlan?.explicit.ingressHttp ?? Boolean(process.env.FLISK_HTTP_PORT),
|
|
54
54
|
reason: portPlan?.reason.ingressHttp ?? "port planning failed",
|
|
55
55
|
},
|
|
56
56
|
https: {
|
|
57
57
|
requested: portPlan?.requested.ingressHttps ?? 443,
|
|
58
58
|
chosen: portPlan?.ingressHttps ?? null,
|
|
59
|
-
explicit: portPlan?.explicit.ingressHttps ?? Boolean(process.env.
|
|
59
|
+
explicit: portPlan?.explicit.ingressHttps ?? Boolean(process.env.FLISK_HTTPS_PORT),
|
|
60
60
|
reason: portPlan?.reason.ingressHttps ?? "port planning failed",
|
|
61
61
|
},
|
|
62
62
|
postgres: {
|
|
63
63
|
requested: portPlan?.requested.postgres ?? 5432,
|
|
64
64
|
chosen: portPlan?.postgres ?? null,
|
|
65
|
-
explicit: portPlan?.explicit.postgres ?? Boolean(process.env.
|
|
65
|
+
explicit: portPlan?.explicit.postgres ?? Boolean(process.env.FLISK_POSTGRES_PORT),
|
|
66
66
|
reason: portPlan?.reason.postgres ?? "port planning failed",
|
|
67
67
|
},
|
|
68
68
|
},
|
|
@@ -27,7 +27,8 @@ export function shellQuote(value) {
|
|
|
27
27
|
return `'${value.replace(/'/g, `'\\''`)}'`;
|
|
28
28
|
}
|
|
29
29
|
function runHostCommand(exec, command, args, shellCommand, options) {
|
|
30
|
-
|
|
30
|
+
// A supplied custom executor wins on every platform, including Windows.
|
|
31
|
+
if (process.platform === "win32" && exec === execSync) {
|
|
31
32
|
return execFileSync(findOnPath(command) ?? command, args, {
|
|
32
33
|
...options,
|
|
33
34
|
windowsHide: true,
|
|
@@ -74,7 +75,7 @@ export function parsePublishedPortHolders(dockerPsOutput, ports) {
|
|
|
74
75
|
export function isOwnIngressContainer(containerName, projectPrefix) {
|
|
75
76
|
const name = containerName.toLowerCase();
|
|
76
77
|
const prefix = projectPrefix.toLowerCase();
|
|
77
|
-
//
|
|
78
|
+
// flisk_project_traefik, flisk_project-traefik-1, etc.
|
|
78
79
|
return name === `${prefix}_traefik` || name.startsWith(`${prefix}_traefik`);
|
|
79
80
|
}
|
|
80
81
|
export function findForeignIngressHolders(holders, projectPrefix) {
|
|
@@ -205,7 +206,7 @@ export function isRegistryRelatedBuildError(error) {
|
|
|
205
206
|
return /ConnectionRefused downloading package manifest|Verdaccio|private registry|dependency install failed during ImageBuild|install-deps\.sh|bun install/i.test(error);
|
|
206
207
|
}
|
|
207
208
|
export function projectConfigEnablesVerdaccio(projectRoot = findProjectRoot() ?? process.cwd()) {
|
|
208
|
-
const projectJsonPath = join(projectRoot, ".
|
|
209
|
+
const projectJsonPath = join(projectRoot, ".flisk", PROJECT_JSON);
|
|
209
210
|
if (!existsSync(projectJsonPath))
|
|
210
211
|
return false;
|
|
211
212
|
try {
|
|
@@ -22,8 +22,8 @@ export function findPrivateStarlarkLoadExports(content) {
|
|
|
22
22
|
return Array.from(privateExports).sort();
|
|
23
23
|
}
|
|
24
24
|
export function resolveStarlarkLoadTarget(file, modulePath, projectRoot) {
|
|
25
|
-
if (modulePath === "ext://
|
|
26
|
-
return join(projectRoot, ".
|
|
25
|
+
if (modulePath === "ext://flisk-cli") {
|
|
26
|
+
return join(projectRoot, ".flisk", ".flisk-out", "flisk-cli-ext", "Tiltfile");
|
|
27
27
|
}
|
|
28
28
|
if (modulePath.startsWith(".") || (!modulePath.includes("://") && !modulePath.startsWith("@"))) {
|
|
29
29
|
return normalize(join(dirname(file), modulePath));
|
|
@@ -86,7 +86,7 @@ export function collectReachableStarlarkFiles(entryFile, projectRoot) {
|
|
|
86
86
|
}
|
|
87
87
|
export function checkStarlarkLoadExports() {
|
|
88
88
|
const projectRoot = findProjectRoot() ?? process.cwd();
|
|
89
|
-
const entryFile = join(projectRoot, ".
|
|
89
|
+
const entryFile = join(projectRoot, ".flisk", ".flisk-out", "Tiltfile");
|
|
90
90
|
if (!existsSync(entryFile)) {
|
|
91
91
|
return {
|
|
92
92
|
name: "Starlark Load Exports",
|
|
@@ -24,7 +24,7 @@ const PRISMA_MAJOR = 7;
|
|
|
24
24
|
const SKIPPED_DIRS = new Set(["node_modules", AUTOGENERATED_DIR, "dist", "tests", "__tests__"]);
|
|
25
25
|
function projectName(projectRoot) {
|
|
26
26
|
try {
|
|
27
|
-
const parsed = JSON.parse(readFileSync(join(projectRoot, ".
|
|
27
|
+
const parsed = JSON.parse(readFileSync(join(projectRoot, ".flisk", PROJECT_JSON), "utf-8"));
|
|
28
28
|
return typeof parsed?.project?.name === "string" ? parsed.project.name : undefined;
|
|
29
29
|
}
|
|
30
30
|
catch {
|
|
@@ -619,7 +619,7 @@ export function parseTiltProcesses(psOutput) {
|
|
|
619
619
|
const match = line.match(/^\s*(\d+)\s+.*\btilt up\b.*?\s-f\s+(\S+)/i);
|
|
620
620
|
if (!match)
|
|
621
621
|
continue;
|
|
622
|
-
processes.push({ pid: Number(match[1]), root: match[2].split(/[\\/]\.
|
|
622
|
+
processes.push({ pid: Number(match[1]), root: match[2].split(/[\\/]\.flisk[\\/]/i)[0] });
|
|
623
623
|
}
|
|
624
624
|
return processes;
|
|
625
625
|
}
|
|
@@ -667,7 +667,7 @@ export function checkTiltInstances(projectRoot = findProjectRoot() ?? process.cw
|
|
|
667
667
|
return { name: "Tilt processes", didPass: true, message: "No stray Tilt processes" };
|
|
668
668
|
}
|
|
669
669
|
export async function checkDockerNetworkCapacity(exec = execAsync) {
|
|
670
|
-
const probe = `
|
|
670
|
+
const probe = `flisk_doctor_probe_${process.pid}`;
|
|
671
671
|
try {
|
|
672
672
|
await exec(`docker network create ${probe}`, EXEC_TIMEOUT_MS);
|
|
673
673
|
}
|
|
@@ -692,7 +692,7 @@ export async function checkDockerNetworkCapacity(exec = execAsync) {
|
|
|
692
692
|
await exec(`docker network rm ${probe}`, EXEC_TIMEOUT_MS);
|
|
693
693
|
}
|
|
694
694
|
catch {
|
|
695
|
-
// A leftover probe network is harmless and
|
|
695
|
+
// A leftover probe network is harmless and flisk_doctor_probe_* is easy to prune.
|
|
696
696
|
}
|
|
697
697
|
return { name: "Docker networks", didPass: true, message: "Docker can create networks" };
|
|
698
698
|
}
|