diff --git a/.changeset/sweet-pigs-pump.md b/.changeset/sweet-pigs-pump.md new file mode 100644 index 0000000000..9e88e65dbc --- /dev/null +++ b/.changeset/sweet-pigs-pump.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-app-api': patch +'@backstage/frontend-defaults': patch +--- + +The default config loader no longer requires `process.env.APP_CONFIG` to be set, allowing config to be read from other sources instead. diff --git a/packages/core-app-api/src/app/defaultConfigLoader.test.tsx b/packages/core-app-api/src/app/defaultConfigLoader.test.tsx index 44d93aa625..556e4c928e 100644 --- a/packages/core-app-api/src/app/defaultConfigLoader.test.tsx +++ b/packages/core-app-api/src/app/defaultConfigLoader.test.tsx @@ -29,6 +29,10 @@ describe('defaultConfigLoaderSync', () => { delete anyWindow.__APP_CONFIG__; }); + it('loads nothing is config is missing', () => { + expect(defaultConfigLoaderSync()).toEqual([]); + }); + it('loads static config', () => { anyEnv.APP_CONFIG = [ { data: { my: 'config' }, context: 'a' }, @@ -95,12 +99,6 @@ describe('defaultConfigLoaderSync', () => { expect(ConfigReader.fromConfigs(configs).get('my')).toBe('override-config'); }); - it('fails to load invalid missing config', () => { - expect(() => defaultConfigLoaderSync()).toThrow( - 'No static configuration provided', - ); - }); - it('fails to load invalid static config', () => { anyEnv.APP_CONFIG = { my: 'invalid-config' }; expect(() => defaultConfigLoaderSync()).toThrow( diff --git a/packages/core-app-api/src/app/defaultConfigLoader.ts b/packages/core-app-api/src/app/defaultConfigLoader.ts index bfcef390ec..0a65112041 100644 --- a/packages/core-app-api/src/app/defaultConfigLoader.ts +++ b/packages/core-app-api/src/app/defaultConfigLoader.ts @@ -40,14 +40,15 @@ export function defaultConfigLoaderSync( // It's a param so we can test it, but at runtime this will always fall back to default. runtimeConfigJson: string = '__APP_INJECTED_RUNTIME_CONFIG__', ) { - const appConfig = process.env.APP_CONFIG; - if (!appConfig) { - throw new Error('No static configuration provided'); + const configs = new Array(); + + const staticConfig = process.env.APP_CONFIG; + if (staticConfig) { + if (!Array.isArray(staticConfig)) { + throw new Error('Static configuration has invalid format'); + } + configs.push(...staticConfig); } - if (!Array.isArray(appConfig)) { - throw new Error('Static configuration has invalid format'); - } - const configs = appConfig.slice() as unknown as AppConfig[]; // Check if we have any config script tags, otherwise fall back to injected config const configScripts = document.querySelectorAll(