renovate 42.87.0 → 42.88.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -44,21 +44,30 @@ async function validate(configType, desc, config, strict, isPreset = false) {
44
44
  .description(`Validate your Renovate configuration (repo config, shared presets or global configuration) files\n` +
45
45
  'If no [config-files...] are given, renovate-config-validator will look at the default config file locations (https://docs.renovatebot.com/configuration-options/)')
46
46
  .addHelpText('after', `
47
+ When specifying [config-files...], Renovate will treat them as global self-hosted configuration files. You can disable this behaviour with --no-global
48
+
47
49
  Examples:
48
50
 
49
51
  $ renovate-config-validator
50
52
  $ renovate-config-validator --strict
51
53
  $ renovate-config-validator first_config.json
52
54
  $ renovate-config-validator --strict config.js
55
+ $ renovate-config-validator --no-global renovate.json5
53
56
  $ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator`)
54
57
  .argument('[config-files...]')
55
58
  .version(expose_cjs_1.pkg.version, '-v, --version')
56
59
  .option('--strict', 'Fail command if any configuration warnings, errors, or a migration is needed')
60
+ .option('--no-global', 'When specifying [config-files], do not treat them as global self-hosted configuration file(s)', true)
57
61
  // allow us to manage the exit code
58
62
  .exitOverride();
59
63
  program.action(async (files, opts) => {
60
64
  const strict = opts.strict ?? false;
61
65
  if (files.length) {
66
+ let isGlobalConfig = true;
67
+ if (opts.global === false) {
68
+ isGlobalConfig = false;
69
+ }
70
+ const configType = isGlobalConfig ? 'global' : 'repo';
62
71
  for (const file of files) {
63
72
  try {
64
73
  if (!(await (0, fs_extra_1.pathExists)(file))) {
@@ -68,8 +77,8 @@ Examples:
68
77
  }
69
78
  const parsedContent = await (0, util_1.getParsedContent)(file);
70
79
  try {
71
- logger_1.logger.info(`Validating ${file}`);
72
- await validate('global', file, parsedContent, strict);
80
+ logger_1.logger.info(`Validating ${file} as ${configType} config`);
81
+ await validate(configType, file, parsedContent, strict);
73
82
  }
74
83
  catch (err) {
75
84
  logger_1.logger.warn({ file, err }, 'File is not valid Renovate config');
@@ -1 +1 @@
1
- {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../lib/config-validator.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { Command, CommanderError } from 'commander';\nimport 'source-map-support/register';\nimport './punycode.cjs';\nimport { dequal } from 'dequal';\nimport { pathExists, readFile } from 'fs-extra';\nimport { getConfigFileNames } from './config/app-strings';\nimport { massageConfig } from './config/massage';\nimport { migrateConfig } from './config/migration';\nimport type { RenovateConfig } from './config/types';\nimport { validateConfig } from './config/validation';\nimport { pkg } from './expose.cjs';\nimport { logger } from './logger';\nimport { getEnv } from './util/env';\nimport { getConfig as getFileConfig } from './workers/global/config/parse/file';\nimport { getParsedContent } from './workers/global/config/parse/util';\n\nlet returnVal = 0;\n\nasync function validate(\n configType: 'global' | 'repo',\n desc: string,\n config: RenovateConfig,\n strict: boolean,\n isPreset = false,\n): Promise<void> {\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n {\n oldConfig: config,\n newConfig: migratedConfig,\n },\n 'Config migration necessary',\n );\n if (strict) {\n returnVal = 1;\n }\n }\n const massagedConfig = massageConfig(migratedConfig);\n const res = await validateConfig(configType, massagedConfig, isPreset);\n if (res.errors.length) {\n logger.error(\n { file: desc, errors: res.errors },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n if (res.warnings.length) {\n logger.warn(\n { file: desc, warnings: res.warnings },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n}\n\ninterface PackageJson {\n renovate?: RenovateConfig;\n 'renovate-config'?: Record<string, RenovateConfig>;\n}\n\n(async () => {\n const program = new Command('renovate-config-validator')\n .summary('Validate Renovate configuration files')\n .description(\n `Validate your Renovate configuration (repo config, shared presets or global configuration) files\\n` +\n 'If no [config-files...] are given, renovate-config-validator will look at the default config file locations (https://docs.renovatebot.com/configuration-options/)',\n )\n .addHelpText(\n 'after',\n `\nExamples:\n\n $ renovate-config-validator\n $ renovate-config-validator --strict\n $ renovate-config-validator first_config.json\n $ renovate-config-validator --strict config.js\n $ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator`,\n )\n .argument('[config-files...]')\n .version(pkg.version, '-v, --version')\n .option(\n '--strict',\n 'Fail command if any configuration warnings, errors, or a migration is needed',\n )\n // allow us to manage the exit code\n .exitOverride();\n\n program.action(async (files, opts) => {\n const strict = opts.strict ?? false;\n\n if (files.length) {\n for (const file of files) {\n try {\n if (!(await pathExists(file))) {\n returnVal = 1;\n logger.error({ file }, 'File does not exist');\n break;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file}`);\n await validate('global', file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n }\n } else {\n for (const file of getConfigFileNames().filter(\n (name) => name !== 'package.json',\n )) {\n try {\n if (!(await pathExists(file))) {\n continue;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file}`);\n await validate('repo', file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n }\n try {\n const pkgJson = JSON.parse(\n await readFile('package.json', 'utf8'),\n ) as PackageJson;\n if (pkgJson.renovate) {\n logger.info(`Validating package.json > renovate`);\n await validate(\n 'repo',\n 'package.json > renovate',\n pkgJson.renovate,\n strict,\n );\n }\n if (pkgJson['renovate-config']) {\n logger.info(`Validating package.json > renovate-config`);\n for (const presetConfig of Object.values(\n pkgJson['renovate-config'],\n )) {\n await validate(\n 'repo',\n 'package.json > renovate-config',\n presetConfig,\n strict,\n true,\n );\n }\n }\n } catch {\n // ignore\n }\n try {\n const env = getEnv();\n const fileConfig = await getFileConfig(env);\n if (!dequal(fileConfig, {})) {\n const file = env.RENOVATE_CONFIG_FILE ?? 'config.js';\n logger.info(`Validating ${file}`);\n try {\n await validate('global', file, fileConfig, strict);\n } catch (err) {\n logger.error({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n }\n } catch {\n // ignore\n }\n }\n if (returnVal !== 0) {\n process.exit(returnVal);\n }\n logger.info('Config validated successfully');\n });\n\n await program.parseAsync();\n})().catch((e) => {\n if (e instanceof CommanderError) {\n // Commander throws an error at the end of Action execution i.e. as part of the `help` command, and so we don't want to return an error code in this case\n if (e.code === 'commander.helpDisplayed') {\n return;\n }\n }\n\n // oxlint-disable-next-line no-console -- intentional: display critical error on CLI\n console.error(e);\n process.exit(99);\n});\n"]}
1
+ {"version":3,"file":"config-validator.js","sourceRoot":"","sources":["../lib/config-validator.ts"],"names":[],"mappings":"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","sourcesContent":["#!/usr/bin/env node\nimport { Command, CommanderError } from 'commander';\nimport 'source-map-support/register';\nimport './punycode.cjs';\nimport { dequal } from 'dequal';\nimport { pathExists, readFile } from 'fs-extra';\nimport { getConfigFileNames } from './config/app-strings';\nimport { massageConfig } from './config/massage';\nimport { migrateConfig } from './config/migration';\nimport type { RenovateConfig } from './config/types';\nimport { validateConfig } from './config/validation';\nimport { pkg } from './expose.cjs';\nimport { logger } from './logger';\nimport { getEnv } from './util/env';\nimport { getConfig as getFileConfig } from './workers/global/config/parse/file';\nimport { getParsedContent } from './workers/global/config/parse/util';\n\nlet returnVal = 0;\n\nasync function validate(\n configType: 'global' | 'repo',\n desc: string,\n config: RenovateConfig,\n strict: boolean,\n isPreset = false,\n): Promise<void> {\n const { isMigrated, migratedConfig } = migrateConfig(config);\n if (isMigrated) {\n logger.warn(\n {\n oldConfig: config,\n newConfig: migratedConfig,\n },\n 'Config migration necessary',\n );\n if (strict) {\n returnVal = 1;\n }\n }\n const massagedConfig = massageConfig(migratedConfig);\n const res = await validateConfig(configType, massagedConfig, isPreset);\n if (res.errors.length) {\n logger.error(\n { file: desc, errors: res.errors },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n if (res.warnings.length) {\n logger.warn(\n { file: desc, warnings: res.warnings },\n 'Found errors in configuration',\n );\n returnVal = 1;\n }\n}\n\ninterface PackageJson {\n renovate?: RenovateConfig;\n 'renovate-config'?: Record<string, RenovateConfig>;\n}\n\n(async () => {\n const program = new Command('renovate-config-validator')\n .summary('Validate Renovate configuration files')\n .description(\n `Validate your Renovate configuration (repo config, shared presets or global configuration) files\\n` +\n 'If no [config-files...] are given, renovate-config-validator will look at the default config file locations (https://docs.renovatebot.com/configuration-options/)',\n )\n .addHelpText(\n 'after',\n `\nWhen specifying [config-files...], Renovate will treat them as global self-hosted configuration files. You can disable this behaviour with --no-global\n\nExamples:\n\n $ renovate-config-validator\n $ renovate-config-validator --strict\n $ renovate-config-validator first_config.json\n $ renovate-config-validator --strict config.js\n $ renovate-config-validator --no-global renovate.json5\n $ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator`,\n )\n .argument('[config-files...]')\n .version(pkg.version, '-v, --version')\n .option(\n '--strict',\n 'Fail command if any configuration warnings, errors, or a migration is needed',\n )\n .option(\n '--no-global',\n 'When specifying [config-files], do not treat them as global self-hosted configuration file(s)',\n true,\n )\n // allow us to manage the exit code\n .exitOverride();\n\n program.action(async (files, opts) => {\n const strict = opts.strict ?? false;\n\n if (files.length) {\n let isGlobalConfig = true;\n if (opts.global === false) {\n isGlobalConfig = false;\n }\n const configType = isGlobalConfig ? 'global' : 'repo';\n for (const file of files) {\n try {\n if (!(await pathExists(file))) {\n returnVal = 1;\n logger.error({ file }, 'File does not exist');\n break;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file} as ${configType} config`);\n await validate(configType, file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n }\n } else {\n for (const file of getConfigFileNames().filter(\n (name) => name !== 'package.json',\n )) {\n try {\n if (!(await pathExists(file))) {\n continue;\n }\n const parsedContent = await getParsedContent(file);\n try {\n logger.info(`Validating ${file}`);\n await validate('repo', file, parsedContent, strict);\n } catch (err) {\n logger.warn({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n } catch (err) {\n logger.warn({ file, err }, 'File could not be parsed');\n returnVal = 1;\n }\n }\n try {\n const pkgJson = JSON.parse(\n await readFile('package.json', 'utf8'),\n ) as PackageJson;\n if (pkgJson.renovate) {\n logger.info(`Validating package.json > renovate`);\n await validate(\n 'repo',\n 'package.json > renovate',\n pkgJson.renovate,\n strict,\n );\n }\n if (pkgJson['renovate-config']) {\n logger.info(`Validating package.json > renovate-config`);\n for (const presetConfig of Object.values(\n pkgJson['renovate-config'],\n )) {\n await validate(\n 'repo',\n 'package.json > renovate-config',\n presetConfig,\n strict,\n true,\n );\n }\n }\n } catch {\n // ignore\n }\n try {\n const env = getEnv();\n const fileConfig = await getFileConfig(env);\n if (!dequal(fileConfig, {})) {\n const file = env.RENOVATE_CONFIG_FILE ?? 'config.js';\n logger.info(`Validating ${file}`);\n try {\n await validate('global', file, fileConfig, strict);\n } catch (err) {\n logger.error({ file, err }, 'File is not valid Renovate config');\n returnVal = 1;\n }\n }\n } catch {\n // ignore\n }\n }\n if (returnVal !== 0) {\n process.exit(returnVal);\n }\n logger.info('Config validated successfully');\n });\n\n await program.parseAsync();\n})().catch((e) => {\n if (e instanceof CommanderError) {\n // Commander throws an error at the end of Action execution i.e. as part of the `help` command, and so we don't want to return an error code in this case\n if (e.code === 'commander.helpDisplayed') {\n return;\n }\n }\n\n // oxlint-disable-next-line no-console -- intentional: display critical error on CLI\n console.error(e);\n process.exit(99);\n});\n"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "renovate",
3
3
  "description": "Automated dependency updates. Flexible so you don't need to be.",
4
- "version": "42.87.0",
4
+ "version": "42.88.1",
5
5
  "type": "commonjs",
6
6
  "bin": {
7
7
  "renovate": "dist/renovate.js",
@@ -102,19 +102,19 @@
102
102
  "@breejs/later": "4.2.0",
103
103
  "@cdktf/hcl2json": "0.21.0",
104
104
  "@opentelemetry/api": "1.9.0",
105
- "@opentelemetry/context-async-hooks": "2.3.0",
106
- "@opentelemetry/exporter-trace-otlp-http": "0.209.0",
107
- "@opentelemetry/instrumentation": "0.209.0",
105
+ "@opentelemetry/context-async-hooks": "2.4.0",
106
+ "@opentelemetry/exporter-trace-otlp-http": "0.210.0",
107
+ "@opentelemetry/instrumentation": "0.210.0",
108
108
  "@opentelemetry/instrumentation-bunyan": "0.54.0",
109
- "@opentelemetry/instrumentation-http": "0.209.0",
109
+ "@opentelemetry/instrumentation-http": "0.210.0",
110
110
  "@opentelemetry/instrumentation-redis": "0.57.2",
111
111
  "@opentelemetry/resource-detector-aws": "2.9.0",
112
112
  "@opentelemetry/resource-detector-azure": "0.17.0",
113
113
  "@opentelemetry/resource-detector-gcp": "0.44.0",
114
114
  "@opentelemetry/resource-detector-github": "0.32.0",
115
- "@opentelemetry/resources": "2.3.0",
116
- "@opentelemetry/sdk-trace-base": "2.3.0",
117
- "@opentelemetry/sdk-trace-node": "2.3.0",
115
+ "@opentelemetry/resources": "2.4.0",
116
+ "@opentelemetry/sdk-trace-base": "2.4.0",
117
+ "@opentelemetry/sdk-trace-node": "2.4.0",
118
118
  "@opentelemetry/semantic-conventions": "1.38.0",
119
119
  "@pnpm/parse-overrides": "1001.0.3",
120
120
  "@qnighy/marshal": "0.1.3",
@@ -298,7 +298,7 @@
298
298
  "tar": "7.5.4",
299
299
  "tmp-promise": "3.0.3",
300
300
  "tsx": "4.21.0",
301
- "type-fest": "5.4.0",
301
+ "type-fest": "5.4.1",
302
302
  "typescript": "5.9.3",
303
303
  "typescript-eslint": "8.53.0",
304
304
  "unified": "11.0.5",
@@ -1,7 +1,7 @@
1
1
  {
2
- "title": "JSON schema for Renovate 42.87.0 config files (https://renovatebot.com/)",
2
+ "title": "JSON schema for Renovate 42.88.1 config files (https://renovatebot.com/)",
3
3
  "$schema": "http://json-schema.org/draft-07/schema#",
4
- "x-renovate-version": "42.87.0",
4
+ "x-renovate-version": "42.88.1",
5
5
  "allowComments": true,
6
6
  "type": "object",
7
7
  "properties": {