cli: remove usage of deprecated functionality from @backstage/config-loader

Co-authored-by: Patrik Oldsberg <poldsberg@gmail.com>
Signed-off-by: MT Lewis <mtlewis@users.noreply.github.com>
This commit is contained in:
MT Lewis
2024-07-22 11:06:42 +01:00
parent 9d661bb380
commit 239dffc970
2 changed files with 51 additions and 30 deletions
+5
View File
@@ -0,0 +1,5 @@
---
'@backstage/cli': patch
---
Remove usage of deprecated functionality from @backstage/config-loader
+46 -30
View File
@@ -14,14 +14,9 @@
* limitations under the License.
*/
import {
ConfigTarget,
loadConfig,
loadConfigSchema,
} from '@backstage/config-loader';
import { ConfigSources, loadConfigSchema } from '@backstage/config-loader';
import { AppConfig, ConfigReader } from '@backstage/config';
import { paths } from './paths';
import { isValidUrl } from './urls';
import { getPackages } from '@manypkg/get-packages';
import { PackageGraph } from '@backstage/cli-node';
@@ -37,13 +32,6 @@ type Options = {
};
export async function loadCliConfig(options: Options) {
const configTargets: ConfigTarget[] = [];
options.args.forEach(arg => {
if (!isValidUrl(arg)) {
configTargets.push({ path: paths.resolveTarget(arg) });
}
});
// Consider all packages in the monorepo when loading in config
const { packages } = await getPackages(paths.targetDir);
@@ -75,25 +63,53 @@ export async function loadCliConfig(options: Options) {
noUndeclaredProperties: options.strict,
});
const { appConfigs } = await loadConfig({
experimentalEnvFunc: options.mockEnv
const source = ConfigSources.default({
allowMissingDefaultConfig: true,
substitutionFunc: options.mockEnv
? async name => process.env[name] || 'x'
: undefined,
configRoot: paths.targetRoot,
configTargets: configTargets,
watch: options.watch && {
onChange(newAppConfigs) {
const newFrontendAppConfigs = schema.process(newAppConfigs, {
visibility: options.fullVisibility
? ['frontend', 'backend', 'secret']
: ['frontend'],
withFilteredKeys: options.withFilteredKeys,
withDeprecatedKeys: options.withDeprecatedKeys,
ignoreSchemaErrors: !options.strict,
});
options.watch?.(newFrontendAppConfigs);
},
},
watch: Boolean(options.watch),
rootDir: paths.targetRoot,
argv: options.args,
});
const appConfigs = await new Promise<AppConfig[]>((resolve, reject) => {
async function loadConfigReaderLoop() {
let loaded = false;
try {
const abortController = new AbortController();
for await (const { configs } of source.readConfigData({
signal: abortController.signal,
})) {
if (loaded) {
const newFrontendAppConfigs = schema.process(configs, {
visibility: options.fullVisibility
? ['frontend', 'backend', 'secret']
: ['frontend'],
withFilteredKeys: options.withFilteredKeys,
withDeprecatedKeys: options.withDeprecatedKeys,
ignoreSchemaErrors: !options.strict,
});
options.watch?.(newFrontendAppConfigs);
} else {
resolve(configs);
loaded = true;
if (!options.watch) {
abortController.abort();
}
}
}
} catch (error) {
if (loaded) {
console.error(`Failed to reload configuration, ${error}`);
} else {
reject(error);
}
}
}
loadConfigReaderLoop();
});
const configurationLoadedMessage = appConfigs.length