Juan Denis and Claude Fable 5
284bc02dc1
feat(manifest): dockerfilePath — build services from a repo Dockerfile
...
A v1 manifest service gains a third image source next to buildpacks and
BYO image: — `dockerfilePath: services/api/Dockerfile`. This is the
monorepo path: one repository, several services, each built from its own
Dockerfile with the repo root as the shared build context.
- spec: new service key (camel + snake alias), validated relative-only
(no `..`/absolute), mutually exclusive with `image` and `containers`,
rejected on db services; schema docs copy kept in sync.
- resolve/plan: the path rides the create_app payload (with autoDeploy)
and shows in the step description; a changed path plans as an app
update; drift_pair tracks it against the stored build config.
- apply: create clones the project's repository into the managed apps
dir (idempotent — an existing checkout is reused) and writes the same
git-deployment + build config the import wizard does, so the existing
deploy pipeline (push webhook, per-service autoDeploy) takes over
unchanged. Source resolves from the stored manifest's provenance, else
a sibling app's git deployment; neither is a plan-time blocker
(dockerfile_no_source). Remote targets refuse like the other appliance
features ('a Dockerfile build' joins _service_features).
- scaffold: a dockerfile-built app round-trips its build config instead
of leaking the built image as a BYO `image:` declaration.
- import wizard: a v1 manifest with dockerfilePath seeds
build_method=dockerfile + the path.
Tests: 10 new (spec exclusivity/traversal + plan/apply/blocker wiring);
manifest suite 96/96, full backend suite green except 3 pre-existing
test_server_time_timezone failures also present on a clean tree.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-07-10 01:13:14 -04:00
..
2026-07-07 20:29:31 -04:00
2026-07-09 05:27:22 -04:00
2026-07-09 05:27:22 -04:00
2026-07-08 02:05:39 -04:00
2026-06-12 18:35:35 -04:00
2026-06-12 17:31:26 -04:00
2026-05-31 14:46:47 -04:00
2026-05-31 16:08:13 -04:00
2026-06-12 17:33:29 -04:00
2026-06-01 02:39:05 -04:00
2026-07-07 20:29:24 -04:00
2026-06-23 18:23:47 -04:00
2026-07-03 14:23:39 -04:00
2026-07-01 20:49:41 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-05-03 15:57:02 -04:00
2026-07-07 20:29:24 -04:00
2026-07-02 22:36:34 -04:00
2026-07-07 20:29:25 -04:00
2026-06-19 13:22:43 -04:00
2026-06-24 14:19:32 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:27:08 -04:00
2026-06-24 14:20:43 -04:00
2026-07-09 04:41:00 -04:00
2026-06-22 19:53:23 -04:00
2026-06-24 14:16:45 -04:00
2026-07-07 20:29:25 -04:00
2026-07-03 15:21:48 -04:00
2026-06-23 18:49:04 -04:00
2026-07-03 15:21:22 -04:00
2026-07-04 01:46:34 -04:00
2026-07-02 01:04:03 -04:00
2026-07-09 05:02:54 -04:00
2026-07-02 01:04:03 -04:00
2026-06-23 23:19:41 -04:00
2026-06-24 14:24:13 -04:00
2026-06-23 21:15:16 -04:00
2026-05-05 14:03:31 -04:00
2026-07-01 20:49:41 -04:00
2026-06-19 10:13:50 -04:00
2026-06-19 09:54:40 -04:00
2026-06-23 18:23:47 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-07-07 20:29:29 -04:00
2026-07-03 15:21:36 -04:00
2026-07-03 14:24:15 -04:00
2026-07-03 14:24:03 -04:00
2026-06-15 00:01:41 -04:00
2026-07-03 14:24:02 -04:00
2026-06-19 03:12:07 -04:00
2026-07-03 14:23:50 -04:00
2026-06-24 14:52:04 -04:00
2026-06-22 16:24:53 -04:00
2026-06-22 16:34:17 -04:00
2026-06-22 16:12:31 -04:00
2026-06-22 16:12:31 -04:00
2026-07-08 01:41:22 -04:00
2026-07-09 04:50:16 -04:00
2026-07-08 01:41:22 -04:00
2026-06-30 23:31:57 -04:00
2026-06-22 16:24:53 -04:00
2026-06-23 00:34:55 -04:00
2026-07-03 23:18:08 -04:00
2026-07-03 15:22:07 -04:00
2026-06-22 16:40:35 -04:00
2026-06-24 01:43:29 -04:00
2026-07-07 20:29:24 -04:00
2026-06-19 01:34:02 -04:00
2026-07-04 01:28:16 -04:00
2026-07-03 15:21:09 -04:00
2026-06-23 21:33:53 -04:00
2026-07-09 04:55:53 -04:00
2026-07-03 23:18:08 -04:00
2026-06-24 14:32:41 -04:00
2026-06-24 14:36:08 -04:00
2026-06-23 20:04:04 -04:00
2026-07-08 23:12:48 -04:00
2026-07-08 23:12:48 -04:00
2026-07-01 22:11:09 -04:00
2026-07-02 00:15:10 -04:00
2026-07-03 15:21:34 -04:00
2026-07-09 04:41:00 -04:00
2026-07-08 01:41:13 -04:00
2026-06-23 21:15:16 -04:00
2026-07-08 01:41:13 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-07-07 20:29:28 -04:00
2026-07-07 20:29:31 -04:00
2026-07-03 15:22:05 -04:00
2026-06-19 09:37:30 -04:00
2026-06-23 20:57:40 -04:00
2026-07-08 23:01:12 -04:00
2026-07-03 14:23:50 -04:00
2026-07-03 15:21:23 -04:00
2026-07-01 20:49:41 -04:00
2026-07-03 14:24:15 -04:00
2026-07-09 03:35:53 -04:00
2026-07-09 02:57:23 -04:00
2026-07-09 03:05:08 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:21:14 -04:00
2026-07-09 03:28:08 -04:00
2026-07-04 01:16:29 -04:00
2026-07-04 01:46:34 -04:00
2026-07-09 03:35:53 -04:00
2026-07-04 01:34:54 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:13:54 -04:00
2026-07-08 01:41:43 -04:00
2026-07-03 14:23:11 -04:00
2026-07-03 15:21:50 -04:00
2026-07-02 00:15:10 -04:00
2026-06-15 23:20:00 -04:00
2026-07-07 20:29:31 -04:00
2026-06-21 19:57:02 -04:00
2026-07-07 20:29:29 -04:00
2026-07-07 20:29:29 -04:00
2026-07-08 01:41:43 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:58:55 -04:00
2026-07-09 04:41:00 -04:00
2026-06-12 18:35:43 -04:00
2026-05-31 16:08:32 -04:00
2026-07-02 22:19:14 -04:00
2026-07-08 01:41:43 -04:00
2026-07-09 01:52:38 -04:00
2026-07-03 04:12:58 -04:00
2026-06-23 19:33:44 -04:00
2026-06-23 19:33:44 -04:00
2026-06-15 19:55:57 -04:00
2026-06-23 19:33:44 -04:00
2026-06-20 22:25:06 -04:00
2026-06-20 22:38:38 -04:00
2026-07-09 01:43:34 -04:00
2026-07-07 20:29:29 -04:00
2026-05-03 07:07:57 -04:00
2026-06-05 23:08:44 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-06-21 01:54:51 -04:00
2026-06-19 16:52:40 -04:00
2026-07-08 01:41:43 -04:00
2026-06-23 20:04:04 -04:00
2026-07-07 20:29:24 -04:00
2026-07-01 22:55:11 -04:00
2026-06-25 01:06:44 -04:00
2026-07-04 00:48:01 -04:00
2026-07-04 00:27:41 -04:00
2026-05-05 14:03:31 -04:00
2026-06-23 17:31:28 -04:00
2026-06-24 14:06:05 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-09 04:41:00 -04:00
2026-06-23 20:04:04 -04:00
2026-07-01 00:31:22 -04:00
2026-07-03 14:24:29 -04:00
2026-07-03 14:24:29 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-06-30 23:48:28 -04:00
2026-07-03 14:23:29 -04:00
2026-07-08 23:58:45 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:40:08 -04:00
2026-07-03 15:21:22 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-06-22 01:45:15 -04:00
2026-06-23 18:49:04 -04:00
2026-06-23 18:23:47 -04:00
2026-06-15 23:28:12 -04:00
2026-06-15 23:20:00 -04:00
2026-07-02 00:15:10 -04:00
2026-02-10 16:03:19 -05:00
2026-03-04 02:54:14 -05:00
2026-06-19 14:02:24 -04:00
2026-07-02 00:15:10 -04:00
2026-06-15 21:00:57 -04:00
2026-07-09 04:41:00 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-06-24 14:09:35 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-07-03 14:24:31 -04:00
2026-07-03 15:21:23 -04:00