@tdk-landscape/tdk-cli-core 1.3.50 → 1.3.52
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/.github/workflows/ci.yml +13 -0
- package/.github/workflows/release-binaries.yml +76 -1
- package/CHANGELOG.md +50 -0
- package/README.md +54 -17
- package/cli/README.md +16 -43
- package/cli/biome.json +0 -4
- package/cli/dist/commands/help.d.ts.map +1 -1
- package/cli/dist/commands/help.js +22 -39
- package/cli/dist/commands/help.js.map +1 -1
- package/cli/dist/commands/project.d.ts +6 -0
- package/cli/dist/commands/project.d.ts.map +1 -1
- package/cli/dist/commands/project.js +16 -0
- package/cli/dist/commands/project.js.map +1 -1
- package/cli/dist/commands/up.d.ts.map +1 -1
- package/cli/dist/commands/up.js +5 -0
- package/cli/dist/commands/up.js.map +1 -1
- package/cli/dist/commands/upgrade.d.ts +3 -0
- package/cli/dist/commands/upgrade.d.ts.map +1 -1
- package/cli/dist/commands/upgrade.js +43 -1
- package/cli/dist/commands/upgrade.js.map +1 -1
- package/cli/dist/utils/constants.d.ts +1 -1
- package/cli/dist/utils/constants.d.ts.map +1 -1
- package/cli/dist/utils/constants.js +1 -1
- package/cli/dist/utils/constants.js.map +1 -1
- package/cli/dist/utils/doctor-runtime.js +5 -5
- package/cli/dist/utils/doctor-runtime.js.map +1 -1
- package/cli/dist/utils/prompt.d.ts.map +1 -1
- package/cli/dist/utils/prompt.js +6 -1
- package/cli/dist/utils/prompt.js.map +1 -1
- package/cli/dist/utils/service-urls.js +1 -1
- package/cli/dist/utils/service-urls.js.map +1 -1
- package/cli/package.json +2 -1
- package/cli/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -2
- package/cli/src/commands/__tests__/doctor.test.ts +8 -8
- package/cli/src/commands/__tests__/upgrade.test.ts +90 -3
- package/cli/src/commands/help.ts +22 -39
- package/cli/src/commands/project.ts +20 -0
- package/cli/src/commands/up.ts +10 -0
- package/cli/src/commands/upgrade.ts +52 -1
- package/cli/src/utils/constants.ts +1 -1
- package/cli/src/utils/doctor-runtime.ts +5 -5
- package/cli/src/utils/prompt.ts +8 -1
- package/cli/src/utils/service-urls.ts +1 -1
- package/discovery/identity-management-backend/service.yaml +2 -2
- package/discovery/identity-management-frontend/service.yaml +1 -1
- package/discovery/registry.star +3 -1
- package/discovery/services/platform/orchestrator/orchestrator-glue-backend/service.yaml +2 -2
- package/docs/demo.svg +217 -0
- package/engine/assets/docker/golden-layers.Dockerfile +18 -18
- package/engine/assets/docker/wake-gateway/Dockerfile +4 -3
- package/engine/assets/docker/wake-gateway/decide.test.ts +72 -1
- package/engine/assets/docker/wake-gateway/decide.ts +51 -2
- package/engine/assets/docker/wake-gateway/server.ts +165 -28
- package/engine/assets/scripts/mac-m1-resource-monitor.sh +1 -1
- package/engine/scripts/debug-container.sh +8 -3
- package/engine/spec.master +2 -2
- package/engine/topologies/platform/docker/compose/traefik_standalone.star +23 -1
- package/engine/topologies/platform/docker/layers/prisma/prisma_build.star +1 -1
- package/engine/topologies/platform/docker/networking/traefik_static_routes.star +62 -8
- package/engine/topologies/tilt/common/utils.star +1 -1
- package/engine/topologies/tilt/resources/orchestrator/apply_compose_resource_registration.star +89 -12
- package/engine/topologies/tilt/resources/orchestrator/builders/typescript.star +20 -0
- package/install.sh +19 -242
- package/openspec/changes/prioritized-cold-start/design.md +27 -3
- package/openspec/changes/prioritized-cold-start/proposal.md +1 -0
- package/openspec/changes/prioritized-cold-start/specs/on-demand-resource-startup/spec.md +9 -3
- package/openspec/changes/prioritized-cold-start/tasks.md +24 -1
- package/package.json +1 -1
- package/platform/services/platform/proxy/service.yaml +1 -1
- package/scripts/record-demo.sh +43 -0
- package/scripts/release-binaries.sh +8 -5
- package/shared-platform-engineering/docker-templates/infisical-entrypoint.sh +2 -2
- package/tests/tilt-engine/test_sablier_defer_start.py +41 -0
- package/tests/tilt-engine/test_standalone_traefik.py +14 -0
- package/tests/tilt-engine/test_traefik_static_wake_route.py +68 -0
- package/openspec/changes/archive/2026-04-29-scan-repo-gaps-fix/codebase-audit-report.md +0 -62
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/.openspec.yaml +0 -5
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/design.md +0 -94
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/proposal.md +0 -46
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CLEANUP_REPORT_8.md +0 -174
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/ai-slop-cleanup/CRITICAL_ASSESSMENT_8.md +0 -160
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/circular-deps/CRITICAL_ASSESSMENT_4.md +0 -381
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/dead-code/CRITICAL_ASSESSMENT_3.md +0 -316
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/CRITICAL_ASSESSMENT_1.md +0 -290
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/deduplication/IMPLEMENTATION_SUMMARY_1.md +0 -233
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/defensive-cleanup/CRITICAL_ASSESSMENT_6.md +0 -835
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/CRITICAL_ASSESSMENT_7.md +0 -254
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/legacy-cleanup/IMPLEMENTATION_SUMMARY_7.md +0 -187
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/strong-typing/CRITICAL_ASSESSMENT_5.md +0 -269
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/CRITICAL_ASSESSMENT_2.md +0 -312
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/specs/type-consolidation/IMPLEMENTATION_SUMMARY.md +0 -170
- package/openspec/changes/archive/2026-05-04-comprehensive-cleanup-final/tasks.md +0 -137
package/.github/workflows/ci.yml
CHANGED
|
@@ -101,6 +101,19 @@ jobs:
|
|
|
101
101
|
bun install --frozen-lockfile
|
|
102
102
|
npm run build
|
|
103
103
|
|
|
104
|
+
# cli/dist is committed so `npm install -g github:tdk-landscape/tdk-cli-core`
|
|
105
|
+
# works without a build step. Fail if a source change was committed
|
|
106
|
+
# without rebuilding it.
|
|
107
|
+
- name: Check committed cli/dist is up to date
|
|
108
|
+
run: |
|
|
109
|
+
# --ignored: cli/dist/ is gitignored, so a newly compiled file only
|
|
110
|
+
# shows up with it.
|
|
111
|
+
if [ -n "$(git status --porcelain --ignored -- cli/dist)" ]; then
|
|
112
|
+
git status --short --ignored -- cli/dist
|
|
113
|
+
echo "::error::cli/dist is stale. Run 'npm run build' and commit cli/dist (new files need 'git add -f')."
|
|
114
|
+
exit 1
|
|
115
|
+
fi
|
|
116
|
+
|
|
104
117
|
- name: Pack and install globally
|
|
105
118
|
run: | # zizmor: ignore[adhoc-packages] installs our own freshly packed tarball
|
|
106
119
|
npm pack --pack-destination "$RUNNER_TEMP"
|
|
@@ -9,7 +9,7 @@ on:
|
|
|
9
9
|
- "cli/package.json"
|
|
10
10
|
|
|
11
11
|
permissions:
|
|
12
|
-
contents:
|
|
12
|
+
contents: write # push the automatic version bump back to main
|
|
13
13
|
id-token: write
|
|
14
14
|
|
|
15
15
|
# Queue releases instead of running them side by side: two runs for the same
|
|
@@ -42,6 +42,44 @@ jobs:
|
|
|
42
42
|
- run: bun install --frozen-lockfile
|
|
43
43
|
working-directory: cli
|
|
44
44
|
|
|
45
|
+
# This workflow runs on every package.json change, not only version
|
|
46
|
+
# bumps. A dependency update or other package.json edit used to rebuild
|
|
47
|
+
# the binaries from new code and re-upload them over the release that
|
|
48
|
+
# already had this version, while npm skipped it as "already published":
|
|
49
|
+
# new code under an old version number. Instead, move to the next patch
|
|
50
|
+
# version that is neither on npm nor a tdk-cli-releases tag. Must run
|
|
51
|
+
# before the build: the CLI reads its version from cli/package.json.
|
|
52
|
+
- name: Pick an unreleased version
|
|
53
|
+
id: version
|
|
54
|
+
env:
|
|
55
|
+
GH_TOKEN: ${{ github.token }}
|
|
56
|
+
run: |
|
|
57
|
+
current=$(node -p "require('./package.json').version")
|
|
58
|
+
version="$current"
|
|
59
|
+
while npm view "@tdk-landscape/tdk-cli-core@${version}" version >/dev/null 2>&1 \
|
|
60
|
+
|| gh release view "v${version}" --repo tdk-landscape/tdk-cli-releases >/dev/null 2>&1; do
|
|
61
|
+
version=$(node -p 'const [a, b, c] = process.argv[1].split(".").map(Number); [a, b, c + 1].join(".")' "$version")
|
|
62
|
+
done
|
|
63
|
+
if [ "$version" = "$current" ]; then
|
|
64
|
+
echo "Releasing ${version}."
|
|
65
|
+
echo "bumped=false" >> "$GITHUB_OUTPUT"
|
|
66
|
+
else
|
|
67
|
+
echo "::notice::${current} is already released; releasing this commit as ${version}."
|
|
68
|
+
# Edit only the version line: `npm version` would reinstall the
|
|
69
|
+
# workspaces and touch the bun-installed node_modules.
|
|
70
|
+
node -e '
|
|
71
|
+
const fs = require("fs");
|
|
72
|
+
for (const file of ["package.json", "cli/package.json"]) {
|
|
73
|
+
const before = fs.readFileSync(file, "utf8");
|
|
74
|
+
const after = before.replace(/("version":\s*")[^"]+"/, (_, key) => key + process.argv[1] + "\"");
|
|
75
|
+
if (after === before) throw new Error("no version field in " + file);
|
|
76
|
+
fs.writeFileSync(file, after);
|
|
77
|
+
}
|
|
78
|
+
' "$version"
|
|
79
|
+
echo "bumped=true" >> "$GITHUB_OUTPUT"
|
|
80
|
+
fi
|
|
81
|
+
echo "version=${version}" >> "$GITHUB_OUTPUT"
|
|
82
|
+
|
|
45
83
|
# cli/bin/tdk.js loads cli/dist/cli.js, so the npm package is broken
|
|
46
84
|
# unless the CLI is compiled before `npm publish`.
|
|
47
85
|
- run: npm run build
|
|
@@ -62,3 +100,40 @@ jobs:
|
|
|
62
100
|
else
|
|
63
101
|
npm publish --access public --provenance
|
|
64
102
|
fi
|
|
103
|
+
|
|
104
|
+
# Keep main in step with what was published. A push made with
|
|
105
|
+
# github.token doesn't trigger workflows, so this can't loop. If it
|
|
106
|
+
# fails, the release is still out; the next run bumps past it anyway.
|
|
107
|
+
- name: Commit the version bump
|
|
108
|
+
if: steps.version.outputs.bumped == 'true'
|
|
109
|
+
env:
|
|
110
|
+
GH_TOKEN: ${{ github.token }}
|
|
111
|
+
VERSION: ${{ steps.version.outputs.version }}
|
|
112
|
+
run: |
|
|
113
|
+
git config user.name "github-actions[bot]"
|
|
114
|
+
git config user.email "41898283+github-actions[bot]@users.noreply.github.com"
|
|
115
|
+
# CHANGELOG versions match npm: file the "Unreleased" entries under
|
|
116
|
+
# this version, leaving an empty "Unreleased" section above it.
|
|
117
|
+
node -e '
|
|
118
|
+
const fs = require("fs");
|
|
119
|
+
const [version, date] = process.argv.slice(1);
|
|
120
|
+
if (!fs.existsSync("CHANGELOG.md")) process.exit(0);
|
|
121
|
+
const lines = fs.readFileSync("CHANGELOG.md", "utf8").split("\n");
|
|
122
|
+
const start = lines.indexOf("## Unreleased");
|
|
123
|
+
if (start === -1) process.exit(0);
|
|
124
|
+
let end = lines.findIndex((l, i) => i > start && l.startsWith("## "));
|
|
125
|
+
if (end === -1) end = lines.length;
|
|
126
|
+
if (!lines.slice(start + 1, end).some((l) => l.trim())) process.exit(0);
|
|
127
|
+
lines.splice(start + 1, 0, "", "## " + version + " (" + date + ")");
|
|
128
|
+
fs.writeFileSync("CHANGELOG.md", lines.join("\n"));
|
|
129
|
+
' "$VERSION" "$(date -u +%F)"
|
|
130
|
+
git add package.json cli/package.json
|
|
131
|
+
if [ -f CHANGELOG.md ]; then git add CHANGELOG.md; fi
|
|
132
|
+
git commit -m "Release ${VERSION} (automatic version bump)"
|
|
133
|
+
remote="https://x-access-token:${GH_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
|
|
134
|
+
if ! git push "$remote" HEAD:main; then
|
|
135
|
+
git fetch --depth=50 "$remote" main
|
|
136
|
+
if ! { git rebase FETCH_HEAD && git push "$remote" HEAD:main; }; then
|
|
137
|
+
echo "::warning::Released ${VERSION}, but main changed and the version bump could not be pushed. Make sure package.json and cli/package.json on main are ${VERSION} or higher."
|
|
138
|
+
fi
|
|
139
|
+
fi
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Notable changes to the `tdk` CLI. Versions match [npm](https://www.npmjs.com/package/@tdk-landscape/tdk-cli-core?activeTab=versions) and the [binary releases](https://github.com/tdk-landscape/tdk-cli-releases/releases).
|
|
4
|
+
|
|
5
|
+
## Unreleased
|
|
6
|
+
|
|
7
|
+
- `tdk up` works in a fresh project. The Tiltfile no longer aborts when a stack listed in `project.json` has no directory yet, and stacks created after `tdk project` are added to the `pre_alpha` phase so they actually start.
|
|
8
|
+
- Prompts fail with an error and exit 1 when there's no input to read (CI, `< /dev/null`). Before, `tdk resource` printed its summary, exited 0 and created nothing.
|
|
9
|
+
- `tdk help`: one-line header with the version, instead of a misaligned ASCII box and doubled icons.
|
|
10
|
+
- One installer: `install.sh` in this repo hands off to `https://tdk-landscape.github.io/install.sh`, which verifies release checksums. `tdk upgrade` verifies checksums too.
|
|
11
|
+
|
|
12
|
+
## 1.3.51 (2026-09-27)
|
|
13
|
+
|
|
14
|
+
- Cold start on first request (`sablier.deferStart`, paid): an opted-in resource skips the normal bring-up and starts when it first gets a request, through a generated Traefik route and a wake gateway.
|
|
15
|
+
- The wake gateway starts already-built images with `docker compose up --no-build` instead of waiting in Tilt's build queue, which could time out with a 504 under load.
|
|
16
|
+
- The generated wake route strips the same API path prefix as the real route.
|
|
17
|
+
|
|
18
|
+
## 1.3.50 (2026-09-27)
|
|
19
|
+
|
|
20
|
+
- Fixed the npm package: 1.3.49 shipped without the compiled CLI and its runtime dependencies, so `tdk` failed to start after `npm install -g`.
|
|
21
|
+
- Requires Node.js 22.12+.
|
|
22
|
+
- `tdk up <stack>` starts only that stack instead of every stack.
|
|
23
|
+
|
|
24
|
+
## 1.3.39 (2026-09-23)
|
|
25
|
+
|
|
26
|
+
- `tdk doctor` and `tdk up` time out after 10 s when the Docker daemon is unresponsive, instead of hanging.
|
|
27
|
+
|
|
28
|
+
## 1.3.37 (2026-09-22)
|
|
29
|
+
|
|
30
|
+
- Fixed the Vite base path for frontends routed under a path prefix.
|
|
31
|
+
|
|
32
|
+
## 1.3.36 (2026-09-22)
|
|
33
|
+
|
|
34
|
+
- Service URL helpers, `BASEPATH` routing and health-check targets.
|
|
35
|
+
|
|
36
|
+
## 1.3.35 (2026-09-22)
|
|
37
|
+
|
|
38
|
+
- `tdk doctor` checks that each service's `package.json` has the scripts the generated containers run.
|
|
39
|
+
|
|
40
|
+
## 1.3.34 (2026-09-22)
|
|
41
|
+
|
|
42
|
+
- Fixed resource filtering in focus mode and the frontend Docker `tsconfig`.
|
|
43
|
+
|
|
44
|
+
## 1.3.33 (2026-09-22)
|
|
45
|
+
|
|
46
|
+
- Core infrastructure (Traefik, Postgres) is always on. Fixed `tdk upgrade` self-repair.
|
|
47
|
+
|
|
48
|
+
## Earlier
|
|
49
|
+
|
|
50
|
+
Releases before 1.3.33 are listed in the [git history](https://github.com/tdk-landscape/tdk-cli-core/commits/main).
|
package/README.md
CHANGED
|
@@ -7,10 +7,10 @@
|
|
|
7
7
|
One CLI that scaffolds your services and runs the whole landscape locally with hot reload, health checks, a proxy, and Postgres, all built on [Tilt](https://tilt.dev).
|
|
8
8
|
|
|
9
9
|
[](https://www.npmjs.com/package/@tdk-landscape/tdk-cli-core)
|
|
10
|
-
[](https://www.npmjs.com/package/@tdk-landscape/tdk-cli-core)
|
|
11
10
|
[](https://github.com/tdk-landscape/tdk-cli-core/actions/workflows/ci.yml)
|
|
11
|
+
[](https://snyk.io/test/github/tdk-landscape/tdk-cli-core)
|
|
12
|
+
[](https://socket.dev/npm/package/@tdk-landscape/tdk-cli-core/overview)
|
|
12
13
|
[](LICENSE)
|
|
13
|
-
[](https://github.com/tdk-landscape/tdk-cli-core/stargazers)
|
|
14
14
|
|
|
15
15
|
[Website](https://tdk-landscape.github.io/tdk-website) · [Quickstart](https://tdk-landscape.github.io/tdk-website/docs/quickstart/) · [Examples](https://tdk-landscape.github.io/tdk-website/docs/examples/) · [Demo](https://tdk-landscape.github.io/tdk-demo-animation/) · [Report a bug](https://github.com/tdk-landscape/tdk-cli-core/issues/new/choose)
|
|
16
16
|
|
|
@@ -18,12 +18,15 @@ One CLI that scaffolds your services and runs the whole landscape locally with h
|
|
|
18
18
|
|
|
19
19
|
```bash
|
|
20
20
|
npm install -g @tdk-landscape/tdk-cli-core
|
|
21
|
+
mkdir shop && cd shop # tdk writes files into the current directory
|
|
21
22
|
tdk project --yes # set up the project
|
|
22
23
|
tdk resource orders-api --type backend --stack shop # scaffold a service
|
|
23
24
|
tdk up shop # run it with hot reload
|
|
24
25
|
```
|
|
25
26
|
|
|
26
|
-
|
|
27
|
+

|
|
28
|
+
|
|
29
|
+
**Requirements:** Docker (Desktop, OrbStack or Colima; Engine 25+, Compose 2.20+), [Tilt](https://docs.tilt.dev/install.html), [Bun](https://bun.sh) for the generated services, and Node.js 22.12+ for the CLI. macOS and Linux are supported. Windows is untested (WSL2 may work). Run `tdk doctor` to check all of it.
|
|
27
30
|
|
|
28
31
|
This is the core monorepo for TDK: the `tdk` CLI, the Starlark-based Tilt orchestration engine that powers it, and the discovery system that turns a directory of services into a running local landscape.
|
|
29
32
|
|
|
@@ -33,11 +36,13 @@ This is the core monorepo for TDK: the `tdk` CLI, the Starlark-based Tilt orches
|
|
|
33
36
|
|---|---|---|---|---|
|
|
34
37
|
| Scaffold a new service in one command | ❌ | ❌ | ❌ | ✅ `tdk resource` |
|
|
35
38
|
| Hot reload on file change | ⚠️ `compose watch` config | ⚠️ extra tooling | ✅ | ✅ |
|
|
36
|
-
| Health-checked startup order |
|
|
39
|
+
| Health-checked startup order | ✅ `depends_on: condition: service_healthy` | ✅ | ⚠️ write it yourself | ✅ |
|
|
37
40
|
| Proxy, Postgres, monitoring included | ❌ | ❌ | ❌ | ✅ |
|
|
38
41
|
| Needs a cluster | No | Yes | Optional | **No** |
|
|
39
42
|
| Start only one stack of a large system | ⚠️ profiles | ⚠️ | ⚠️ | ✅ `tdk up <stack>` |
|
|
40
43
|
|
|
44
|
+
TDK is not a replacement for Tilt: it generates the Tiltfile, Dockerfiles and compose files and then runs Tilt. If you already have a hand-written Tiltfile or compose setup you're happy with, TDK mostly saves you the boilerplate for the next service.
|
|
45
|
+
|
|
41
46
|
## Benchmark: 100 services on one laptop
|
|
42
47
|
|
|
43
48
|
Measured with [`scripts/benchmark/container-scale.ts`](scripts/benchmark/README.md) against the 100-service [ERP example](https://github.com/tdk-landscape/tdk-erp-system) on a 16 GB machine (Docker VM: 7.75 GiB). Raw results are in [`benchmarks/results/`](benchmarks/results).
|
|
@@ -48,16 +53,23 @@ Measured with [`scripts/benchmark/container-scale.ts`](scripts/benchmark/README.
|
|
|
48
53
|
| 50 | 24 s | 829 MiB | 17 MiB | 0 / 0 |
|
|
49
54
|
| 100 | 112 s | 1.6 GiB | 17 MiB | 0 / 0 |
|
|
50
55
|
|
|
56
|
+
What this does and doesn't measure:
|
|
57
|
+
|
|
58
|
+
- The ERP services are small generated Bun HTTP services (about 20 lines each) answering `/health`. Real services with real dependencies use more memory; the point is that TDK's per-service overhead (runtime image, healthchecks, proxy routing) stays small.
|
|
59
|
+
- Images were already built. Build time isn't included, and a first `tdk up` of 100 services takes much longer.
|
|
60
|
+
- The script starts the service containers with the settings `tdk up` generates (512 MiB / 0.5 CPU limits, healthchecks), without Tilt running. The memory column counts only the service containers, not Postgres or Traefik.
|
|
61
|
+
- Numbers vary between runs (a later run reached 100 healthy in 74 s). Run it yourself with `bun scripts/benchmark/container-scale.ts`.
|
|
62
|
+
|
|
51
63
|
## What is TDK?
|
|
52
64
|
|
|
53
65
|
TDK organizes microservices using a **Project → Stack → Resource** hierarchy, then uses Tilt to build, run, and hot-reload them locally:
|
|
54
66
|
|
|
55
67
|
```
|
|
56
|
-
|
|
68
|
+
Project (1 per repo)
|
|
57
69
|
├── TILT_RESOURCE_DEFAULTS.star # Ports, health checks, memory
|
|
58
70
|
├── TILT_TECH_STACK.star # Bun, Vite, Prisma, NATS
|
|
59
71
|
│
|
|
60
|
-
└──
|
|
72
|
+
└── Stacks (deployment groups)
|
|
61
73
|
├── api-stack
|
|
62
74
|
│ ├── api-backend # Resource
|
|
63
75
|
│ └── web-frontend # Resource
|
|
@@ -67,6 +79,8 @@ TDK organizes microservices using a **Project → Stack → Resource** hierarchy
|
|
|
67
79
|
└── web-frontend
|
|
68
80
|
```
|
|
69
81
|
|
|
82
|
+
`.tdk/project.json` also groups stacks into phases (`pre_alpha`, `alpha`, `beta`, `out_of_scope`) so a large system can be brought up in stages. `tdk up` runs stacks from the first three and adds any new stack to `pre_alpha`.
|
|
83
|
+
|
|
70
84
|
Running `tdk resource` scaffolds a service (Dockerfile, TypeScript config, starter code, tests); `tdk up` hands the whole landscape to Tilt for orchestration, live-reload, and health checking — sized to fit dozens of services on a single laptop.
|
|
71
85
|
|
|
72
86
|
## Install
|
|
@@ -77,21 +91,24 @@ npm install -g @tdk-landscape/tdk-cli-core
|
|
|
77
91
|
bun install -g @tdk-landscape/tdk-cli-core
|
|
78
92
|
```
|
|
79
93
|
|
|
80
|
-
Or
|
|
94
|
+
Or install the prebuilt binary (no Node or Bun needed; verified against the release checksums):
|
|
81
95
|
|
|
82
96
|
```bash
|
|
83
|
-
curl -fsSL https://
|
|
97
|
+
curl -fsSL https://tdk-landscape.github.io/install.sh | sh
|
|
84
98
|
```
|
|
85
99
|
|
|
100
|
+
Premium features don't need a different install: set `TDK_LICENSE_KEY` and any of these installs unlocks them. See [docs/FEATURES.md](docs/FEATURES.md).
|
|
101
|
+
|
|
86
102
|
## Quick start
|
|
87
103
|
|
|
88
104
|
```bash
|
|
89
|
-
cd
|
|
90
|
-
tdk project
|
|
91
|
-
tdk resource
|
|
92
|
-
tdk resource
|
|
93
|
-
tdk up
|
|
94
|
-
tdk
|
|
105
|
+
mkdir shop && cd shop
|
|
106
|
+
tdk project --yes # writes .tdk/project.json and generated configs
|
|
107
|
+
tdk resource orders-api --type backend --stack shop # asks you to confirm, then scaffolds services/shop/orders-api
|
|
108
|
+
tdk resource storefront --type frontend --stack shop
|
|
109
|
+
tdk up shop # starts Tilt; UI at http://localhost:10350
|
|
110
|
+
tdk networks # lists the *.localhost URLs Traefik routes
|
|
111
|
+
tdk down # stops everything
|
|
95
112
|
```
|
|
96
113
|
|
|
97
114
|
See the [CLI reference](cli/README.md) for the full command set (`stack`, `resources`, `doctor`, `ui`, and more).
|
|
@@ -110,12 +127,34 @@ This is a monorepo — most day-to-day CLI work happens under `cli/`, while `eng
|
|
|
110
127
|
| [`benchmarks/`](benchmarks) | Container/landscape scale benchmarks. |
|
|
111
128
|
| [`docs/`](docs) | Reference docs, including [FEATURES.md](docs/FEATURES.md) for project- and resource-level feature flags. |
|
|
112
129
|
| [`Tiltfile`](Tiltfile) | Entry point that wires the engine into `tilt up`. |
|
|
113
|
-
| [`install.sh`](install.sh) |
|
|
130
|
+
| [`install.sh`](install.sh) | Legacy installer URL; hands off to the official installer at `tdk-landscape.github.io/install.sh`. |
|
|
114
131
|
|
|
115
132
|
## Features
|
|
116
133
|
|
|
117
134
|
TDK ships a set of always-on infrastructure services (Traefik proxy, PostgreSQL) plus opt-in features — monitoring, ELK, Debezium CDC, a local npm registry, and more. Enable/disable them per-project via `.tdk/project.json`, or per-resource via each service's `service.json`. Full reference: [docs/FEATURES.md](docs/FEATURES.md).
|
|
118
135
|
|
|
136
|
+
## Free and paid features
|
|
137
|
+
|
|
138
|
+
The CLI, engine and everything in this repository are MIT-licensed and work without an account or key. A few extras are paid and need a `TDK_LICENSE_KEY`: on-demand start/stop of idle services (Sablier), a local npm registry (Verdaccio), DDD scaffolding, Playwright config, C4 diagrams, synthetic monitoring, and a few generators (see `KNOWN_RESOURCES` in [extension-fetch.ts](cli/src/generator/extension-fetch.ts)). In this repo those are disabled stubs; with a key set, the CLI downloads the real implementations. [docs/FEATURES.md](docs/FEATURES.md) marks which features are which. To ask about a key, [open an issue](https://github.com/tdk-landscape/tdk-cli-core/issues/new/choose).
|
|
139
|
+
|
|
140
|
+
## Network access and telemetry
|
|
141
|
+
|
|
142
|
+
TDK has no telemetry or analytics. The CLI only goes online when you ask it to:
|
|
143
|
+
|
|
144
|
+
- `tdk upgrade` checks the latest release on GitHub.
|
|
145
|
+
- With `TDK_LICENSE_KEY` set, `tdk project` and `tdk up` download the paid bundle from `tdk-extension-dist.oranguman.workers.dev` and re-check the key every 12 hours. Without a key, nothing is sent.
|
|
146
|
+
- Docker and Tilt pull images and packages as they normally would.
|
|
147
|
+
|
|
148
|
+
## FAQ
|
|
149
|
+
|
|
150
|
+
**Why not just docker compose?** For a handful of services, compose is fine. TDK generates the compose files for you. It adds hot reload through Tilt, one-command scaffolding with matching Dockerfiles, and a stack-level `tdk up` for large systems where starting everything is too slow.
|
|
151
|
+
|
|
152
|
+
**How is this different from Skaffold, Garden, DevSpace or Tilt itself?** Skaffold, Garden and DevSpace are built around Kubernetes, and plain Tilt leaves the Tiltfile to you. TDK runs on plain Docker with no cluster, and generates both the services and the Tilt config from a `service.json` per service.
|
|
153
|
+
|
|
154
|
+
**Do I need 100 microservices?** No. Two services work the same way. The 100-service example is a stress test to show the overhead stays flat.
|
|
155
|
+
|
|
156
|
+
**Is TDK affiliated with Tilt or Docker?** No. TDK is an independent project built on top of [Tilt](https://tilt.dev), which is maintained by Docker, Inc.
|
|
157
|
+
|
|
119
158
|
## Development
|
|
120
159
|
|
|
121
160
|
```bash
|
|
@@ -142,8 +181,6 @@ Verifies Docker, Bun, Tilt, required ports, and master config files are all in p
|
|
|
142
181
|
- **Security:** see [SECURITY.md](SECURITY.md). Please don't report vulnerabilities in public issues.
|
|
143
182
|
- **Examples:** [ERP system (100 services)](https://github.com/tdk-landscape/tdk-erp-system), [SaaS starter](https://github.com/tdk-landscape/tdk-saas-starter), [restaurant](https://github.com/tdk-landscape/tdk-restaurant-example).
|
|
144
183
|
|
|
145
|
-
If TDK is useful to you, a ⭐ helps more than you'd think.
|
|
146
|
-
|
|
147
184
|
## License
|
|
148
185
|
|
|
149
186
|
[MIT](LICENSE) © [TDK Landscape](https://github.com/tdk-landscape)
|
package/cli/README.md
CHANGED
|
@@ -1,41 +1,6 @@
|
|
|
1
|
-
# 🚀 TDK CLI
|
|
1
|
+
# 🚀 TDK CLI reference
|
|
2
2
|
|
|
3
|
-
>
|
|
4
|
-
|
|
5
|
-
[](https://www.npmjs.com/package/@tdk-landscape/tdk-cli-core)
|
|
6
|
-
[](https://opensource.org/licenses/MIT)
|
|
7
|
-
[](https://badge.socket.dev/npm/package/@tdk-landscape/tdk-cli-core/1.3.27)
|
|
8
|
-
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
## 🎯 What is TDK?
|
|
12
|
-
|
|
13
|
-
TDK CLI organizes your microservices using a clear **Project-Stack-Resource (PSR)** hierarchy:
|
|
14
|
-
|
|
15
|
-
```
|
|
16
|
-
📁 Project (1 per repo)
|
|
17
|
-
├── ⚙️ TILT_RESOURCE_DEFAULTS.star # Ports, health checks, memory
|
|
18
|
-
├── 🔧 TILT_TECH_STACK.star # Bun, Vite, Prisma, NATS
|
|
19
|
-
│
|
|
20
|
-
└── 📦 Stacks (deployment groups)
|
|
21
|
-
├── 🔐 api-stack
|
|
22
|
-
│ ├── ⚡ api-backend # Resource
|
|
23
|
-
│ └── 🎨 web-frontend # Resource
|
|
24
|
-
│
|
|
25
|
-
└── 📅 worker-stack
|
|
26
|
-
├── ⚡ worker-backend # Resource
|
|
27
|
-
└── 🎨 web-frontend # Resource
|
|
28
|
-
```
|
|
29
|
-
|
|
30
|
-
---
|
|
31
|
-
|
|
32
|
-
## 📦 Installation
|
|
33
|
-
|
|
34
|
-
```bash
|
|
35
|
-
npm install -g @tdk-landscape/tdk-cli-core
|
|
36
|
-
# or
|
|
37
|
-
bun install -g @tdk-landscape/tdk-cli-core
|
|
38
|
-
```
|
|
3
|
+
> Command reference for the `tdk` CLI. For what TDK is, installation, badges, and the benchmark, see the **[main README](../README.md)**.
|
|
39
4
|
|
|
40
5
|
---
|
|
41
6
|
|
|
@@ -114,7 +79,7 @@ tdk resource my-worker --type worker --stack background
|
|
|
114
79
|
|---------|-------------|---------|
|
|
115
80
|
| `tdk up` | 🚀 Start all services | `tdk up` |
|
|
116
81
|
| `tdk up <stack>` | 🚀 Start a stack | `tdk up api` |
|
|
117
|
-
| `tdk up
|
|
82
|
+
| `tdk up --dry-run` | 👀 Show what would start, without starting | `tdk up api --dry-run` |
|
|
118
83
|
| `tdk down` | ⏹️ Stop all services | `tdk down` |
|
|
119
84
|
| `tdk status` | 📊 Show resource status | `tdk status` |
|
|
120
85
|
|
|
@@ -125,7 +90,13 @@ tdk resource my-worker --type worker --stack background
|
|
|
125
90
|
| Command | Description |
|
|
126
91
|
|---------|-------------|
|
|
127
92
|
| `tdk ui` | 🎨 Interactive terminal UI |
|
|
93
|
+
| `tdk networks` | 🌐 Show Traefik-routed URLs (`--stack`, `--json`, `--raw`) |
|
|
94
|
+
| `tdk config regenerate` | ♻️ Regenerate master config files from `.tdk/project.json` |
|
|
95
|
+
| `tdk config verify` | ✅ Check generated files match `.tdk/project.json` |
|
|
96
|
+
| `tdk config enable-infra <service>` | ➕ Enable an optional infrastructure service (`disable-infra` to turn it off) |
|
|
128
97
|
| `tdk doctor` | 🔍 Check environment (Docker, Bun, Tilt, ports) |
|
|
98
|
+
| `tdk completion --install` | ⌨️ Install shell completions (`--shell bash\|zsh\|fish`) |
|
|
99
|
+
| `tdk upgrade` | ⬆️ Self-update to the latest version (`--dry-run`, `--force`) |
|
|
129
100
|
| `tdk version` | ℹ️ Show version |
|
|
130
101
|
| `tdk --help` | ❓ Show help |
|
|
131
102
|
|
|
@@ -179,6 +150,7 @@ tdk resources --stack api
|
|
|
179
150
|
| `backend` | 4000-4999 | 🏎️ Hono API | REST APIs, microservices |
|
|
180
151
|
| `frontend` | 3000-3999 | ⚛️ React + Vite | Web apps, dashboards |
|
|
181
152
|
| `worker` | (optional) | 🔧 Background worker | Queue processors, jobs |
|
|
153
|
+
| `sdk` | — | none (register existing, `packages/<name>`) | Shared libraries |
|
|
182
154
|
|
|
183
155
|
---
|
|
184
156
|
|
|
@@ -298,21 +270,22 @@ tdk up --help
|
|
|
298
270
|
|
|
299
271
|
## 📚 Documentation
|
|
300
272
|
|
|
301
|
-
- [Main
|
|
302
|
-
- [
|
|
303
|
-
- [
|
|
273
|
+
- [Main README](../README.md)
|
|
274
|
+
- [Feature flags](../docs/FEATURES.md)
|
|
275
|
+
- [Architecture](../engine/docs/README.md)
|
|
276
|
+
- [Tilt Extension](../ext/)
|
|
304
277
|
|
|
305
278
|
---
|
|
306
279
|
|
|
307
280
|
## 📝 License
|
|
308
281
|
|
|
309
|
-
MIT © [TDK Landscape](https://github.com/tdk-landscape)
|
|
282
|
+
[MIT](../LICENSE) © [TDK Landscape](https://github.com/tdk-landscape)
|
|
310
283
|
|
|
311
284
|
---
|
|
312
285
|
|
|
313
286
|
<div align="center">
|
|
314
287
|
|
|
315
|
-
**[⬆️ Back to Top](#-tdk-cli)**
|
|
288
|
+
**[⬆️ Back to Top](#-tdk-cli-reference)**
|
|
316
289
|
|
|
317
290
|
Made with 💚 for developers who ship
|
|
318
291
|
|
package/cli/biome.json
CHANGED
|
@@ -19,10 +19,6 @@
|
|
|
19
19
|
"level": "error",
|
|
20
20
|
"options": {
|
|
21
21
|
"patterns": [
|
|
22
|
-
{
|
|
23
|
-
"group": ["@beauty-crm/*-frontend", "@beauty-crm/*-backend"],
|
|
24
|
-
"message": "❌ tdk-cli is a leaf dev tool: it must never import a beauty-crm service/frontend. See BOUNDARIES.md §4-5."
|
|
25
|
-
},
|
|
26
22
|
{
|
|
27
23
|
"group": ["@tdk-landscape/*-backend", "@tdk-landscape/*-frontend"],
|
|
28
24
|
"message": "❌ tdk-cli is a leaf dev tool: it must never import a service package. See BOUNDARIES.md §4-5."
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAuFA,wBAAgB,QAAQ,IAAI,IAAI,CAuD/B"}
|
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import chalk from "chalk";
|
|
2
|
+
import pkg from "../../package.json" with { type: "json" };
|
|
2
3
|
const TDK_BANNER = `
|
|
3
|
-
${chalk.cyan("
|
|
4
|
-
${chalk.cyan("║")} ${chalk.cyan("║")}
|
|
5
|
-
${chalk.cyan("║")} ${chalk.bold.white("████████╗██████╗ ██╗ ██╗")} ${chalk.bold.white("██████╗██╗ ██╗")} ${chalk.cyan("║")}
|
|
6
|
-
${chalk.cyan("║")} ${chalk.bold.white("╚══██╔══╝██╔══██╗██║ ██╔╝")} ${chalk.bold.white("██╔════╝██║ ██║")} ${chalk.cyan("║")}
|
|
7
|
-
${chalk.cyan("║")} ${chalk.bold.white("██║ ██║ ██║█████╔╝")} ${chalk.bold.white("██║ ██║ ██║")} ${chalk.cyan("║")}
|
|
8
|
-
${chalk.cyan("║")} ${chalk.bold.white("██║ ██║ ██║██╔═██╗")} ${chalk.bold.white("██║ ██║ ██║")} ${chalk.cyan("║")}
|
|
9
|
-
${chalk.cyan("║")} ${chalk.bold.white("██║ ██████╔╝██║ ██╗")}${chalk.yellow("██╗")}${chalk.bold.white("╚██████╗███████╗██║")} ${chalk.cyan("║")}
|
|
10
|
-
${chalk.cyan("║")} ${chalk.white("╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝")} ${chalk.white("╚═════╝╚══════╝╚═╝")} ${chalk.cyan("║")}
|
|
11
|
-
${chalk.cyan("║")} ${chalk.cyan("║")}
|
|
12
|
-
${chalk.cyan("║")} ${chalk.bold.yellow("🚀 Tilt Development Kit - Local Microservices")} ${chalk.cyan("║")}
|
|
13
|
-
${chalk.cyan("║")} ${chalk.cyan("║")}
|
|
14
|
-
${chalk.cyan("╚════════════════════════════════════════════════════════════╝")}
|
|
4
|
+
${chalk.bold.cyan("tdk")} ${chalk.gray(`v${pkg.version}`)} ${chalk.white("Tilt Development Kit: run your microservices locally")}
|
|
15
5
|
`;
|
|
16
6
|
const COMMAND_GROUPS = [
|
|
17
7
|
{
|
|
18
|
-
title: "
|
|
19
|
-
emoji: "📁",
|
|
8
|
+
title: "Project Level",
|
|
20
9
|
color: chalk.blue,
|
|
21
10
|
commands: [
|
|
22
11
|
{
|
|
@@ -28,8 +17,7 @@ const COMMAND_GROUPS = [
|
|
|
28
17
|
],
|
|
29
18
|
},
|
|
30
19
|
{
|
|
31
|
-
title: "
|
|
32
|
-
emoji: "📦",
|
|
20
|
+
title: "Stack Level",
|
|
33
21
|
color: chalk.magenta,
|
|
34
22
|
commands: [
|
|
35
23
|
{ name: "stack", desc: "Organize resources into stacks (interactive)", alias: "" },
|
|
@@ -37,8 +25,7 @@ const COMMAND_GROUPS = [
|
|
|
37
25
|
],
|
|
38
26
|
},
|
|
39
27
|
{
|
|
40
|
-
title: "
|
|
41
|
-
emoji: "⚡",
|
|
28
|
+
title: "Resource Level",
|
|
42
29
|
color: chalk.yellow,
|
|
43
30
|
commands: [
|
|
44
31
|
{ name: "resource", desc: "Create new resource with templates", alias: "" },
|
|
@@ -46,8 +33,7 @@ const COMMAND_GROUPS = [
|
|
|
46
33
|
],
|
|
47
34
|
},
|
|
48
35
|
{
|
|
49
|
-
title: "
|
|
50
|
-
emoji: "🔄",
|
|
36
|
+
title: "Lifecycle",
|
|
51
37
|
color: chalk.green,
|
|
52
38
|
commands: [
|
|
53
39
|
{ name: "up, deploy", desc: "Start services (optionally by stack)", alias: "[stack-name]" },
|
|
@@ -56,8 +42,7 @@ const COMMAND_GROUPS = [
|
|
|
56
42
|
],
|
|
57
43
|
},
|
|
58
44
|
{
|
|
59
|
-
title: "
|
|
60
|
-
emoji: "🌐",
|
|
45
|
+
title: "Networking",
|
|
61
46
|
color: chalk.blueBright,
|
|
62
47
|
commands: [
|
|
63
48
|
{
|
|
@@ -68,8 +53,7 @@ const COMMAND_GROUPS = [
|
|
|
68
53
|
],
|
|
69
54
|
},
|
|
70
55
|
{
|
|
71
|
-
title: "
|
|
72
|
-
emoji: "🛠️",
|
|
56
|
+
title: "Utilities",
|
|
73
57
|
color: chalk.cyan,
|
|
74
58
|
commands: [
|
|
75
59
|
{ name: "ui, interactive", desc: "Interactive TUI for managing services", alias: "" },
|
|
@@ -82,7 +66,7 @@ const COMMAND_GROUPS = [
|
|
|
82
66
|
{ name: "completion", desc: "Generate shell completions", alias: "--install --shell zsh" },
|
|
83
67
|
{ name: "upgrade, update", desc: "Self-update to latest version", alias: "--force" },
|
|
84
68
|
{ name: "version, -v", desc: "Display version number", alias: "" },
|
|
85
|
-
{ name: "help", desc: "Show
|
|
69
|
+
{ name: "help", desc: "Show help", alias: "[command]" },
|
|
86
70
|
],
|
|
87
71
|
},
|
|
88
72
|
];
|
|
@@ -94,7 +78,7 @@ function formatCommand(name, desc, alias, color) {
|
|
|
94
78
|
}
|
|
95
79
|
export function showHelp() {
|
|
96
80
|
console.log(TDK_BANNER);
|
|
97
|
-
console.log(chalk.bold.white("\n Project → Phase → Stack → Resource
|
|
81
|
+
console.log(chalk.bold.white("\n Project → Phase → Stack → Resource\n"));
|
|
98
82
|
console.log(chalk.gray(" Usage: tdk [command] [options]\n"));
|
|
99
83
|
console.log(chalk.bold.yellow(" Global Options:"));
|
|
100
84
|
console.log(` ${chalk.cyan("-v, --version".padEnd(20))} ${chalk.white("Display version number")}`);
|
|
@@ -102,14 +86,14 @@ export function showHelp() {
|
|
|
102
86
|
console.log(` ${chalk.cyan("-h, --help".padEnd(20))} ${chalk.white("Show help")}`);
|
|
103
87
|
console.log();
|
|
104
88
|
for (const group of COMMAND_GROUPS) {
|
|
105
|
-
console.log(group.color.bold(
|
|
89
|
+
console.log(group.color.bold(` ${group.title}`));
|
|
106
90
|
console.log(group.color(` ${"─".repeat(50)}`));
|
|
107
91
|
for (const cmd of group.commands) {
|
|
108
92
|
console.log(formatCommand(cmd.name, cmd.desc, cmd.alias, group.color));
|
|
109
93
|
}
|
|
110
94
|
console.log();
|
|
111
95
|
}
|
|
112
|
-
console.log(chalk.bold.yellow("
|
|
96
|
+
console.log(chalk.bold.yellow(" Quick start:"));
|
|
113
97
|
console.log(chalk.gray(` ${"─".repeat(50)}`));
|
|
114
98
|
console.log(chalk.white(`
|
|
115
99
|
${chalk.cyan("1.")} Initialize project: ${chalk.green("tdk project")}
|
|
@@ -117,22 +101,21 @@ export function showHelp() {
|
|
|
117
101
|
${chalk.cyan("3.")} Assign to stack: ${chalk.green("tdk stack my-stack")}
|
|
118
102
|
${chalk.cyan("4.")} Start development: ${chalk.green("tdk up my-stack")}
|
|
119
103
|
`));
|
|
120
|
-
console.log(chalk.bold.yellow("
|
|
104
|
+
console.log(chalk.bold.yellow(" Examples:"));
|
|
121
105
|
console.log(chalk.gray(` ${"─".repeat(50)}`));
|
|
122
106
|
console.log(chalk.white(`
|
|
123
|
-
${chalk.cyan("$")} tdk project
|
|
124
|
-
${chalk.cyan("$")} tdk resource api --type backend
|
|
125
|
-
${chalk.cyan("$")} tdk resource app --type frontend
|
|
126
|
-
${chalk.cyan("$")} tdk stacks --services
|
|
127
|
-
${chalk.cyan("$")} tdk up my-stack
|
|
128
|
-
${chalk.cyan("$")} tdk networks
|
|
129
|
-
${chalk.cyan("$")} tdk doctor
|
|
130
|
-
${chalk.cyan("$")} tdk upgrade
|
|
107
|
+
${chalk.cyan("$")} tdk project # Create master configs
|
|
108
|
+
${chalk.cyan("$")} tdk resource api --type backend # Create a backend service
|
|
109
|
+
${chalk.cyan("$")} tdk resource app --type frontend # Create a frontend app
|
|
110
|
+
${chalk.cyan("$")} tdk stacks --services # List stacks with their resources
|
|
111
|
+
${chalk.cyan("$")} tdk up my-stack # Start a stack
|
|
112
|
+
${chalk.cyan("$")} tdk networks # Show Traefik-routed URLs
|
|
113
|
+
${chalk.cyan("$")} tdk doctor # Check your environment
|
|
114
|
+
${chalk.cyan("$")} tdk upgrade # Self-update
|
|
131
115
|
`));
|
|
132
116
|
console.log(chalk.gray(` ${"═".repeat(50)}`));
|
|
133
|
-
console.log(chalk.gray(` For more help: ${chalk.cyan("tdk help [command]
|
|
117
|
+
console.log(chalk.gray(` For more help: ${chalk.cyan("tdk help [command]")}`));
|
|
134
118
|
console.log(chalk.gray(` GitHub: ${chalk.cyan("https://github.com/tdk-landscape/tdk-cli-core")}`));
|
|
135
119
|
console.log();
|
|
136
|
-
console.log(chalk.green.bold(" Happy coding! 🚀\n"));
|
|
137
120
|
}
|
|
138
121
|
//# sourceMappingURL=help.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/commands/help.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
import { Command } from "commander";
|
|
2
|
+
/**
|
|
3
|
+
* Adds stacks that have service.json files but aren't in any phase to
|
|
4
|
+
* pre_alpha, so a resource scaffolded after `tdk project` is picked up by
|
|
5
|
+
* `tdk up` without re-running `tdk project`. Returns the stacks it enabled.
|
|
6
|
+
*/
|
|
7
|
+
export declare function enableDiscoveredStacks(projectRoot: string): string[];
|
|
2
8
|
export declare const projectCommand: Command;
|
|
3
9
|
//# sourceMappingURL=project.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkEpC;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAapE;AAmGD,eAAO,MAAM,cAAc,SA2QvB,CAAC"}
|