From b9fcf44ad34c82cae5eb006510dd35afcc3e78b7 Mon Sep 17 00:00:00 2001 From: Jon Edvald Date: Thu, 13 Jul 2023 03:38:54 +0200 Subject: [PATCH] fix(serve): connect to Cloud if process is started outside of project dir This came up in the Desktop client because it'd start the serve command outside of any project root, and thus not connect to Cloud at all for the live view etc. to work. --- core/src/commands/serve.ts | 2 +- core/src/server/instance-manager.ts | 21 ++++++++++++++++++++- 2 files changed, 21 insertions(+), 2 deletions(-) diff --git a/core/src/commands/serve.ts b/core/src/commands/serve.ts index 331811eec7e..fa51c72ea3a 100644 --- a/core/src/commands/serve.ts +++ b/core/src/commands/serve.ts @@ -160,7 +160,7 @@ export class ServeCommand< const session = await cloudApi.registerSession({ parentSessionId: undefined, projectId, - // Use the process (i.e. parent command) session ID for the serve command session + // Use the process (i.e. parent command) session ID for the serve/dev command session sessionId: manager.sessionId, commandInfo: garden.commandInfo, localServerPort: this.server.port, diff --git a/core/src/server/instance-manager.ts b/core/src/server/instance-manager.ts index 23920ae56c4..665cdef37aa 100644 --- a/core/src/server/instance-manager.ts +++ b/core/src/server/instance-manager.ts @@ -379,7 +379,7 @@ export class GardenInstanceManager { const gardenParams = await resolveGardenParamsPartial(projectRoot, gardenOpts) - return this.ensureInstance( + const garden = await this.ensureInstance( log, { projectRoot, @@ -389,5 +389,24 @@ export class GardenInstanceManager { }, gardenOpts ) + + if (cloudApi && garden.projectId && this.serveCommand.server) { + // Ensure cloud session is registered for the domain and server session, since this may not happen on startup + // if the command isn't started in a Garden project root. This is a no-op if it's already registered. + // FIXME: We still need to rethink on the Cloud side how sessions are scoped + await cloudApi.registerSession({ + parentSessionId: undefined, + projectId: garden.projectId, + // Use the process (i.e. parent command) session ID for the serve/dev command session + sessionId: this.sessionId, + commandInfo: garden.commandInfo, + localServerPort: this.serveCommand.server.port, + environment: garden.environmentName, + namespace: garden.namespace, + isDevCommand: true, + }) + } + + return garden } }