@tdk-landscape/tdk-cli-core 1.3.64 → 1.3.66
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/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,11 @@ Notable changes to the `tdk` CLI. Versions match [npm](https://www.npmjs.com/pac
|
|
|
4
4
|
|
|
5
5
|
## Unreleased
|
|
6
6
|
|
|
7
|
+
- **`tdk up` on a machine with no base images no longer leaves every service stuck on a 404.** The generated Tiltfile dropped the golden-layers resource name, so app and migrator resources never waited for `golden-layers-build`. Their image builds started at once, failed with "pull access denied" because the base images did not exist yet, and Tilt never retried. Machines that had built the layers before (any second run) were unaffected, which hid it. Found by the clean-machine quickstart run.
|
|
8
|
+
- `tdk doctor` now names a missing golden base image for any project name (`shop-l4-backend`, ...). The hint was hard-coded to the `tdk-project-` prefix, so a real project got the raw BuildKit error.
|
|
9
|
+
|
|
10
|
+
## 1.3.64 (2026-09-28)
|
|
11
|
+
|
|
7
12
|
- `traefik.healthCheck` in service.json (the path Traefik's load balancer probes, documented in the schema) is now honored. It was read by discovery but never used, so Traefik always probed `healthCheckPath`. It defaults to `healthCheckPath`, so manifests that only set that generate the same output as before.
|
|
8
13
|
- `tdk doctor` checks that every backend defines the health routes it is probed on (`healthCheckPath` for the container, `traefik.healthCheck` for Traefik, both defaulting to `/health`) somewhere in `src/`. A backend without them never turns healthy, so Traefik returns 404, which used to surface only after a slow image build.
|
|
9
14
|
|
|
@@ -123,6 +123,7 @@ export function parseTiltResourceFailures(jsonText, deferredNames = new Set()) {
|
|
|
123
123
|
* Turn noisy Tilt/Docker build errors into an actionable one-liner.
|
|
124
124
|
* Prefer registry/network root causes over truncated ImageBuild exit lines.
|
|
125
125
|
*/
|
|
126
|
+
const GOLDEN_BASE_IMAGE_PULL_FAILURE = /failed to resolve source metadata for docker\.io\/library\/([A-Za-z0-9._-]+-l[1-4](?:-[a-z]+)*)(?::[^\s:]+)?:/i;
|
|
126
127
|
export function summarizeTiltBuildError(error) {
|
|
127
128
|
const normalized = error.replace(/\s+/g, " ").trim();
|
|
128
129
|
const bindMatch = normalized.match(/Bind for [^ ]+:(\d+) failed: port is already allocated/i);
|
|
@@ -141,9 +142,11 @@ export function summarizeTiltBuildError(error) {
|
|
|
141
142
|
const more = unique.length > 4 ? ` (+${unique.length - 4} more)` : "";
|
|
142
143
|
return `private registry ConnectionRefused for ${shown}${more} — Verdaccio (:4873) is down or unreachable from the build`;
|
|
143
144
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
145
|
+
// Golden base images are named `<project>-l1`, `<project>-l2`, `<project>-l3-backend`,
|
|
146
|
+
// `<project>-l4-migrator`, and so on, for whatever the project is called.
|
|
147
|
+
const goldenBase = normalized.match(GOLDEN_BASE_IMAGE_PULL_FAILURE);
|
|
148
|
+
if (goldenBase) {
|
|
149
|
+
return `base image ${goldenBase[1]} was missing when this build started (the golden layers weren't built yet, or golden-layers-build failed) - Tilt does not retry a failed build by itself`;
|
|
147
150
|
}
|
|
148
151
|
if (/install-deps\.sh/i.test(normalized) ||
|
|
149
152
|
/bun install(?: --production)?/i.test(normalized) ||
|
package/cli/package.json
CHANGED
|
@@ -185,7 +185,12 @@ def should_enable(resource_name):
|
|
|
185
185
|
# =============================================================================
|
|
186
186
|
|
|
187
187
|
print("🏗️ Loading infrastructure services...")
|
|
188
|
-
|
|
188
|
+
# load_all returns the golden-layers build resource's name. It has to reach
|
|
189
|
+
# TILT_CONTEXT below: app and migrator resources add it to their resource_deps
|
|
190
|
+
# so their images build only after the base images exist. Dropping it lets
|
|
191
|
+
# every service image build start at once, fail with "pull access denied" on a
|
|
192
|
+
# machine that has no base images yet, and never retry.
|
|
193
|
+
GOLDEN_IMAGE_RESOURCE = Infra.load_all(
|
|
189
194
|
should_enable=should_enable,
|
|
190
195
|
fix_docker_networks_fn=Utils.fix_docker_networks,
|
|
191
196
|
docker_provider=Docker,
|
|
@@ -219,6 +224,7 @@ TILT_CONTEXT = {
|
|
|
219
224
|
'global_config': GLOBAL_CONFIG_EXPORT,
|
|
220
225
|
'project_root': PROJECT_ROOT,
|
|
221
226
|
'all_services': _app_resources_list,
|
|
227
|
+
'golden_image_resource': GOLDEN_IMAGE_RESOURCE,
|
|
222
228
|
}
|
|
223
229
|
|
|
224
230
|
print("🚀 Creating Tilt resources for {} services...".format(len(_app_resources_list)))
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tdk-landscape/tdk-cli-core",
|
|
3
|
-
"version": "1.3.
|
|
3
|
+
"version": "1.3.66",
|
|
4
4
|
"description": "Run 100 microservices on a 16 GB laptop without Kubernetes. Scaffold services and run them locally with hot reload, built on Tilt.",
|
|
5
5
|
"homepage": "https://tdk-landscape.github.io/tdk-website",
|
|
6
6
|
"repository": {
|