From 7077dbf1317bdf2c7e385f00bf7ae954ae6c41cb Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 23 Sep 2023 17:00:31 +0200 Subject: [PATCH 1/3] cli: make next backend start the default Signed-off-by: Patrik Oldsberg --- .changeset/itchy-rabbits-exist.md | 7 +++++++ .github/vale/Vocab/Backstage/accept.txt | 1 + packages/backend-next/package.json | 2 +- packages/cli/src/commands/start/startBackend.ts | 2 +- 4 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 .changeset/itchy-rabbits-exist.md diff --git a/.changeset/itchy-rabbits-exist.md b/.changeset/itchy-rabbits-exist.md new file mode 100644 index 0000000000..acac771a97 --- /dev/null +++ b/.changeset/itchy-rabbits-exist.md @@ -0,0 +1,7 @@ +--- +'@backstage/cli': minor +--- + +The new backend start command that used to be enabled by setting `EXPERIMENTAL_BACKEND_START` is now the default. To revert to the old behavior, set `LEGACY_BACKEND_START` instead. + +This new command is no longer based on Webpack, but instead uses Node.js loaders to transpile on the fly. Rather than hot reloading modules the entire backend is now restarted on change, but the SQLite database state is still maintained across restarts via a parent process. diff --git a/.github/vale/Vocab/Backstage/accept.txt b/.github/vale/Vocab/Backstage/accept.txt index 4e3ef18a65..aadbaa3985 100644 --- a/.github/vale/Vocab/Backstage/accept.txt +++ b/.github/vale/Vocab/Backstage/accept.txt @@ -401,6 +401,7 @@ tooltip tooltips touchpoint transpilation +transpile transpiled transpiler transpilers diff --git a/packages/backend-next/package.json b/packages/backend-next/package.json index 1ac1be2681..3a2c337013 100644 --- a/packages/backend-next/package.json +++ b/packages/backend-next/package.json @@ -18,7 +18,7 @@ "backstage" ], "scripts": { - "start": "EXPERIMENTAL_BACKEND_START=1 backstage-cli package start", + "start": "backstage-cli package start", "build": "backstage-cli package build", "lint": "backstage-cli package lint", "test": "backstage-cli package test", diff --git a/packages/cli/src/commands/start/startBackend.ts b/packages/cli/src/commands/start/startBackend.ts index 622eeb9d1b..967a1108a0 100644 --- a/packages/cli/src/commands/start/startBackend.ts +++ b/packages/cli/src/commands/start/startBackend.ts @@ -36,7 +36,7 @@ export async function startBackend(options: StartBackendOptions) { }); await waitForExit(); - } else if (process.env.EXPERIMENTAL_BACKEND_START) { + } else if (!process.env.LEGACY_BACKEND_START) { const waitForExit = await startBackendExperimental({ entry: 'src/index', checksEnabled: false, // not supported From 1c3d6fa2b24b6acab574be8a39a7270db41ea6d5 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Sat, 23 Sep 2023 17:04:27 +0200 Subject: [PATCH 2/3] backend-common: deprecate hot reload helpers Signed-off-by: Patrik Oldsberg --- .changeset/wet-timers-chew.md | 5 +++++ packages/backend-common/api-report.md | 4 ++-- packages/backend-common/src/hot.ts | 2 ++ 3 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 .changeset/wet-timers-chew.md diff --git a/.changeset/wet-timers-chew.md b/.changeset/wet-timers-chew.md new file mode 100644 index 0000000000..3be6368331 --- /dev/null +++ b/.changeset/wet-timers-chew.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-common': patch +--- + +The `useHotCleanup` and `useHotMemoize` helpers are now deprecated, since hot module reloads for backend are being phased out. diff --git a/packages/backend-common/api-report.md b/packages/backend-common/api-report.md index f0fa15efb0..ab640ccd9b 100644 --- a/packages/backend-common/api-report.md +++ b/packages/backend-common/api-report.md @@ -785,12 +785,12 @@ export type UrlReadersOptions = { factories?: ReaderFactory[]; }; -// @public +// @public @deprecated export function useHotCleanup( _module: NodeModule, cancelEffect: () => void, ): void; -// @public +// @public @deprecated export function useHotMemoize(_module: NodeModule, valueFactory: () => T): T; ``` diff --git a/packages/backend-common/src/hot.ts b/packages/backend-common/src/hot.ts index 7148778b8c..94ebf52307 100644 --- a/packages/backend-common/src/hot.ts +++ b/packages/backend-common/src/hot.ts @@ -47,6 +47,7 @@ function findAllAncestors(_module: NodeModule): NodeModule[] { * Useful for cleaning intervals, timers, requests etc * * @public + * @deprecated Hot module reloading is no longer supported for backends. * @example * ```ts * const intervalId = setInterval(doStuff, 1000); @@ -80,6 +81,7 @@ const CURRENT_HOT_MEMOIZE_INDEX_KEY = 'backstage.io/hmr-memoize-key'; * stateful parts of the backend, e.g. to retain a database. * * @public + * @deprecated Hot module reloading is no longer supported for backends. * @example * ```ts * const db = useHotMemoize(module, () => createDB(dbParams)); From cbab1d1da8a7bf7b13c3015a2e7668f611a9742b Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 26 Sep 2023 11:59:17 +0200 Subject: [PATCH 3/3] e2e-test: ignore ESM Loader warning Signed-off-by: Patrik Oldsberg --- packages/e2e-test/src/commands/run.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/e2e-test/src/commands/run.ts b/packages/e2e-test/src/commands/run.ts index ba2d81d568..cf95f6856d 100644 --- a/packages/e2e-test/src/commands/run.ts +++ b/packages/e2e-test/src/commands/run.ts @@ -463,6 +463,10 @@ async function testBackendStart(appDir: string, ...args: string[]) { !l.includes('check the migration guide at https://a.co/7PzMCcy') && !l.includes( '(Use `node --trace-warnings ...` to show where the warning was created)', + ) && + !l.includes('Custom ESM Loaders is an experimental feature') && + !l.includes( + 'ExperimentalWarning: `globalPreload` is planned for removal', ), ).length !== 0 );