From a02cc2c75a78535d02a0a1fd4f6eefdf91a93ba4 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 14:36:12 +0000 Subject: [PATCH 01/16] Change name from stack to backend --- src/commands/frameworks-stacks-create.ts | 4 ++-- src/commands/frameworks-stacks-delete.ts | 20 ++++++++++---------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/commands/frameworks-stacks-create.ts b/src/commands/frameworks-stacks-create.ts index 5ffe85a9c12..b31b5033820 100644 --- a/src/commands/frameworks-stacks-create.ts +++ b/src/commands/frameworks-stacks-create.ts @@ -4,8 +4,8 @@ import { needProjectId } from "../projectUtils"; import requireInteractive from "../requireInteractive"; import { doSetup } from "../init/features/frameworks"; -export const command = new Command("stacks:create") - .description("Create a stack in a Firebase project") +export const command = new Command("backends:create") + .description("Create a backend in a Firebase project") .before(requireInteractive) .action(async (options: Options) => { const projectId = needProjectId(options); diff --git a/src/commands/frameworks-stacks-delete.ts b/src/commands/frameworks-stacks-delete.ts index 8916e856b10..722b8fdc7d4 100644 --- a/src/commands/frameworks-stacks-delete.ts +++ b/src/commands/frameworks-stacks-delete.ts @@ -6,24 +6,24 @@ import * as gcp from "../gcp/frameworks"; import { promptOnce } from "../prompt"; import * as utils from "../utils"; -export const command = new Command("stacks:delete") - .description("Delete a stack from a Firebase project") +export const command = new Command("backends:delete") + .description("Delete a backend from a Firebase project") .option("-l, --location ", "App Backend location", "us-central1") - .option("-s, --stackId ", "Stack Id", "") + .option("-s, --backendId ", "Backend Id", "") .withForce() .action(async (options: Options) => { const projectId = needProjectId(options); const location = options.location as string; - const stackId = options.stackId as string; - if (!stackId) { - throw new FirebaseError("Stack id can't be empty."); + const backendId = options.backendId as string; + if (!backendId) { + throw new FirebaseError("Backend id can't be empty."); } const confirmDeletion = await promptOnce( { type: "confirm", name: "force", default: false, - message: "You are about to delete the Stack with id: " + stackId + "\n Are you sure?", + message: "You are about to delete the Backend with id: " + backendId + "\n Are you sure?", }, options ); @@ -32,11 +32,11 @@ export const command = new Command("stacks:delete") } try { - await gcp.deleteStack(projectId, location, stackId); - utils.logSuccess(`Successfully deleted the stack: ${stackId}`); + await gcp.deleteStack(projectId, location, backendId); + utils.logSuccess(`Successfully deleted the backend: ${backendId}`); } catch (err: any) { throw new FirebaseError( - `Failed to delete stack: ${stackId}. Please check the parameters you have provided.`, + `Failed to delete backend: ${backendId}. Please check the parameters you have provided.`, { original: err } ); } From 000a270043a556ad0c3ce492971efba43b813faf Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 14:41:33 +0000 Subject: [PATCH 02/16] Change name from stack to backend --- src/commands/frameworks-stacks-delete.ts | 2 +- src/gcp/frameworks.ts | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/commands/frameworks-stacks-delete.ts b/src/commands/frameworks-stacks-delete.ts index 722b8fdc7d4..6d912d5a2dd 100644 --- a/src/commands/frameworks-stacks-delete.ts +++ b/src/commands/frameworks-stacks-delete.ts @@ -32,7 +32,7 @@ export const command = new Command("backends:delete") } try { - await gcp.deleteStack(projectId, location, backendId); + await gcp.deleteBackend(projectId, location, backendId); utils.logSuccess(`Successfully deleted the backend: ${backendId}`); } catch (err: any) { throw new FirebaseError( diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index cc7f3a5f4d2..1523ba36cba 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -128,14 +128,14 @@ export async function listStack(projectId: string, location: string): Promise
  • { - const name = `projects/${projectId}/locations/${location}/backends/${stackId}`; + const name = `projects/${projectId}/locations/${location}/backends/${backendId}`; const res = await client.delete(name); return res.body; From 12e8ae527ad85f4d5950efaec8d8cafbad65d1b1 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 17:27:04 +0000 Subject: [PATCH 03/16] changed file names --- ...{frameworks-stacks-create.ts => frameworks-backends-create.ts} | 0 ...{frameworks-stacks-delete.ts => frameworks-backends-delete.ts} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename src/commands/{frameworks-stacks-create.ts => frameworks-backends-create.ts} (100%) rename src/commands/{frameworks-stacks-delete.ts => frameworks-backends-delete.ts} (100%) diff --git a/src/commands/frameworks-stacks-create.ts b/src/commands/frameworks-backends-create.ts similarity index 100% rename from src/commands/frameworks-stacks-create.ts rename to src/commands/frameworks-backends-create.ts diff --git a/src/commands/frameworks-stacks-delete.ts b/src/commands/frameworks-backends-delete.ts similarity index 100% rename from src/commands/frameworks-stacks-delete.ts rename to src/commands/frameworks-backends-delete.ts From 8a433262a2d04576d052caa05a9673e32f0c8618 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 17:27:34 +0000 Subject: [PATCH 04/16] changed file names in experiments --- src/commands/index.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/commands/index.ts b/src/commands/index.ts index 4814d4f66fe..cf22615a910 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -155,9 +155,9 @@ export function load(client: any): any { client.frameworks = {}; client.frameworks.stacks = {}; client.frameworks.stacks.list = loadCommand("frameworks-stacks-list"); - client.frameworks.stacks.create = loadCommand("frameworks-stacks-create"); + client.frameworks.stacks.create = loadCommand("frameworks-backends-create"); client.frameworks.stacks.create = loadCommand("frameworks-stacks-get"); - client.frameworks.stacks.create = loadCommand("frameworks-stacks-delete"); + client.frameworks.stacks.create = loadCommand("frameworks-backends-delete"); } client.login = loadCommand("login"); client.login.add = loadCommand("login-add"); From 3fb49b4367a88a8c0b5bf5e32a8baf3a8ef51d25 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 19:34:50 +0000 Subject: [PATCH 05/16] changed name --- src/commands/frameworks-backends-delete.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/commands/frameworks-backends-delete.ts b/src/commands/frameworks-backends-delete.ts index 6d912d5a2dd..21c79a993f4 100644 --- a/src/commands/frameworks-backends-delete.ts +++ b/src/commands/frameworks-backends-delete.ts @@ -23,7 +23,7 @@ export const command = new Command("backends:delete") type: "confirm", name: "force", default: false, - message: "You are about to delete the Backend with id: " + backendId + "\n Are you sure?", + message: "You are about to delete the backend with id: " + backendId + "\n Are you sure?", }, options ); From 272d0e0f2e9efb11acb5b8e47afe0477c22030b8 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 20:10:42 +0000 Subject: [PATCH 06/16] lower case backend --- src/gcp/frameworks.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index 1523ba36cba..b6d740074e9 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -128,7 +128,7 @@ export async function listStack(projectId: string, location: string): Promise
  • Date: Wed, 1 Nov 2023 15:32:24 +0000 Subject: [PATCH 07/16] Changed stack to backend --- src/commands/frameworks-stacks-get.ts | 37 ++++++++++++++++---------- src/commands/frameworks-stacks-list.ts | 14 +++++----- src/gcp/frameworks.ts | 12 ++++----- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/src/commands/frameworks-stacks-get.ts b/src/commands/frameworks-stacks-get.ts index 91059921654..4c6a25e166e 100644 --- a/src/commands/frameworks-stacks-get.ts +++ b/src/commands/frameworks-stacks-get.ts @@ -4,32 +4,41 @@ import { needProjectId } from "../projectUtils"; import * as gcp from "../gcp/frameworks"; import { FirebaseError } from "../error"; import { logger } from "../logger"; +const Table = require("cli-table"); -export const command = new Command("stacks:get") - .description("Get stack details of a Firebase project") +export const command = new Command("backends:get") + .description("Get backend details of a Firebase project") .option("-l, --location ", "App Backend location", "us-central1") - .option("--s, --stackId ", "Stack Id", "") + .option("--s, --backendId ", "Backend Id", "") .action(async (options: Options) => { const projectId = needProjectId(options); const location = options.location as string; - const stackId = options.stackId as string; - if (!stackId) { - throw new FirebaseError("Stack id can't be empty."); + const backendId = options.backendId as string; + if (!backendId) { + throw new FirebaseError("Backend id can't be empty."); } - let stack; + let backend; try { - stack = await gcp.getStack(projectId, location, stackId); - /** - * TODO print this in a prettier way. - */ - logger.info(stack); + backend = await gcp.getBackend(projectId, location, backendId); + const table = new Table({ + head: ["Backend Id", "Repository Name", "URL", "Location", "Created Date", "Updated Date"], + style: { head: ["yellow"] }, + }); + table.push([ + backend.name, + backend.codebase.repository, + backend.uri, + backend.createTime, + backend.updateTime, + ]); + logger.info(table.toString()); } catch (err: any) { throw new FirebaseError( - `Failed to get stack: ${stackId}. Please check the parameters you have provided.`, + `Failed to get backend: ${backendId}. Please check the parameters you have provided.`, { original: err } ); } - return stack; + return backend; }); diff --git a/src/commands/frameworks-stacks-list.ts b/src/commands/frameworks-stacks-list.ts index 61ccd6bbb16..1c0d2016d1b 100644 --- a/src/commands/frameworks-stacks-list.ts +++ b/src/commands/frameworks-stacks-list.ts @@ -5,26 +5,26 @@ import * as gcp from "../gcp/frameworks"; import { FirebaseError } from "../error"; import { logger } from "../logger"; -export const command = new Command("stacks:list") - .description("List stacks of a Firebase project.") +export const command = new Command("backends:list") + .description("List backends of a Firebase project.") .option("-l, --location ", "App Backend location", "us-central1") .action(async (options: Options) => { const projectId = needProjectId(options); const location = options.location as string; - let stacks; + let backends; try { - stacks = await gcp.listStack(projectId, location); + backends = await gcp.listBackend(projectId, location); /** * TODO print this in a prettier way. */ - logger.info(stacks); + logger.info(backends); } catch (err: any) { throw new FirebaseError( - `Unable to list stacks present in project: ${projectId}. Please check the parameters you have provided.`, + `Unable to list backends present in project: ${projectId}. Please check the parameters you have provided.`, { original: err } ); } - return stacks; + return backends; }); diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index b6d740074e9..ad9496e563b 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -104,23 +104,23 @@ export async function createStack( } /** - * Gets stack details. + * Gets backend details. */ -export async function getStack( +export async function getBackend( projectId: string, location: string, - stackId: string + backendId: string ): Promise { - const name = `projects/${projectId}/locations/${location}/backends/${stackId}`; + const name = `projects/${projectId}/locations/${location}/backends/${backendId}`; const res = await client.get(name); return res.body; } /** - * List all stacks present in a project and region. + * List all backends present in a project and region. */ -export async function listStack(projectId: string, location: string): Promise { +export async function listBackend(projectId: string, location: string): Promise { const name = `projects/${projectId}/locations/${location}/backends`; const res = await client.get(name); From 38449bc97bc00621bacc6c61cca3f52998e8d78c Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 16:09:29 +0000 Subject: [PATCH 08/16] change stack to backend in index file --- src/init/features/frameworks/index.ts | 4 ++-- src/test/init/frameworks/index.spec.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/init/features/frameworks/index.ts b/src/init/features/frameworks/index.ts index 52be59193d6..f92b7054290 100644 --- a/src/init/features/frameworks/index.ts +++ b/src/init/features/frameworks/index.ts @@ -113,7 +113,7 @@ export async function getOrCreateStack(projectId: string, setup: any): Promise { - let stack = await gcp.getStack(projectId, location, setup.frameworks.serviceName); + let stack = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); while (stack) { setup.frameworks.serviceName = undefined; await promptOnce( @@ -139,7 +139,7 @@ async function getExistingStack(projectId: string, setup: any, location: string) }, setup.frameworks ); - stack = await gcp.getStack(projectId, location, setup.frameworks.serviceName); + stack = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); setup.frameworks.existingStack = undefined; } diff --git a/src/test/init/frameworks/index.spec.ts b/src/test/init/frameworks/index.spec.ts index 28ea17f0fd3..e01197c3393 100644 --- a/src/test/init/frameworks/index.spec.ts +++ b/src/test/init/frameworks/index.spec.ts @@ -20,7 +20,7 @@ describe("operationsConverter", () => { .stub(poller, "pollOperation") .throws("Unexpected pollOperation call"); createStackStub = sandbox.stub(gcp, "createStack").throws("Unexpected createStack call"); - getStackStub = sandbox.stub(gcp, "getStack").throws("Unexpected getStack call"); + getStackStub = sandbox.stub(gcp, "getBackend").throws("Unexpected getStack call"); linkGitHubRepositoryStub = sandbox .stub(repo, "linkGitHubRepository") .throws("Unexpected getStack call"); From 270a0a827c250c7487d9556e9f1bb50e50d2838c Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 16:13:17 +0000 Subject: [PATCH 09/16] List stacks in table --- src/commands/frameworks-stacks-list.ts | 26 +++++++++++++++++++------- src/gcp/frameworks.ts | 8 ++++---- 2 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/commands/frameworks-stacks-list.ts b/src/commands/frameworks-stacks-list.ts index 1c0d2016d1b..866ad625f01 100644 --- a/src/commands/frameworks-stacks-list.ts +++ b/src/commands/frameworks-stacks-list.ts @@ -4,6 +4,7 @@ import { needProjectId } from "../projectUtils"; import * as gcp from "../gcp/frameworks"; import { FirebaseError } from "../error"; import { logger } from "../logger"; +const Table = require("cli-table"); export const command = new Command("backends:list") .description("List backends of a Firebase project.") @@ -11,14 +12,25 @@ export const command = new Command("backends:list") .action(async (options: Options) => { const projectId = needProjectId(options); const location = options.location as string; + const table = new Table({ + head: ["Backend Id", "Repository Name", "URL", "Location", "Created Date", "Updated Date"], + style: { head: ["yellow"] }, + }); - let backends; + let backendsList; try { - backends = await gcp.listBackend(projectId, location); - /** - * TODO print this in a prettier way. - */ - logger.info(backends); + backendsList = await gcp.listBackend(projectId, location); + for (const backend of backendsList.backends) { + const entry = [ + backend.name, + backend.codebase.repository, + backend.uri, + backend.createTime, + backend.updateTime, + ]; + table.push(entry); + } + logger.info(table.toString()); } catch (err: any) { throw new FirebaseError( `Unable to list backends present in project: ${projectId}. Please check the parameters you have provided.`, @@ -26,5 +38,5 @@ export const command = new Command("backends:list") ); } - return backends; + return backendsList; }); diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index ad9496e563b..57498373748 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -81,8 +81,8 @@ export interface Operation { // end oneof result } -export interface ListStacksResponse { - stacks: Stack[]; +export interface ListBackendsResponse { + backends: Stack[]; } /** @@ -120,9 +120,9 @@ export async function getBackend( /** * List all backends present in a project and region. */ -export async function listBackend(projectId: string, location: string): Promise { +export async function listBackend(projectId: string, location: string): Promise { const name = `projects/${projectId}/locations/${location}/backends`; - const res = await client.get(name); + const res = await client.get(name); return res.body; } From 5884f2b55ace3b1b691a9e8826f6158422bad626 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 16:24:28 +0000 Subject: [PATCH 10/16] Backends for project message --- src/commands/frameworks-stacks-list.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/commands/frameworks-stacks-list.ts b/src/commands/frameworks-stacks-list.ts index 866ad625f01..2baf824dbc3 100644 --- a/src/commands/frameworks-stacks-list.ts +++ b/src/commands/frameworks-stacks-list.ts @@ -4,6 +4,7 @@ import { needProjectId } from "../projectUtils"; import * as gcp from "../gcp/frameworks"; import { FirebaseError } from "../error"; import { logger } from "../logger"; +import { bold } from "colorette"; const Table = require("cli-table"); export const command = new Command("backends:list") @@ -30,6 +31,7 @@ export const command = new Command("backends:list") ]; table.push(entry); } + logger.info(`Backends for project ${bold(projectId)}`); logger.info(table.toString()); } catch (err: any) { throw new FirebaseError( From f264a595470f519b3d75c0ae5707ed9d8061da36 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 20:35:17 +0000 Subject: [PATCH 11/16] resolve merge conflicts --- ...meworks-stacks-get.ts => frameworks-backend-get.ts} | 0 ...works-stacks-list.ts => frameworks-backend-list.ts} | 0 src/commands/index.ts | 10 +++++----- 3 files changed, 5 insertions(+), 5 deletions(-) rename src/commands/{frameworks-stacks-get.ts => frameworks-backend-get.ts} (100%) rename src/commands/{frameworks-stacks-list.ts => frameworks-backend-list.ts} (100%) diff --git a/src/commands/frameworks-stacks-get.ts b/src/commands/frameworks-backend-get.ts similarity index 100% rename from src/commands/frameworks-stacks-get.ts rename to src/commands/frameworks-backend-get.ts diff --git a/src/commands/frameworks-stacks-list.ts b/src/commands/frameworks-backend-list.ts similarity index 100% rename from src/commands/frameworks-stacks-list.ts rename to src/commands/frameworks-backend-list.ts diff --git a/src/commands/index.ts b/src/commands/index.ts index cf22615a910..587e9d8251d 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -153,11 +153,11 @@ export function load(client: any): any { } if (experiments.isEnabled("internalframeworks")) { client.frameworks = {}; - client.frameworks.stacks = {}; - client.frameworks.stacks.list = loadCommand("frameworks-stacks-list"); - client.frameworks.stacks.create = loadCommand("frameworks-backends-create"); - client.frameworks.stacks.create = loadCommand("frameworks-stacks-get"); - client.frameworks.stacks.create = loadCommand("frameworks-backends-delete"); + client.frameworks.backends = {}; + client.frameworks.backends.list = loadCommand("frameworks-backends-list"); + client.frameworks.backends.create = loadCommand("frameworks-backends-create"); + client.frameworks.backends.create = loadCommand("frameworks-backends-get"); + client.frameworks.backends.create = loadCommand("frameworks-backends-delete"); } client.login = loadCommand("login"); client.login.add = loadCommand("login-add"); From d7ba0a5843385a93955978f90717e2e7ed73584c Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 19:13:03 +0000 Subject: [PATCH 12/16] removed linter errors --- src/gcp/frameworks.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index 57498373748..5c512676747 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -120,7 +120,10 @@ export async function getBackend( /** * List all backends present in a project and region. */ -export async function listBackend(projectId: string, location: string): Promise { +export async function listBackend( + projectId: string, + location: string +): Promise { const name = `projects/${projectId}/locations/${location}/backends`; const res = await client.get(name); From 28fb6e0286eb1bd67849c5731f833f9ef1af5320 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 19:26:15 +0000 Subject: [PATCH 13/16] changed table head color to green --- src/commands/frameworks-backend-get.ts | 2 +- src/commands/frameworks-backend-list.ts | 4 ++-- src/gcp/frameworks.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/commands/frameworks-backend-get.ts b/src/commands/frameworks-backend-get.ts index 4c6a25e166e..f7a79359a33 100644 --- a/src/commands/frameworks-backend-get.ts +++ b/src/commands/frameworks-backend-get.ts @@ -23,7 +23,7 @@ export const command = new Command("backends:get") backend = await gcp.getBackend(projectId, location, backendId); const table = new Table({ head: ["Backend Id", "Repository Name", "URL", "Location", "Created Date", "Updated Date"], - style: { head: ["yellow"] }, + style: { head: ["green"] }, }); table.push([ backend.name, diff --git a/src/commands/frameworks-backend-list.ts b/src/commands/frameworks-backend-list.ts index 2baf824dbc3..c5f72961888 100644 --- a/src/commands/frameworks-backend-list.ts +++ b/src/commands/frameworks-backend-list.ts @@ -15,12 +15,12 @@ export const command = new Command("backends:list") const location = options.location as string; const table = new Table({ head: ["Backend Id", "Repository Name", "URL", "Location", "Created Date", "Updated Date"], - style: { head: ["yellow"] }, + style: { head: ["green"] }, }); let backendsList; try { - backendsList = await gcp.listBackend(projectId, location); + backendsList = await gcp.listBackends(projectId, location); for (const backend of backendsList.backends) { const entry = [ backend.name, diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index 5c512676747..0b753f84dbe 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -120,7 +120,7 @@ export async function getBackend( /** * List all backends present in a project and region. */ -export async function listBackend( +export async function listBackends( projectId: string, location: string ): Promise { From 5a861a9793011268bc2ad2d39e9240639f66a344 Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 19:32:01 +0000 Subject: [PATCH 14/16] test method stack to backend --- src/test/init/frameworks/index.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/init/frameworks/index.spec.ts b/src/test/init/frameworks/index.spec.ts index e01197c3393..01096de69cd 100644 --- a/src/test/init/frameworks/index.spec.ts +++ b/src/test/init/frameworks/index.spec.ts @@ -20,10 +20,10 @@ describe("operationsConverter", () => { .stub(poller, "pollOperation") .throws("Unexpected pollOperation call"); createStackStub = sandbox.stub(gcp, "createStack").throws("Unexpected createStack call"); - getStackStub = sandbox.stub(gcp, "getBackend").throws("Unexpected getStack call"); + getStackStub = sandbox.stub(gcp, "getBackend").throws("Unexpected getBackend call"); linkGitHubRepositoryStub = sandbox .stub(repo, "linkGitHubRepository") - .throws("Unexpected getStack call"); + .throws("Unexpected getBackend call"); }); afterEach(() => { From 274ed432439093041af35e99876ced65982b870f Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Wed, 1 Nov 2023 21:18:52 +0000 Subject: [PATCH 15/16] Changed stack to backend (#6488) * Changed stack to backend * change stack to backend in index file * List stacks in table * Backends for project message * Changed file names * removed linter errors * change file names from stack to backend * changed table head color to green * test method stack to backend * changed file name --- .../{frameworks-backend-get.ts => frameworks-backends-get.ts} | 0 ...frameworks-backend-list.ts => frameworks-backends-list.ts} | 0 src/commands/index.ts | 4 ++-- 3 files changed, 2 insertions(+), 2 deletions(-) rename src/commands/{frameworks-backend-get.ts => frameworks-backends-get.ts} (100%) rename src/commands/{frameworks-backend-list.ts => frameworks-backends-list.ts} (100%) diff --git a/src/commands/frameworks-backend-get.ts b/src/commands/frameworks-backends-get.ts similarity index 100% rename from src/commands/frameworks-backend-get.ts rename to src/commands/frameworks-backends-get.ts diff --git a/src/commands/frameworks-backend-list.ts b/src/commands/frameworks-backends-list.ts similarity index 100% rename from src/commands/frameworks-backend-list.ts rename to src/commands/frameworks-backends-list.ts diff --git a/src/commands/index.ts b/src/commands/index.ts index 587e9d8251d..cdb65331cb0 100644 --- a/src/commands/index.ts +++ b/src/commands/index.ts @@ -156,8 +156,8 @@ export function load(client: any): any { client.frameworks.backends = {}; client.frameworks.backends.list = loadCommand("frameworks-backends-list"); client.frameworks.backends.create = loadCommand("frameworks-backends-create"); - client.frameworks.backends.create = loadCommand("frameworks-backends-get"); - client.frameworks.backends.create = loadCommand("frameworks-backends-delete"); + client.frameworks.backends.get = loadCommand("frameworks-backends-get"); + client.frameworks.backends.delete = loadCommand("frameworks-backends-delete"); } client.login = loadCommand("login"); client.login.add = loadCommand("login-add"); From 16e5a0c7f74f9a8d8f2ebf4864779921994f901f Mon Sep 17 00:00:00 2001 From: Sairam Sakhamuri Date: Mon, 6 Nov 2023 18:07:39 +0000 Subject: [PATCH 16/16] Change Stack objects to Backend (#6490) * Change Stack objects to Backend * formatted files --- src/gcp/frameworks.ts | 26 ++++----- src/init/features/frameworks/index.ts | 76 +++++++++++++++----------- src/init/features/frameworks/repo.ts | 2 +- src/test/init/frameworks/index.spec.ts | 68 +++++++++++------------ 4 files changed, 92 insertions(+), 80 deletions(-) diff --git a/src/gcp/frameworks.ts b/src/gcp/frameworks.ts index 0b753f84dbe..edc404150f1 100644 --- a/src/gcp/frameworks.ts +++ b/src/gcp/frameworks.ts @@ -16,8 +16,8 @@ interface Codebase { rootDirectory: string; } -/** A Stack, the primary resource of Frameworks. */ -export interface Stack { +/** A Backend, the primary resource of Frameworks. */ +export interface Backend { name: string; mode?: string; codebase: Codebase; @@ -27,7 +27,7 @@ export interface Stack { uri: string; } -export type StackOutputOnlyFields = "name" | "createTime" | "updateTime" | "uri"; +export type BackendOutputOnlyFields = "name" | "createTime" | "updateTime" | "uri"; export interface Build { name: string; @@ -82,21 +82,21 @@ export interface Operation { } export interface ListBackendsResponse { - backends: Stack[]; + backends: Backend[]; } /** - * Creates a new Stack in a given project and location. + * Creates a new Backend in a given project and location. */ -export async function createStack( +export async function createBackend( projectId: string, location: string, - stackReqBoby: Omit, + backendReqBoby: Omit, backendId: string ): Promise { - const res = await client.post, Operation>( + const res = await client.post, Operation>( `projects/${projectId}/locations/${location}/backends`, - stackReqBoby, + backendReqBoby, { queryParams: { backendId } } ); @@ -110,9 +110,9 @@ export async function getBackend( projectId: string, location: string, backendId: string -): Promise { +): Promise { const name = `projects/${projectId}/locations/${location}/backends/${backendId}`; - const res = await client.get(name); + const res = await client.get(name); return res.body; } @@ -150,12 +150,12 @@ export async function deleteBackend( export async function createBuild( projectId: string, location: string, - stackId: string, + backendId: string, buildInput: Omit ): Promise { const buildId = buildInput.name; const res = await client.post, Operation>( - `projects/${projectId}/locations/${location}/backends/${stackId}/builds`, + `projects/${projectId}/locations/${location}/backends/${backendId}/builds`, buildInput, { queryParams: { buildId } } ); diff --git a/src/init/features/frameworks/index.ts b/src/init/features/frameworks/index.ts index f92b7054290..c78df64d59a 100644 --- a/src/init/features/frameworks/index.ts +++ b/src/init/features/frameworks/index.ts @@ -9,7 +9,7 @@ import { ALLOWED_DEPLOY_METHODS, } from "./constants"; import * as repo from "./repo"; -import { Stack, StackOutputOnlyFields } from "../../../gcp/frameworks"; +import { Backend, BackendOutputOnlyFields } from "../../../gcp/frameworks"; import { Repository } from "../../../gcp/cloudbuild"; import * as poller from "../../../operation-poller"; import { frameworksOrigin } from "../../../api"; @@ -70,13 +70,13 @@ export async function doSetup(setup: any, projectId: string): Promise { setup.frameworks ); - const stack: Stack | undefined = await getOrCreateStack(projectId, setup); - if (stack) { - utils.logSuccess(`Successfully created a stack: ${stack.name}`); + const backend: Backend | undefined = await getOrCreateBackend(projectId, setup); + if (backend) { + utils.logSuccess(`Successfully created a backend: ${backend.name}`); } } -function toStack(cloudBuildConnRepo: Repository): Omit { +function toBackend(cloudBuildConnRepo: Repository): Omit { return { codebase: { repository: `${cloudBuildConnRepo.name}`, @@ -87,24 +87,32 @@ function toStack(cloudBuildConnRepo: Repository): Omit { +export async function getOrCreateBackend( + projectId: string, + setup: any +): Promise { const location: string = setup.frameworks.region; const deployMethod: string = setup.frameworks.deployMethod; try { - return await getExistingStack(projectId, setup, location); + return await getExistingBackend(projectId, setup, location); } catch (err: unknown) { if ((err as FirebaseError).status === 404) { - logger.info("Creating new stack."); + logger.info("Creating new backend."); if (deployMethod === "github") { const cloudBuildConnRepo = await repo.linkGitHubRepository(projectId, location); - const stackDetails = toStack(cloudBuildConnRepo); - return await createStack(projectId, location, stackDetails, setup.frameworks.serviceName); + const backendDetails = toBackend(cloudBuildConnRepo); + return await createBackend( + projectId, + location, + backendDetails, + setup.frameworks.serviceName + ); } } else { throw new FirebaseError( - `Failed to get or create a stack using the given initialization details: ${err}` + `Failed to get or create a backend using the given initialization details: ${err}` ); } } @@ -112,23 +120,27 @@ export async function getOrCreateStack(projectId: string, setup: any): Promise { - let stack = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); - while (stack) { +async function getExistingBackend( + projectId: string, + setup: any, + location: string +): Promise { + let backend = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); + while (backend) { setup.frameworks.serviceName = undefined; await promptOnce( { - name: "existingStack", + name: "existingBackend", type: "confirm", default: true, message: - "A stack already exists for the given serviceName, do you want to use existing stack? (yes/no)", + "A backend already exists for the given serviceName, do you want to use existing backend? (yes/no)", }, setup.frameworks ); - if (setup.frameworks.existingStack) { - logger.info("Using the existing stack."); - return stack; + if (setup.frameworks.existingBackend) { + logger.info("Using the existing backend."); + return backend; } await promptOnce( { @@ -139,28 +151,28 @@ async function getExistingStack(projectId: string, setup: any, location: string) }, setup.frameworks ); - stack = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); - setup.frameworks.existingStack = undefined; + backend = await gcp.getBackend(projectId, location, setup.frameworks.serviceName); + setup.frameworks.existingBackend = undefined; } - return stack; + return backend; } /** - * Creates Stack object from long running operations. + * Creates backend object from long running operations. */ -export async function createStack( +export async function createBackend( projectId: string, location: string, - stackReqBoby: Omit, - stackId: string -): Promise { - const op = await gcp.createStack(projectId, location, stackReqBoby, stackId); - const stack = await poller.pollOperation({ + backendReqBoby: Omit, + backendId: string +): Promise { + const op = await gcp.createBackend(projectId, location, backendReqBoby, backendId); + const backend = await poller.pollOperation({ ...frameworksPollerOptions, - pollerName: `create-${projectId}-${location}-${stackId}`, + pollerName: `create-${projectId}-${location}-${backendId}`, operationResourceName: op.name, }); - return stack; + return backend; } diff --git a/src/init/features/frameworks/repo.ts b/src/init/features/frameworks/repo.ts index 1cbe8169f7a..425ef154835 100644 --- a/src/init/features/frameworks/repo.ts +++ b/src/init/features/frameworks/repo.ts @@ -45,7 +45,7 @@ function generateConnectionId(location: string): string { } /** - * Prompts the user to link their stack to a GitHub repository. + * Prompts the user to link their backend to a GitHub repository. */ export async function linkGitHubRepository( projectId: string, diff --git a/src/test/init/frameworks/index.spec.ts b/src/test/init/frameworks/index.spec.ts index 01096de69cd..b6f758988b8 100644 --- a/src/test/init/frameworks/index.spec.ts +++ b/src/test/init/frameworks/index.spec.ts @@ -4,23 +4,23 @@ import { expect } from "chai"; import * as gcp from "../../../gcp/frameworks"; import * as repo from "../../../init/features/frameworks/repo"; import * as poller from "../../../operation-poller"; -import { createStack, getOrCreateStack } from "../../../init/features/frameworks/index"; +import { createBackend, getOrCreateBackend } from "../../../init/features/frameworks/index"; import { FirebaseError } from "../../../error"; describe("operationsConverter", () => { const sandbox: sinon.SinonSandbox = sinon.createSandbox(); let pollOperationStub: sinon.SinonStub; - let createStackStub: sinon.SinonStub; - let getStackStub: sinon.SinonStub; + let createBackendStub: sinon.SinonStub; + let getBackendStub: sinon.SinonStub; let linkGitHubRepositoryStub: sinon.SinonStub; beforeEach(() => { pollOperationStub = sandbox .stub(poller, "pollOperation") .throws("Unexpected pollOperation call"); - createStackStub = sandbox.stub(gcp, "createStack").throws("Unexpected createStack call"); - getStackStub = sandbox.stub(gcp, "getBackend").throws("Unexpected getBackend call"); + createBackendStub = sandbox.stub(gcp, "createBackend").throws("Unexpected createBackend call"); + getBackendStub = sandbox.stub(gcp, "getBackend").throws("Unexpected getBackend call"); linkGitHubRepositoryStub = sandbox .stub(repo, "linkGitHubRepository") .throws("Unexpected getBackend call"); @@ -30,16 +30,16 @@ describe("operationsConverter", () => { sandbox.verifyAndRestore(); }); - describe("createStack", () => { + describe("createBackend", () => { const projectId = "projectId"; const location = "us-central1"; - const stackId = "stackId"; + const backendId = "backendId"; const op = { - name: `projects/${projectId}/locations/${location}/stacks/${stackId}`, + name: `projects/${projectId}/locations/${location}/backends/${backendId}`, done: true, }; - const completeStack = { - name: `projects/${projectId}/locations/${location}/stacks/${stackId}`, + const completeBackend = { + name: `projects/${projectId}/locations/${location}/backends/${backendId}`, labels: {}, createTime: "0", updateTime: "1", @@ -48,8 +48,8 @@ describe("operationsConverter", () => { const setup = { frameworks: { region: location, - serviceName: stackId, - existingStack: true, + serviceName: backendId, + existingBackend: true, deployMethod: "github", }, }; @@ -59,46 +59,46 @@ describe("operationsConverter", () => { createTime: "0", updateTime: "1", }; - const stackInput = { + const backendInput = { codebase: { repository: cloudBuildConnRepo.name, rootDirectory: "/", }, labels: {}, }; - it("should createStack", async () => { - createStackStub.resolves(op); - pollOperationStub.resolves(completeStack); + it("should createBackend", async () => { + createBackendStub.resolves(op); + pollOperationStub.resolves(completeBackend); - await createStack(projectId, location, stackInput, stackId); + await createBackend(projectId, location, backendInput, backendId); - expect(createStackStub).to.be.calledWith(projectId, location, stackInput); + expect(createBackendStub).to.be.calledWith(projectId, location, backendInput); }); - it("should return a stack, if user wants use the exiting stack", async () => { - getStackStub.resolves(completeStack); + it("should return a backend, if user wants use the exiting backend", async () => { + getBackendStub.resolves(completeBackend); - const result = await getOrCreateStack("projectId", setup); + const result = await getOrCreateBackend("projectId", setup); - expect(result).to.deep.equal(completeStack); - expect(getStackStub.calledOnceWithExactly(projectId, location, stackId)).to.be.true; + expect(result).to.deep.equal(completeBackend); + expect(getBackendStub.calledOnceWithExactly(projectId, location, backendId)).to.be.true; }); - it("should create a new stack, if stack doesn't exist", async () => { - const newStackId = "newStackId"; - const newPath = `projects/${projectId}/locations/${location}/stacks/${newStackId}`; - setup.frameworks.serviceName = newStackId; + it("should create a new backend, if backend doesn't exist", async () => { + const newBackendId = "newBackendId"; + const newPath = `projects/${projectId}/locations/${location}/backends/${newBackendId}`; + setup.frameworks.serviceName = newBackendId; op.name = newPath; - completeStack.name = newPath; - getStackStub.throws(new FirebaseError("error", { status: 404 })); + completeBackend.name = newPath; + getBackendStub.throws(new FirebaseError("error", { status: 404 })); linkGitHubRepositoryStub.resolves(cloudBuildConnRepo); - createStackStub.resolves(op); - pollOperationStub.resolves(completeStack); + createBackendStub.resolves(op); + pollOperationStub.resolves(completeBackend); - const result = await getOrCreateStack(projectId, setup); + const result = await getOrCreateBackend(projectId, setup); - expect(result).to.deep.equal(completeStack); - expect(createStackStub).to.be.calledWith(projectId, location, stackInput); + expect(result).to.deep.equal(completeBackend); + expect(createBackendStub).to.be.calledWith(projectId, location, backendInput); }); }); });