DodoApp: Implement dev proxy mode
With dev proxy user can substitute any service with their own local
machine. In which case dodo will run proxy server on the platform
which will forward all requests to the configured address.
When VPN is enabled, dodo will run tailscale sidecar in the proxy pod.
Change-Id: I12592ae77d2e88e0582c8fe1e0f82e5fd24e02cb
diff --git a/apps/canvas/config/src/config.test.ts b/apps/canvas/config/src/config.test.ts
index 5a927df..e8c0c38 100644
--- a/apps/canvas/config/src/config.test.ts
+++ b/apps/canvas/config/src/config.test.ts
@@ -17,6 +17,7 @@
rootDir: "/",
},
ports: [{ name: "http", value: 3000, protocol: "TCP" }],
+ dev: { enabled: false },
},
],
};
diff --git a/apps/canvas/config/src/config.ts b/apps/canvas/config/src/config.ts
index d91b535..f5957d4 100644
--- a/apps/canvas/config/src/config.ts
+++ b/apps/canvas/config/src/config.ts
@@ -114,6 +114,7 @@
dev: n.data.dev?.enabled
? {
enabled: true,
+ mode: "VM",
username: env.user.username,
codeServer:
n.data.dev.expose != null
diff --git a/apps/canvas/config/src/types.ts b/apps/canvas/config/src/types.ts
index bbf851b..a49c2d5 100644
--- a/apps/canvas/config/src/types.ts
+++ b/apps/canvas/config/src/types.ts
@@ -98,14 +98,16 @@
expose: z.array(PortDomainSchema).optional(),
volume: z.array(z.string()).optional(),
preBuildCommands: z.array(z.object({ bin: z.string() })).optional(),
- dev: z
- .object({
- enabled: z.boolean(),
+ dev: z.discriminatedUnion("enabled", [
+ z.object({ enabled: z.literal(false) }),
+ z.object({
+ enabled: z.literal(true),
+ mode: z.string(),
username: z.string().optional(),
ssh: DomainSchema.optional(),
codeServer: DomainSchema.optional(),
- })
- .optional(),
+ }),
+ ]),
model: ModelSchema.optional(),
});