From 4b572126f165f0bc4bdaa6b886f47dc00c26cc9a Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Tue, 13 Dec 2022 15:17:25 +0100 Subject: [PATCH 1/4] cli: Enable cache for production build using experimental env var Signed-off-by: Marcus Eide --- .changeset/fluffy-fans-sing.md | 5 +++++ packages/cli/src/lib/bundler/bundle.ts | 7 +++---- packages/cli/src/lib/bundler/config.ts | 12 ++++++++++++ 3 files changed, 20 insertions(+), 4 deletions(-) create mode 100644 .changeset/fluffy-fans-sing.md diff --git a/.changeset/fluffy-fans-sing.md b/.changeset/fluffy-fans-sing.md new file mode 100644 index 0000000000..fd875ee00d --- /dev/null +++ b/.changeset/fluffy-fans-sing.md @@ -0,0 +1,5 @@ +--- +'@backstage/cli': patch +--- + +Add experimental environment variable to enable caching for production builds. diff --git a/packages/cli/src/lib/bundler/bundle.ts b/packages/cli/src/lib/bundler/bundle.ts index 2f23d5cae6..a8967bb250 100644 --- a/packages/cli/src/lib/bundler/bundle.ts +++ b/packages/cli/src/lib/bundler/bundle.ts @@ -42,7 +42,6 @@ export async function buildBundle(options: BuildOptions) { isDev: false, baseUrl: resolveBaseUrl(options.frontendConfig), }); - const compiler = webpack(config); const isCi = yn(process.env.CI, { default: false }); @@ -64,7 +63,7 @@ export async function buildBundle(options: BuildOptions) { ); } - const { stats } = await build(compiler, isCi).catch(error => { + const { stats } = await build(config, isCi).catch(error => { console.log(chalk.red('Failed to compile.\n')); throw new Error(`Failed to compile.\n${error.message || error}`); }); @@ -90,10 +89,10 @@ export async function buildBundle(options: BuildOptions) { ); } -async function build(compiler: webpack.Compiler, isCi: boolean) { +async function build(config: webpack.Configuration, isCi: boolean) { const stats = await new Promise( (resolve, reject) => { - compiler.run((err, buildStats) => { + webpack(config, (err, buildStats) => { if (err) { if (err.message) { const { errors } = formatWebpackMessages({ diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index 1974153f02..ed09cb37ee 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -36,6 +36,8 @@ import { runPlain } from '../run'; import ESLintPlugin from 'eslint-webpack-plugin'; import pickBy from 'lodash/pickBy'; +const BUILD_CACHE_ENV_VAR = 'BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE'; + export function resolveBaseUrl(config: Config): URL { const baseUrl = config.getString('app.baseUrl'); try { @@ -206,6 +208,16 @@ export async function createConfig( : {}), }, plugins, + ...(process.env[BUILD_CACHE_ENV_VAR] + ? { + cache: { + type: 'filesystem', + buildDependencies: { + config: [__filename], + }, + }, + } + : {}), }; } From c54ff49fee11f61c352d44de6cf8af1d1c5d5f33 Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Tue, 13 Dec 2022 16:26:01 +0100 Subject: [PATCH 2/4] cli: Use yn to parse env for build cache Signed-off-by: Marcus Eide --- packages/cli/src/lib/bundler/config.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index ed09cb37ee..ce216f5c59 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -35,6 +35,7 @@ import { paths as cliPaths } from '../../lib/paths'; import { runPlain } from '../run'; import ESLintPlugin from 'eslint-webpack-plugin'; import pickBy from 'lodash/pickBy'; +import yn from 'yn'; const BUILD_CACHE_ENV_VAR = 'BACKSTAGE_CLI_EXPERIMENTAL_BUILD_CACHE'; @@ -148,6 +149,8 @@ export async function createConfig( require.resolve('react-refresh'), ]; + const withCache = yn(process.env[BUILD_CACHE_ENV_VAR], { default: false }); + return { mode: isDev ? 'development' : 'production', profile: false, @@ -208,7 +211,7 @@ export async function createConfig( : {}), }, plugins, - ...(process.env[BUILD_CACHE_ENV_VAR] + ...(withCache ? { cache: { type: 'filesystem', From 870882741c21e0ae2957513f6085a7c362da3cad Mon Sep 17 00:00:00 2001 From: Marcus Eide Date: Wed, 21 Dec 2022 13:22:07 +0100 Subject: [PATCH 3/4] cli: include entire cli folder for cache invalidation Signed-off-by: Marcus Eide --- packages/cli/src/lib/bundler/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index ce216f5c59..e60fb0a1e2 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -216,7 +216,7 @@ export async function createConfig( cache: { type: 'filesystem', buildDependencies: { - config: [__filename], + config: [`${cliPaths.ownDir}/`], }, }, } From 25423150a25a34beeef2b17ab1134fe95701c0e6 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Wed, 28 Dec 2022 10:59:00 +0100 Subject: [PATCH 4/4] Revert "cli: include entire cli folder for cache invalidation" This reverts commit 870882741c21e0ae2957513f6085a7c362da3cad. Signed-off-by: Patrik Oldsberg --- packages/cli/src/lib/bundler/config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/cli/src/lib/bundler/config.ts b/packages/cli/src/lib/bundler/config.ts index e60fb0a1e2..ce216f5c59 100644 --- a/packages/cli/src/lib/bundler/config.ts +++ b/packages/cli/src/lib/bundler/config.ts @@ -216,7 +216,7 @@ export async function createConfig( cache: { type: 'filesystem', buildDependencies: { - config: [`${cliPaths.ownDir}/`], + config: [__filename], }, }, }