renovate 42.89.4 → 42.90.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.
- package/dist/config-validator.js +24 -1
- package/dist/config-validator.js.map +1 -1
- package/dist/util/date.d.ts +1 -1
- package/dist/util/date.js +5 -3
- package/dist/util/date.js.map +1 -1
- package/dist/workers/repository/onboarding/branch/check.js +2 -2
- package/dist/workers/repository/onboarding/branch/check.js.map +1 -1
- package/dist/workers/repository/onboarding/pr/index.js +2 -2
- package/dist/workers/repository/onboarding/pr/index.js.map +1 -1
- package/package.json +2 -1
- package/renovate-schema.json +2 -2
package/dist/config-validator.js
CHANGED
|
@@ -7,15 +7,29 @@ require("./punycode.cjs");
|
|
|
7
7
|
const dequal_1 = require("dequal");
|
|
8
8
|
const fs_extra_1 = require("fs-extra");
|
|
9
9
|
const app_strings_1 = require("./config/app-strings");
|
|
10
|
+
const global_1 = require("./config/global");
|
|
10
11
|
const massage_1 = require("./config/massage");
|
|
11
12
|
const migration_1 = require("./config/migration");
|
|
12
13
|
const validation_1 = require("./config/validation");
|
|
13
14
|
const expose_cjs_1 = require("./expose.cjs");
|
|
14
15
|
const logger_1 = require("./logger");
|
|
15
16
|
const env_1 = require("./util/env");
|
|
17
|
+
const parse_1 = require("./workers/global/config/parse");
|
|
16
18
|
const file_1 = require("./workers/global/config/parse/file");
|
|
17
19
|
const util_1 = require("./workers/global/config/parse/util");
|
|
18
20
|
let returnVal = 0;
|
|
21
|
+
/**
|
|
22
|
+
* Make sure that we've resolved configuration from the different places that Renovate users would expect them to be specified
|
|
23
|
+
*
|
|
24
|
+
* This then allows a `configType=repo` config to i.e. be validated alongside a `config.js` or `env RENOVATE_ALLOWED_COMMANDS=...`
|
|
25
|
+
*
|
|
26
|
+
* Note that we intentionally don't fully initialize Renovate and its modules, as we're not fully running, and it would require a Platform to be configured
|
|
27
|
+
* */
|
|
28
|
+
async function partiallyGlobalInitialize() {
|
|
29
|
+
// NOTE that this doesn't allow command-line arguments
|
|
30
|
+
const globalConfig = await (0, parse_1.parseConfigs)((0, env_1.getEnv)(), []);
|
|
31
|
+
global_1.GlobalConfig.set(globalConfig);
|
|
32
|
+
}
|
|
19
33
|
async function validate(configType, desc, config, strict, isPreset = false) {
|
|
20
34
|
const { isMigrated, migratedConfig } = (0, migration_1.migrateConfig)(config);
|
|
21
35
|
if (isMigrated) {
|
|
@@ -39,6 +53,7 @@ async function validate(configType, desc, config, strict, isPreset = false) {
|
|
|
39
53
|
}
|
|
40
54
|
}
|
|
41
55
|
(async () => {
|
|
56
|
+
await partiallyGlobalInitialize();
|
|
42
57
|
const program = new commander_1.Command('renovate-config-validator')
|
|
43
58
|
.summary('Validate Renovate configuration files')
|
|
44
59
|
.description(`Validate your Renovate configuration (repo config, shared presets or global configuration) files\n` +
|
|
@@ -53,7 +68,15 @@ Examples:
|
|
|
53
68
|
$ renovate-config-validator first_config.json
|
|
54
69
|
$ renovate-config-validator --strict config.js
|
|
55
70
|
$ renovate-config-validator --no-global renovate.json5
|
|
56
|
-
$ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator
|
|
71
|
+
$ env RENOVATE_CONFIG_FILE=obscure-name.json renovate-config-validator
|
|
72
|
+
|
|
73
|
+
Global configuration:
|
|
74
|
+
|
|
75
|
+
If you have specified global self-hosted configuration (https://docs.renovatebot.com/self-hosted-configuration/) in environment variables or in a \`config.js\`, this will be detected:
|
|
76
|
+
|
|
77
|
+
$ env RENOVATE_ALLOWED_ENV='["GO*"]' renovate-config-validator
|
|
78
|
+
# if passing the filename, make sure it's not validating as a global config
|
|
79
|
+
$ env RENOVATE_ALLOWED_ENV='["GO*"]' renovate-config-validator --no-global renovate.json`)
|
|
57
80
|
.argument('[config-files...]')
|
|
58
81
|
.version(expose_cjs_1.pkg.version, '-v, --version')
|
|
59
82
|
.option('--strict', 'Fail command if any configuration warnings, errors, or a migration is needed')
|
|
@@ -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 `\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"]}
|
|
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 { GlobalConfig } from './config/global';\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 { parseConfigs } from './workers/global/config/parse';\nimport { getConfig as getFileConfig } from './workers/global/config/parse/file';\nimport { getParsedContent } from './workers/global/config/parse/util';\n\nlet returnVal = 0;\n\n/**\n * Make sure that we've resolved configuration from the different places that Renovate users would expect them to be specified\n *\n * This then allows a `configType=repo` config to i.e. be validated alongside a `config.js` or `env RENOVATE_ALLOWED_COMMANDS=...`\n *\n * Note that we intentionally don't fully initialize Renovate and its modules, as we're not fully running, and it would require a Platform to be configured\n * */\nasync function partiallyGlobalInitialize(): Promise<void> {\n // NOTE that this doesn't allow command-line arguments\n const globalConfig = await parseConfigs(getEnv(), []);\n GlobalConfig.set(globalConfig);\n}\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 await partiallyGlobalInitialize();\n\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\nGlobal configuration:\n\nIf you have specified global self-hosted configuration (https://docs.renovatebot.com/self-hosted-configuration/) in environment variables or in a \\`config.js\\`, this will be detected:\n\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator\n # if passing the filename, make sure it's not validating as a global config\n $ env RENOVATE_ALLOWED_ENV='[\"GO*\"]' renovate-config-validator --no-global renovate.json`,\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/dist/util/date.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export declare function getElapsedDays(timestamp: string): number;
|
|
1
|
+
export declare function getElapsedDays(timestamp: string, floor?: boolean): number;
|
|
2
2
|
export declare function getElapsedMinutes(date: Date): number;
|
|
3
3
|
export declare function getElapsedHours(date: Date | string): number;
|
|
4
4
|
export declare function getElapsedMs(timestamp: string): number;
|
package/dist/util/date.js
CHANGED
|
@@ -6,12 +6,14 @@ exports.getElapsedHours = getElapsedHours;
|
|
|
6
6
|
exports.getElapsedMs = getElapsedMs;
|
|
7
7
|
const luxon_1 = require("luxon");
|
|
8
8
|
const ONE_MINUTE_MS = 60 * 1000;
|
|
9
|
-
function getElapsedDays(timestamp) {
|
|
9
|
+
function getElapsedDays(timestamp, floor = true) {
|
|
10
10
|
const currentVersionTimestampDate = luxon_1.DateTime.fromISO(timestamp);
|
|
11
11
|
const now = luxon_1.DateTime.now();
|
|
12
12
|
const diffInDays = now.diff(currentVersionTimestampDate, 'days').as('days');
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
if (floor) {
|
|
14
|
+
return Math.floor(diffInDays);
|
|
15
|
+
}
|
|
16
|
+
return diffInDays;
|
|
15
17
|
}
|
|
16
18
|
function getElapsedMinutes(date) {
|
|
17
19
|
return Math.floor((new Date().getTime() - date.getTime()) / ONE_MINUTE_MS);
|
package/dist/util/date.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../lib/util/date.ts"],"names":[],"mappings":";;AAIA,
|
|
1
|
+
{"version":3,"file":"date.js","sourceRoot":"","sources":["../../lib/util/date.ts"],"names":[],"mappings":";;AAIA,wCASC;AAED,8CAEC;AAED,0CAYC;AAED,oCAEC;AAnCD,iCAAiC;AAEjC,MAAM,aAAa,GAAG,EAAE,GAAG,IAAI,CAAC;AAEhC,SAAgB,cAAc,CAAC,SAAiB,EAAE,KAAK,GAAG,IAAI;IAC5D,MAAM,2BAA2B,GAAG,gBAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChE,MAAM,GAAG,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;IAC5E,IAAI,KAAK,EAAE,CAAC;QACV,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAChC,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAgB,iBAAiB,CAAC,IAAU;IAC1C,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,aAAa,CAAC,CAAC;AAC7E,CAAC;AAED,SAAgB,eAAe,CAAC,IAAmB;IACjD,MAAM,QAAQ,GACZ,OAAO,IAAI,KAAK,QAAQ;QACtB,CAAC,CAAC,gBAAQ,CAAC,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC,CAAC,gBAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEhC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,CAAC;IACX,CAAC;IAED,MAAM,IAAI,GAAG,gBAAQ,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACpD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;AAED,SAAgB,YAAY,CAAC,SAAiB;IAC5C,OAAO,IAAI,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,CAAC;AAC9D,CAAC","sourcesContent":["import { DateTime } from 'luxon';\n\nconst ONE_MINUTE_MS = 60 * 1000;\n\nexport function getElapsedDays(timestamp: string, floor = true): number {\n const currentVersionTimestampDate = DateTime.fromISO(timestamp);\n const now = DateTime.now();\n const diffInDays = now.diff(currentVersionTimestampDate, 'days').as('days');\n if (floor) {\n return Math.floor(diffInDays);\n }\n\n return diffInDays;\n}\n\nexport function getElapsedMinutes(date: Date): number {\n return Math.floor((new Date().getTime() - date.getTime()) / ONE_MINUTE_MS);\n}\n\nexport function getElapsedHours(date: Date | string): number {\n const pastDate =\n typeof date === 'string'\n ? DateTime.fromISO(date)\n : DateTime.fromJSDate(date);\n\n if (!pastDate.isValid) {\n return 0;\n }\n\n const diff = DateTime.now().diff(pastDate, 'hours');\n return Math.floor(diff.hours);\n}\n\nexport function getElapsedMs(timestamp: string): number {\n return new Date().getTime() - new Date(timestamp).getTime();\n}\n"]}
|
|
@@ -138,14 +138,14 @@ async function isOnboarded(config) {
|
|
|
138
138
|
}
|
|
139
139
|
logger_1.logger.debug('Repo is not onboarded and no merged PRs exist');
|
|
140
140
|
if (!config.suppressNotifications.includes('onboardingClose')) {
|
|
141
|
-
const ageOfOnboardingPr = (0, date_1.getElapsedDays)(closedOnboardingPr.createdAt);
|
|
141
|
+
const ageOfOnboardingPr = (0, date_1.getElapsedDays)(closedOnboardingPr.createdAt, false);
|
|
142
142
|
const onboardingAutoCloseAge = global_1.GlobalConfig.get('onboardingAutoCloseAge');
|
|
143
143
|
if (onboardingAutoCloseAge) {
|
|
144
144
|
logger_1.logger.debug({
|
|
145
145
|
onboardingAutoCloseAge,
|
|
146
146
|
createdAt: closedOnboardingPr.createdAt,
|
|
147
147
|
ageOfOnboardingPr,
|
|
148
|
-
}, `Determining that the closed onboarding PR was created at \`${closedOnboardingPr.createdAt}\` was created ${ageOfOnboardingPr} days ago`);
|
|
148
|
+
}, `Determining that the closed onboarding PR was created at \`${closedOnboardingPr.createdAt}\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`);
|
|
149
149
|
}
|
|
150
150
|
// if we have onboardingAutoCloseAge, and it hasn't yet passed onboardingAutoCloseAge, add a comment
|
|
151
151
|
// if it /has/ passed, we'll comment this appropriately in `ensureOnboardingPr`, so there doesn't need to be a comment here
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/branch/check.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNonEmptyObject } from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../../config/app-strings';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_NO_CONFIG,\n} from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport type { Pr } from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { scm } from '../../../../modules/platform/scm';\nimport { getCache } from '../../../../util/cache/repository';\nimport { getElapsedDays } from '../../../../util/date';\nimport { readLocalFile } from '../../../../util/fs';\nimport { getBranchCommit } from '../../../../util/git';\nimport { getSemanticCommitPrTitle } from '../common';\n\nasync function findFile(fileName: string): Promise<boolean> {\n logger.debug(`findFile(${fileName})`);\n const fileList = await scm.getFileList();\n return fileList.includes(fileName);\n}\n\nasync function configFileExists(): Promise<boolean> {\n for (const fileName of getConfigFileNames()) {\n if (fileName !== 'package.json' && (await findFile(fileName))) {\n logger.debug(`Config file exists, fileName: ${fileName}`);\n return true;\n }\n }\n return false;\n}\n\nasync function packageJsonConfigExists(): Promise<boolean> {\n try {\n // TODO #22198\n const pJson = JSON.parse((await readLocalFile('package.json', 'utf8'))!);\n if (pJson.renovate) {\n return true;\n }\n } catch {\n // Do nothing\n }\n return false;\n}\n\nasync function closedPrExists(config: RenovateConfig): Promise<Pr | null> {\n return (\n (await platform.findPr({\n branchName: config.onboardingBranch!,\n prTitle: config.onboardingPrTitle,\n state: '!open',\n targetBranch: config.baseBranch,\n })) ??\n (await platform.findPr({\n branchName: config.onboardingBranch!,\n prTitle: getSemanticCommitPrTitle(config),\n state: '!open',\n targetBranch: config.baseBranch,\n }))\n );\n}\n\nexport async function isOnboarded(config: RenovateConfig): Promise<boolean> {\n logger.debug('isOnboarded()');\n const title = `Action required: Add a Renovate config`;\n\n // Repo is onboarded if in silent mode\n if (config.mode === 'silent') {\n logger.debug('Silent mode enabled so repo is considered onboarded');\n return true;\n }\n\n // Repo is onboarded if global config is bypassing onboarding and does not require a\n // configuration file.\n // The repo is considered \"not onboarded\" if:\n // - An onboarding cache is present, and\n // - The current default branch SHA matches the default SHA found in the cache\n // Also if there is a closed pr skip using cache as it is outdated\n if (config.requireConfig === 'optional' && config.onboarding === false) {\n // Return early and avoid checking for config files\n return true;\n }\n if (config.requireConfig === 'ignored') {\n logger.debug('Config file will be ignored');\n return true;\n }\n\n const closedOnboardingPr = await closedPrExists(config);\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n // if onboarding cache is present and base branch has not been updated; branch is not onboarded\n // if closed pr exists then presence of onboarding cache doesn't matter as we need to skip onboarding\n if (\n config.onboarding &&\n !closedOnboardingPr &&\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha ===\n getBranchCommit(config.defaultBranch!)\n ) {\n logger.debug('Onboarding cache is valid. Repo is not onboarded');\n return false;\n }\n\n // when bot is ran is fork mode ... do not fetch file using api call instead use the git.fileList so we get sync first and get the latest config\n // prevents https://github.com/renovatebot/renovate/discussions/37328\n if (cache.configFileName && !config.forkToken) {\n logger.debug('Checking cached config file name');\n try {\n const configFileContent = await platform.getJsonFile(\n cache.configFileName,\n );\n if (configFileContent) {\n if (\n cache.configFileName !== 'package.json' ||\n configFileContent.renovate\n ) {\n logger.debug('Existing config file confirmed');\n logger.debug(\n { fileName: cache.configFileName, config: configFileContent },\n 'Repository config',\n );\n return true;\n }\n }\n } catch {\n // probably file doesn't exist\n }\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n if (await configFileExists()) {\n await platform.ensureIssueClosing(title);\n return true;\n }\n logger.debug('config file not found');\n if (await packageJsonConfigExists()) {\n logger.debug('package.json contains config');\n await platform.ensureIssueClosing(title);\n return true;\n }\n\n // If onboarding has been disabled and config files are required then the\n // repository has not been onboarded yet\n if (config.requireConfig === 'required' && config.onboarding === false) {\n throw new Error(REPOSITORY_NO_CONFIG);\n }\n\n if (!closedOnboardingPr) {\n logger.debug('Found no closed onboarding PR');\n return false;\n }\n logger.debug('Found closed onboarding PR');\n if (config.requireConfig === 'optional') {\n logger.debug('Config not mandatory so repo is considered onboarded');\n return true;\n }\n logger.debug('Repo is not onboarded and no merged PRs exist');\n if (!config.suppressNotifications!.includes('onboardingClose')) {\n const ageOfOnboardingPr = getElapsedDays(closedOnboardingPr.createdAt!);\n const onboardingAutoCloseAge = GlobalConfig.get('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: closedOnboardingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the closed onboarding PR was created at \\`${closedOnboardingPr.createdAt!}\\` was created ${ageOfOnboardingPr} days ago`,\n );\n }\n // if we have onboardingAutoCloseAge, and it hasn't yet passed onboardingAutoCloseAge, add a comment\n // if it /has/ passed, we'll comment this appropriately in `ensureOnboardingPr`, so there doesn't need to be a comment here\n if (\n !onboardingAutoCloseAge ||\n ageOfOnboardingPr <= onboardingAutoCloseAge\n ) {\n // ensure PR comment\n await ensureComment({\n number: closedOnboardingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because there is no Renovate configuration file. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n }\n }\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n}\n\nexport async function getOnboardingPr(\n config: RenovateConfig,\n): Promise<Pr | null> {\n return await platform.getBranchPr(\n config.onboardingBranch!,\n config.baseBranch,\n );\n}\n"]}
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/branch/check.ts"],"names":[],"mappings":";;AAiEA,kCA8HC;AAED,0CAOC;AAxMD,yCAAoD;AACpD,gEAAoE;AACpE,sDAAyD;AAEzD,yEAG8C;AAC9C,+CAA4C;AAE5C,2DAAwD;AACxD,kEAAqE;AACrE,0DAAuD;AACvD,kEAA6D;AAC7D,gDAAuD;AACvD,4CAAoD;AACpD,8CAAuD;AACvD,sCAAqD;AAErD,KAAK,UAAU,QAAQ,CAAC,QAAgB;IACtC,eAAM,CAAC,KAAK,CAAC,YAAY,QAAQ,GAAG,CAAC,CAAC;IACtC,MAAM,QAAQ,GAAG,MAAM,SAAG,CAAC,WAAW,EAAE,CAAC;IACzC,OAAO,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AACrC,CAAC;AAED,KAAK,UAAU,gBAAgB;IAC7B,KAAK,MAAM,QAAQ,IAAI,IAAA,gCAAkB,GAAE,EAAE,CAAC;QAC5C,IAAI,QAAQ,KAAK,cAAc,IAAI,CAAC,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAC9D,eAAM,CAAC,KAAK,CAAC,iCAAiC,QAAQ,EAAE,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,uBAAuB;IACpC,IAAI,CAAC;QACH,cAAc;QACd,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,IAAA,kBAAa,EAAC,cAAc,EAAE,MAAM,CAAC,CAAE,CAAC,CAAC;QACzE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,aAAa;IACf,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,KAAK,UAAU,cAAc,CAAC,MAAsB;IAClD,OAAO,CACL,CAAC,MAAM,mBAAQ,CAAC,MAAM,CAAC;QACrB,UAAU,EAAE,MAAM,CAAC,gBAAiB;QACpC,OAAO,EAAE,MAAM,CAAC,iBAAiB;QACjC,KAAK,EAAE,OAAO;QACd,YAAY,EAAE,MAAM,CAAC,UAAU;KAChC,CAAC,CAAC;QACH,CAAC,MAAM,mBAAQ,CAAC,MAAM,CAAC;YACrB,UAAU,EAAE,MAAM,CAAC,gBAAiB;YACpC,OAAO,EAAE,IAAA,iCAAwB,EAAC,MAAM,CAAC;YACzC,KAAK,EAAE,OAAO;YACd,YAAY,EAAE,MAAM,CAAC,UAAU;SAChC,CAAC,CAAC,CACJ,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,WAAW,CAAC,MAAsB;IACtD,eAAM,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC9B,MAAM,KAAK,GAAG,wCAAwC,CAAC;IAEvD,sCAAsC;IACtC,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC7B,eAAM,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACpE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oFAAoF;IACpF,sBAAsB;IACtB,6CAA6C;IAC7C,wCAAwC;IACxC,8EAA8E;IAC9E,kEAAkE;IAClE,IAAI,MAAM,CAAC,aAAa,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACvE,mDAAmD;QACnD,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QACvC,eAAM,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IACxD,MAAM,KAAK,GAAG,IAAA,qBAAQ,GAAE,CAAC;IACzB,MAAM,qBAAqB,GAAG,KAAK,EAAE,qBAAqB,CAAC;IAC3D,+FAA+F;IAC/F,qGAAqG;IACrG,IACE,MAAM,CAAC,UAAU;QACjB,CAAC,kBAAkB;QACnB,IAAA,qBAAgB,EAAC,qBAAqB,CAAC;QACvC,qBAAqB,CAAC,gBAAgB;YACpC,IAAA,qBAAe,EAAC,MAAM,CAAC,aAAc,CAAC,EACxC,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QACjE,OAAO,KAAK,CAAC;IACf,CAAC;IAED,gJAAgJ;IAChJ,qEAAqE;IACrE,IAAI,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QAC9C,eAAM,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;QACjD,IAAI,CAAC;YACH,MAAM,iBAAiB,GAAG,MAAM,mBAAQ,CAAC,WAAW,CAClD,KAAK,CAAC,cAAc,CACrB,CAAC;YACF,IAAI,iBAAiB,EAAE,CAAC;gBACtB,IACE,KAAK,CAAC,cAAc,KAAK,cAAc;oBACvC,iBAAiB,CAAC,QAAQ,EAC1B,CAAC;oBACD,eAAM,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;oBAC/C,eAAM,CAAC,KAAK,CACV,EAAE,QAAQ,EAAE,KAAK,CAAC,cAAc,EAAE,MAAM,EAAE,iBAAiB,EAAE,EAC7D,mBAAmB,CACpB,CAAC;oBACF,OAAO,IAAI,CAAC;gBACd,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,8BAA8B;QAChC,CAAC;QACD,eAAM,CAAC,KAAK,CAAC,uCAAuC,CAAC,CAAC;QACtD,OAAO,KAAK,CAAC,cAAc,CAAC;IAC9B,CAAC;IACD,IAAI,MAAM,gBAAgB,EAAE,EAAE,CAAC;QAC7B,MAAM,mBAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;IACtC,IAAI,MAAM,uBAAuB,EAAE,EAAE,CAAC;QACpC,eAAM,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;QAC7C,MAAM,mBAAQ,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;QACzC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,yEAAyE;IACzE,wCAAwC;IACxC,IAAI,MAAM,CAAC,aAAa,KAAK,UAAU,IAAI,MAAM,CAAC,UAAU,KAAK,KAAK,EAAE,CAAC;QACvE,MAAM,IAAI,KAAK,CAAC,qCAAoB,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,eAAM,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;QAC9C,OAAO,KAAK,CAAC;IACf,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;IAC3C,IAAI,MAAM,CAAC,aAAa,KAAK,UAAU,EAAE,CAAC;QACxC,eAAM,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;IAC9D,IAAI,CAAC,MAAM,CAAC,qBAAsB,CAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,CAAC;QAC/D,MAAM,iBAAiB,GAAG,IAAA,qBAAc,EACtC,kBAAkB,CAAC,SAAU,EAC7B,KAAK,CACN,CAAC;QACF,MAAM,sBAAsB,GAAG,qBAAY,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;QAC1E,IAAI,sBAAsB,EAAE,CAAC;YAC3B,eAAM,CAAC,KAAK,CACV;gBACE,sBAAsB;gBACtB,SAAS,EAAE,kBAAkB,CAAC,SAAU;gBACxC,iBAAiB;aAClB,EACD,8DAA8D,kBAAkB,CAAC,SAAU,kBAAkB,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CACrJ,CAAC;QACJ,CAAC;QACD,oGAAoG;QACpG,2HAA2H;QAC3H,IACE,CAAC,sBAAsB;YACvB,iBAAiB,IAAI,sBAAsB,EAC3C,CAAC;YACD,oBAAoB;YACpB,MAAM,IAAA,uBAAa,EAAC;gBAClB,MAAM,EAAE,kBAAkB,CAAC,MAAM;gBACjC,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAE,kRAAkR;aAC5R,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6CAA4B,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,eAAe,CACnC,MAAsB;IAEtB,OAAO,MAAM,mBAAQ,CAAC,WAAW,CAC/B,MAAM,CAAC,gBAAiB,EACxB,MAAM,CAAC,UAAU,CAClB,CAAC;AACJ,CAAC","sourcesContent":["import { isNonEmptyObject } from '@sindresorhus/is';\nimport { getConfigFileNames } from '../../../../config/app-strings';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport {\n REPOSITORY_CLOSED_ONBOARDING,\n REPOSITORY_NO_CONFIG,\n} from '../../../../constants/error-messages';\nimport { logger } from '../../../../logger';\nimport type { Pr } from '../../../../modules/platform';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { scm } from '../../../../modules/platform/scm';\nimport { getCache } from '../../../../util/cache/repository';\nimport { getElapsedDays } from '../../../../util/date';\nimport { readLocalFile } from '../../../../util/fs';\nimport { getBranchCommit } from '../../../../util/git';\nimport { getSemanticCommitPrTitle } from '../common';\n\nasync function findFile(fileName: string): Promise<boolean> {\n logger.debug(`findFile(${fileName})`);\n const fileList = await scm.getFileList();\n return fileList.includes(fileName);\n}\n\nasync function configFileExists(): Promise<boolean> {\n for (const fileName of getConfigFileNames()) {\n if (fileName !== 'package.json' && (await findFile(fileName))) {\n logger.debug(`Config file exists, fileName: ${fileName}`);\n return true;\n }\n }\n return false;\n}\n\nasync function packageJsonConfigExists(): Promise<boolean> {\n try {\n // TODO #22198\n const pJson = JSON.parse((await readLocalFile('package.json', 'utf8'))!);\n if (pJson.renovate) {\n return true;\n }\n } catch {\n // Do nothing\n }\n return false;\n}\n\nasync function closedPrExists(config: RenovateConfig): Promise<Pr | null> {\n return (\n (await platform.findPr({\n branchName: config.onboardingBranch!,\n prTitle: config.onboardingPrTitle,\n state: '!open',\n targetBranch: config.baseBranch,\n })) ??\n (await platform.findPr({\n branchName: config.onboardingBranch!,\n prTitle: getSemanticCommitPrTitle(config),\n state: '!open',\n targetBranch: config.baseBranch,\n }))\n );\n}\n\nexport async function isOnboarded(config: RenovateConfig): Promise<boolean> {\n logger.debug('isOnboarded()');\n const title = `Action required: Add a Renovate config`;\n\n // Repo is onboarded if in silent mode\n if (config.mode === 'silent') {\n logger.debug('Silent mode enabled so repo is considered onboarded');\n return true;\n }\n\n // Repo is onboarded if global config is bypassing onboarding and does not require a\n // configuration file.\n // The repo is considered \"not onboarded\" if:\n // - An onboarding cache is present, and\n // - The current default branch SHA matches the default SHA found in the cache\n // Also if there is a closed pr skip using cache as it is outdated\n if (config.requireConfig === 'optional' && config.onboarding === false) {\n // Return early and avoid checking for config files\n return true;\n }\n if (config.requireConfig === 'ignored') {\n logger.debug('Config file will be ignored');\n return true;\n }\n\n const closedOnboardingPr = await closedPrExists(config);\n const cache = getCache();\n const onboardingBranchCache = cache?.onboardingBranchCache;\n // if onboarding cache is present and base branch has not been updated; branch is not onboarded\n // if closed pr exists then presence of onboarding cache doesn't matter as we need to skip onboarding\n if (\n config.onboarding &&\n !closedOnboardingPr &&\n isNonEmptyObject(onboardingBranchCache) &&\n onboardingBranchCache.defaultBranchSha ===\n getBranchCommit(config.defaultBranch!)\n ) {\n logger.debug('Onboarding cache is valid. Repo is not onboarded');\n return false;\n }\n\n // when bot is ran is fork mode ... do not fetch file using api call instead use the git.fileList so we get sync first and get the latest config\n // prevents https://github.com/renovatebot/renovate/discussions/37328\n if (cache.configFileName && !config.forkToken) {\n logger.debug('Checking cached config file name');\n try {\n const configFileContent = await platform.getJsonFile(\n cache.configFileName,\n );\n if (configFileContent) {\n if (\n cache.configFileName !== 'package.json' ||\n configFileContent.renovate\n ) {\n logger.debug('Existing config file confirmed');\n logger.debug(\n { fileName: cache.configFileName, config: configFileContent },\n 'Repository config',\n );\n return true;\n }\n }\n } catch {\n // probably file doesn't exist\n }\n logger.debug('Existing config file no longer exists');\n delete cache.configFileName;\n }\n if (await configFileExists()) {\n await platform.ensureIssueClosing(title);\n return true;\n }\n logger.debug('config file not found');\n if (await packageJsonConfigExists()) {\n logger.debug('package.json contains config');\n await platform.ensureIssueClosing(title);\n return true;\n }\n\n // If onboarding has been disabled and config files are required then the\n // repository has not been onboarded yet\n if (config.requireConfig === 'required' && config.onboarding === false) {\n throw new Error(REPOSITORY_NO_CONFIG);\n }\n\n if (!closedOnboardingPr) {\n logger.debug('Found no closed onboarding PR');\n return false;\n }\n logger.debug('Found closed onboarding PR');\n if (config.requireConfig === 'optional') {\n logger.debug('Config not mandatory so repo is considered onboarded');\n return true;\n }\n logger.debug('Repo is not onboarded and no merged PRs exist');\n if (!config.suppressNotifications!.includes('onboardingClose')) {\n const ageOfOnboardingPr = getElapsedDays(\n closedOnboardingPr.createdAt!,\n false,\n );\n const onboardingAutoCloseAge = GlobalConfig.get('onboardingAutoCloseAge');\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: closedOnboardingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the closed onboarding PR was created at \\`${closedOnboardingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n // if we have onboardingAutoCloseAge, and it hasn't yet passed onboardingAutoCloseAge, add a comment\n // if it /has/ passed, we'll comment this appropriately in `ensureOnboardingPr`, so there doesn't need to be a comment here\n if (\n !onboardingAutoCloseAge ||\n ageOfOnboardingPr <= onboardingAutoCloseAge\n ) {\n // ensure PR comment\n await ensureComment({\n number: closedOnboardingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because there is no Renovate configuration file. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n }\n }\n throw new Error(REPOSITORY_CLOSED_ONBOARDING);\n}\n\nexport async function getOnboardingPr(\n config: RenovateConfig,\n): Promise<Pr | null> {\n return await platform.getBranchPr(\n config.onboardingBranch!,\n config.baseBranch,\n );\n}\n"]}
|
|
@@ -35,14 +35,14 @@ async function ensureOnboardingPr(config, packageFiles, branches) {
|
|
|
35
35
|
const existingPr = await platform_1.platform.getBranchPr(config.onboardingBranch, config.defaultBranch);
|
|
36
36
|
if (existingPr) {
|
|
37
37
|
// check if the existing pr crosses the onboarding autoclose age
|
|
38
|
-
const ageOfOnboardingPr = (0, date_1.getElapsedDays)(existingPr.createdAt);
|
|
38
|
+
const ageOfOnboardingPr = (0, date_1.getElapsedDays)(existingPr.createdAt, false);
|
|
39
39
|
const onboardingAutoCloseAge = global_1.GlobalConfig.get('onboardingAutoCloseAge');
|
|
40
40
|
if (onboardingAutoCloseAge) {
|
|
41
41
|
logger_1.logger.debug({
|
|
42
42
|
onboardingAutoCloseAge,
|
|
43
43
|
createdAt: existingPr.createdAt,
|
|
44
44
|
ageOfOnboardingPr,
|
|
45
|
-
}, `Determining that the onboarding PR created at \`${existingPr.createdAt}\` was created ${ageOfOnboardingPr} days ago`);
|
|
45
|
+
}, `Determining that the onboarding PR created at \`${existingPr.createdAt}\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`);
|
|
46
46
|
}
|
|
47
47
|
if ((0, is_1.isNumber)(onboardingAutoCloseAge) &&
|
|
48
48
|
ageOfOnboardingPr > onboardingAutoCloseAge) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport { logger } from '../../../../logger';\nimport type { PackageFile } from '../../../../modules/manager/types';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { hashBody } from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { getElapsedDays } from '../../../../util/date';\nimport { emojify } from '../../../../util/emoji';\nimport { getFile } from '../../../../util/git';\nimport { toSha256 } from '../../../../util/hash';\nimport * as template from '../../../../util/template';\nimport type { BranchConfig } from '../../../types';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings';\nimport { getPlatformPrOptions } from '../../update/pr';\nimport { prepareLabels } from '../../update/pr/labels';\nimport { addParticipants } from '../../update/pr/participants';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common';\nimport { getBaseBranchDesc } from './base-branch';\nimport { getConfigDesc } from './config-description';\nimport { getExpectedPrList } from './pr-list';\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n OnboardingState.onboardingCacheValid ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const existingPr = await platform.getBranchPr(\n config.onboardingBranch!,\n config.defaultBranch,\n );\n if (existingPr) {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!);\n const onboardingAutoCloseAge = GlobalConfig.get('onboardingAutoCloseAge')!;\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return;\n }\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n config.onboardingBranch!,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n const onboardingConfigHashComment =\n await getOnboardingConfigHashComment(config);\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n config.productLinks!.homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n config.requireConfig === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n config.productLinks!.documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n config.productLinks!.help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n if (packageFiles && Object.entries(packageFiles).length) {\n let files: string[] = [];\n for (const [manager, managerFiles] of Object.entries(packageFiles)) {\n files = files.concat(\n managerFiles.map((file) => ` * \\`${file.packageFile}\\` (${manager})`),\n );\n }\n prBody =\n prBody.replace(\n '{{PACKAGE FILES}}',\n '### Detected Package Files\\n\\n' + files.join('\\n'),\n ) + '\\n';\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n prBody = prBody.replace('{{PRLIST}}\\n', getExpectedPrList(config, branches));\n if (isString(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (isString(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n logger.trace('prBody:\\n' + prBody);\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : config.onboardingPrTitle!;\n const pr = await platform.createPr({\n sourceBranch: config.onboardingBranch!,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(config.onboardingBranch!);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(\n config: RenovateConfig,\n): Promise<string> {\n const configFile = getDefaultConfigFileName(config);\n const existingContents =\n (await getFile(configFile, config.onboardingBranch)) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\n}\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../lib/workers/repository/onboarding/pr/index.ts"],"names":[],"mappings":";;AAiCA,gDAmOC;;AApQD,yCAAsD;AACtD,sDAAyD;AAEzD,+CAA4C;AAE5C,2DAAwD;AACxD,kEAAqE;AACrE,kEAAgE;AAChE,0DAAuD;AACvD,gDAAuD;AACvD,kDAAiD;AACjD,8CAA+C;AAC/C,gDAAiD;AACjD,4EAAsD;AAEtD,2DAI+B;AAC/B,wCAAuD;AACvD,mDAAuD;AACvD,+DAA+D;AAC/D,+EAAiF;AACjF,sCAImB;AACnB,+CAAkD;AAClD,6DAAqD;AACrD,uCAA8C;AAEvC,KAAK,UAAU,kBAAkB,CACtC,MAAsB,EACtB,YAAkD,EAClD,QAAwB;IAExB,IACE,MAAM,CAAC,eAAe,KAAK,IAAI;QAC/B,wBAAe,CAAC,oBAAoB;QACpC,CAAC,MAAM,CAAC,wBAAwB,IAAI,CAAC,wBAAe,CAAC,iBAAiB,CAAC,EACvE,CAAC;QACD,OAAO;IACT,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IACrC,eAAM,CAAC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IACzB,cAAc;IACd,MAAM,UAAU,GAAG,MAAM,mBAAQ,CAAC,WAAW,CAC3C,MAAM,CAAC,gBAAiB,EACxB,MAAM,CAAC,aAAa,CACrB,CAAC;IACF,IAAI,UAAU,EAAE,CAAC;QACf,gEAAgE;QAChE,MAAM,iBAAiB,GAAG,IAAA,qBAAc,EAAC,UAAU,CAAC,SAAU,EAAE,KAAK,CAAC,CAAC;QACvE,MAAM,sBAAsB,GAAG,qBAAY,CAAC,GAAG,CAAC,wBAAwB,CAAE,CAAC;QAC3E,IAAI,sBAAsB,EAAE,CAAC;YAC3B,eAAM,CAAC,KAAK,CACV;gBACE,sBAAsB;gBACtB,SAAS,EAAE,UAAU,CAAC,SAAU;gBAChC,iBAAiB;aAClB,EACD,mDAAmD,UAAU,CAAC,SAAU,kBAAkB,iBAAiB,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,CAClI,CAAC;QACJ,CAAC;QACD,IACE,IAAA,aAAQ,EAAC,sBAAsB,CAAC;YAChC,iBAAiB,GAAG,sBAAsB,EAC1C,CAAC;YACD,eAAe;YACf,MAAM,mBAAQ,CAAC,QAAQ,CAAC;gBACtB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,KAAK,EAAE,QAAQ;gBACf,OAAO,EAAE,UAAU,CAAC,KAAK;aAC1B,CAAC,CAAC;YACH,iBAAiB;YACjB,MAAM,IAAA,uBAAa,EAAC;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,KAAK,EAAE,sBAAsB;gBAC7B,OAAO,EAAE,kFAAkF,sBAAsB,mNAAmN;aACrU,CAAC,CAAC;YACH,eAAM,CAAC,KAAK,CACV;gBACE,iBAAiB;gBACjB,sBAAsB;aACvB,EACD,uGAAuG,sBAAsB,OAAO,CACrI,CAAC;YACF,OAAO;QACT,CAAC;QACD,yCAAyC;QACzC,IACE,MAAM,IAAA,sDAA4B,EAChC,MAAM,CAAC,aAAc,EACrB,MAAM,CAAC,gBAAiB,CACzB,EACD,CAAC;YACD,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC/B,eAAM,CAAC,IAAI,CACT,oFAAoF,CACrF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,IAAA,uBAAa,EAAC;gBAClB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,KAAK,EAAE,mBAAmB;gBAC1B,OAAO,EAAE,IAAA,eAAO,EACd,6LAA6L,CAC9L;aACF,CAAC,CAAC;YACH,OAAO;QACT,CAAC;IACH,CAAC;IACD,MAAM,2BAA2B,GAC/B,MAAM,8BAA8B,CAAC,MAAM,CAAC,CAAC;IAC/C,MAAM,cAAc,GAAG,iBAAiB,CAAC,MAAM,CAAC,wBAAwB,CAAC,CAAC;IAC1E,eAAM,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;IAClD,IAAI,UAAU,GAAG,yBACf,MAAM,CAAC,YAAa,CAAC,QACvB,mHAAmH,CAAC;IACpH,UAAU;QACR,MAAM,CAAC,aAAa,KAAK,UAAU;YACjC,CAAC,CAAC,IAAA,eAAO,EACL,2IAA2I,CAC5I;YACH,CAAC,CAAC,IAAA,eAAO,EACL,uIAAuI,CACxI,CAAC;IACR,cAAc;IACd,UAAU,IAAI,IAAA,eAAO,EACnB;;;;;;;;;;;;wDAaE,MAAM,CAAC,YAAa,CAAC,aACvB;2EAEE,MAAM,CAAC,YAAa,CAAC,IACvB;CACH,CACE,CAAC;IACF,UAAU,IAAI,cAAc,CAAC;IAC7B,IAAI,MAAM,GAAG,UAAU,CAAC;IACxB,IAAI,YAAY,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,MAAM,EAAE,CAAC;QACxD,IAAI,KAAK,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACnE,KAAK,GAAG,KAAK,CAAC,MAAM,CAClB,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,IAAI,CAAC,WAAW,OAAO,OAAO,GAAG,CAAC,CACtE,CAAC;QACJ,CAAC;QACD,MAAM;YACJ,MAAM,CAAC,OAAO,CACZ,mBAAmB,EACnB,gCAAgC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CACpD,GAAG,IAAI,CAAC;IACb,CAAC;SAAM,CAAC;QACN,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,IAAI,UAAU,GAAG,EAAE,CAAC;IACpB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC/B,uBAAuB;QACvB,eAAM,CAAC,IAAI,CAAC,+BAA+B,MAAM,CAAC,gBAAiB,EAAE,CAAC,CAAC;IACzE,CAAC;SAAM,CAAC;QACN,UAAU,GAAG,IAAA,kCAAa,EAAC,MAAM,EAAE,YAAa,CAAC,CAAC;IACpD,CAAC;IACD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,UAAU,CAAC,CAAC;IACpD,MAAM,GAAG,MAAM,CAAC,OAAO,CACrB,gBAAgB,EAChB,IAAA,6BAAW,EAAC,MAAM,CAAC,GAAG,IAAA,4CAA0B,EAAC,YAAa,EAAE,MAAM,CAAC,CACxE,CAAC;IACF,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAA,2BAAS,EAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,kBAAkB,EAAE,IAAA,+BAAiB,EAAC,MAAM,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,IAAA,2BAAiB,EAAC,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC7E,IAAI,IAAA,aAAQ,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,OAAO,MAAM,EAAE,CAAC;IACvE,CAAC;IACD,IAAI,IAAA,aAAQ,EAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,MAAM,YAAY,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC;IAC9E,CAAC;IAED,MAAM,IAAI,2BAA2B,CAAC;IAEtC,eAAM,CAAC,KAAK,CAAC,WAAW,GAAG,MAAM,CAAC,CAAC;IAEnC,MAAM,GAAG,mBAAQ,CAAC,eAAe,CAAC,MAAM,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;IAE9D,IAAI,UAAU,EAAE,CAAC;QACf,eAAM,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;QACzC,sCAAsC;QACtC,MAAM,UAAU,GAAG,IAAA,kBAAQ,EAAC,MAAM,CAAC,CAAC;QACpC,IAAI,UAAU,CAAC,UAAU,EAAE,IAAI,KAAK,UAAU,EAAE,CAAC;YAC/C,eAAM,CAAC,KAAK,CAAC,iBAAiB,UAAU,CAAC,MAAM,yBAAyB,CAAC,CAAC;YAC1E,OAAO;QACT,CAAC;QACD,wBAAwB;QACxB,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,MAAM,mBAAQ,CAAC,QAAQ,CAAC;gBACtB,MAAM,EAAE,UAAU,CAAC,MAAM;gBACzB,OAAO,EAAE,UAAU,CAAC,KAAK;gBACzB,MAAM;aACP,CAAC,CAAC;YACH,eAAM,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,MAAM,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAClE,CAAC;QACD,OAAO;IACT,CAAC;IACD,eAAM,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC;IACvC,MAAM,MAAM,GAAa,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;IAC/C,IAAI,CAAC;QACH,IAAI,qBAAY,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC/B,eAAM,CAAC,IAAI,CAAC,qCAAqC,CAAC,CAAC;QACrD,CAAC;aAAM,CAAC;YACN,cAAc;YACd,MAAM,OAAO,GACX,MAAM,CAAC,eAAe,KAAK,SAAS;gBAClC,CAAC,CAAC,IAAA,iCAAwB,EAAC,MAAM,CAAC;gBAClC,CAAC,CAAC,MAAM,CAAC,iBAAkB,CAAC;YAChC,MAAM,EAAE,GAAG,MAAM,mBAAQ,CAAC,QAAQ,CAAC;gBACjC,YAAY,EAAE,MAAM,CAAC,gBAAiB;gBACtC,YAAY,EAAE,MAAM,CAAC,aAAc;gBACnC,OAAO;gBACP,MAAM;gBACN,MAAM;gBACN,iBAAiB,EAAE,IAAA,yBAAoB,EAAC;oBACtC,GAAG,MAAM;oBACT,SAAS,EAAE,KAAK;iBACjB,CAAC;aACH,CAAC,CAAC;YACH,eAAM,CAAC,IAAI,CACT,EAAE,EAAE,EAAE,iBAAiB,EAAG,CAAC,MAAM,EAAE,EAAE,EACrC,uBAAuB,CACxB,CAAC;YACF,MAAM,IAAA,8BAAe,EAAC,MAAM,EAAE,EAAG,CAAC,CAAC;QACrC,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IACE,GAAG,CAAC,QAAQ,EAAE,UAAU,KAAK,GAAG;YAChC,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAClD,+BAA+B,CAChC,EACD,CAAC;YACD,eAAM,CAAC,IAAI,CACT,+FAA+F,CAChG,CAAC;YACF,MAAM,SAAG,CAAC,YAAY,CAAC,MAAM,CAAC,gBAAiB,CAAC,CAAC;YACjD,OAAO;QACT,CAAC;QACD,MAAM,GAAG,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,wBAAkC;IAC3D,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,IAAI,wBAAwB,EAAE,CAAC;QAC7B,2BAA2B;QAC3B,cAAc,GAAG,oGAAoG,CAAC;IACxH,CAAC;IAED,OAAO,cAAc,CAAC;AACxB,CAAC;AAED,KAAK,UAAU,8BAA8B,CAC3C,MAAsB;IAEtB,MAAM,UAAU,GAAG,IAAA,iCAAwB,EAAC,MAAM,CAAC,CAAC;IACpD,MAAM,gBAAgB,GACpB,CAAC,MAAM,IAAA,aAAO,EAAC,UAAU,EAAE,MAAM,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAA,eAAQ,EAAC,gBAAgB,CAAC,CAAC;IAExC,OAAO,8BAA8B,IAAI,OAAO,CAAC;AACnD,CAAC","sourcesContent":["import { isNumber, isString } from '@sindresorhus/is';\nimport { GlobalConfig } from '../../../../config/global';\nimport type { RenovateConfig } from '../../../../config/types';\nimport { logger } from '../../../../logger';\nimport type { PackageFile } from '../../../../modules/manager/types';\nimport { platform } from '../../../../modules/platform';\nimport { ensureComment } from '../../../../modules/platform/comment';\nimport { hashBody } from '../../../../modules/platform/pr-body';\nimport { scm } from '../../../../modules/platform/scm';\nimport { getElapsedDays } from '../../../../util/date';\nimport { emojify } from '../../../../util/emoji';\nimport { getFile } from '../../../../util/git';\nimport { toSha256 } from '../../../../util/hash';\nimport * as template from '../../../../util/template';\nimport type { BranchConfig } from '../../../types';\nimport {\n getDepWarningsOnboardingPR,\n getErrors,\n getWarnings,\n} from '../../errors-warnings';\nimport { getPlatformPrOptions } from '../../update/pr';\nimport { prepareLabels } from '../../update/pr/labels';\nimport { addParticipants } from '../../update/pr/participants';\nimport { isOnboardingBranchConflicted } from '../branch/onboarding-branch-cache';\nimport {\n OnboardingState,\n getDefaultConfigFileName,\n getSemanticCommitPrTitle,\n} from '../common';\nimport { getBaseBranchDesc } from './base-branch';\nimport { getConfigDesc } from './config-description';\nimport { getExpectedPrList } from './pr-list';\n\nexport async function ensureOnboardingPr(\n config: RenovateConfig,\n packageFiles: Record<string, PackageFile[]> | null,\n branches: BranchConfig[],\n): Promise<void> {\n if (\n config.repoIsOnboarded === true ||\n OnboardingState.onboardingCacheValid ||\n (config.onboardingRebaseCheckbox && !OnboardingState.prUpdateRequested)\n ) {\n return;\n }\n logger.debug('ensureOnboardingPr()');\n logger.trace({ config });\n // TODO #22198\n const existingPr = await platform.getBranchPr(\n config.onboardingBranch!,\n config.defaultBranch,\n );\n if (existingPr) {\n // check if the existing pr crosses the onboarding autoclose age\n const ageOfOnboardingPr = getElapsedDays(existingPr.createdAt!, false);\n const onboardingAutoCloseAge = GlobalConfig.get('onboardingAutoCloseAge')!;\n if (onboardingAutoCloseAge) {\n logger.debug(\n {\n onboardingAutoCloseAge,\n createdAt: existingPr.createdAt!,\n ageOfOnboardingPr,\n },\n `Determining that the onboarding PR created at \\`${existingPr.createdAt!}\\` was created ${ageOfOnboardingPr.toFixed(2)} days ago`,\n );\n }\n if (\n isNumber(onboardingAutoCloseAge) &&\n ageOfOnboardingPr > onboardingAutoCloseAge\n ) {\n // close the pr\n await platform.updatePr({\n number: existingPr.number,\n state: 'closed',\n prTitle: existingPr.title,\n });\n // ensure comment\n await ensureComment({\n number: existingPr.number,\n topic: `Renovate is disabled`,\n content: `Renovate is disabled because the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days. To enable Renovate, you can either (a) change this PR's title to get a new onboarding PR, and merge the new onboarding PR, or (b) create a Renovate config file, and commit that file to your base branch.`,\n });\n logger.debug(\n {\n ageOfOnboardingPr,\n onboardingAutoCloseAge,\n },\n `Renovate is being disabled for this repository as the onboarding PR has been unmerged for more than ${onboardingAutoCloseAge} days`,\n );\n return;\n }\n // skip pr-update if branch is conflicted\n if (\n await isOnboardingBranchConflicted(\n config.defaultBranch!,\n config.onboardingBranch!,\n )\n ) {\n if (GlobalConfig.get('dryRun')) {\n logger.info(\n 'DRY-RUN: Would comment that Onboarding PR is conflicted and needs manual resolving',\n );\n return;\n }\n await ensureComment({\n number: existingPr.number,\n topic: 'Branch Conflicted',\n content: emojify(\n `:warning: This PR has a merge conflict which Renovate is unable to automatically resolve, so updates to this PR description are now paused. Please resolve the merge conflict manually.\\n\\n`,\n ),\n });\n return;\n }\n }\n const onboardingConfigHashComment =\n await getOnboardingConfigHashComment(config);\n const rebaseCheckBox = getRebaseCheckbox(config.onboardingRebaseCheckbox);\n logger.debug('Filling in onboarding PR template');\n let prTemplate = `Welcome to [Renovate](${\n config.productLinks!.homepage\n })! This is an onboarding PR to help you understand and configure settings before regular Pull Requests begin.\\n\\n`;\n prTemplate +=\n config.requireConfig === 'required'\n ? emojify(\n `:vertical_traffic_light: To activate Renovate, merge this Pull Request. To disable Renovate, simply close this Pull Request unmerged.\\n\\n`,\n )\n : emojify(\n `:vertical_traffic_light: Renovate will begin keeping your dependencies up-to-date only once you merge or close this Pull Request.\\n\\n`,\n );\n // TODO #22198\n prTemplate += emojify(\n `\n\n---\n{{PACKAGE FILES}}\n{{CONFIG}}\n{{BASEBRANCH}}\n{{PRLIST}}\n{{WARNINGS}}\n{{ERRORS}}\n\n---\n\n:question: Got questions? Check out Renovate's [Docs](${\n config.productLinks!.documentation\n }), particularly the Getting Started section.\nIf you need any further assistance then you can also [request help here](${\n config.productLinks!.help\n }).\n`,\n );\n prTemplate += rebaseCheckBox;\n let prBody = prTemplate;\n if (packageFiles && Object.entries(packageFiles).length) {\n let files: string[] = [];\n for (const [manager, managerFiles] of Object.entries(packageFiles)) {\n files = files.concat(\n managerFiles.map((file) => ` * \\`${file.packageFile}\\` (${manager})`),\n );\n }\n prBody =\n prBody.replace(\n '{{PACKAGE FILES}}',\n '### Detected Package Files\\n\\n' + files.join('\\n'),\n ) + '\\n';\n } else {\n prBody = prBody.replace('{{PACKAGE FILES}}\\n', '');\n }\n let configDesc = '';\n if (GlobalConfig.get('dryRun')) {\n // TODO: types (#22198)\n logger.info(`DRY-RUN: Would check branch ${config.onboardingBranch!}`);\n } else {\n configDesc = getConfigDesc(config, packageFiles!);\n }\n prBody = prBody.replace('{{CONFIG}}\\n', configDesc);\n prBody = prBody.replace(\n '{{WARNINGS}}\\n',\n getWarnings(config) + getDepWarningsOnboardingPR(packageFiles!, config),\n );\n prBody = prBody.replace('{{ERRORS}}\\n', getErrors(config));\n prBody = prBody.replace('{{BASEBRANCH}}\\n', getBaseBranchDesc(config));\n prBody = prBody.replace('{{PRLIST}}\\n', getExpectedPrList(config, branches));\n if (isString(config.prHeader)) {\n prBody = `${template.compile(config.prHeader, config)}\\n\\n${prBody}`;\n }\n if (isString(config.prFooter)) {\n prBody = `${prBody}\\n---\\n\\n${template.compile(config.prFooter, config)}\\n`;\n }\n\n prBody += onboardingConfigHashComment;\n\n logger.trace('prBody:\\n' + prBody);\n\n prBody = platform.massageMarkdown(prBody, config.rebaseLabel);\n\n if (existingPr) {\n logger.debug('Found open onboarding PR');\n // Check if existing PR needs updating\n const prBodyHash = hashBody(prBody);\n if (existingPr.bodyStruct?.hash === prBodyHash) {\n logger.debug(`Pull Request #${existingPr.number} does not need updating`);\n return;\n }\n // PR must need updating\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would update onboarding PR');\n } else {\n await platform.updatePr({\n number: existingPr.number,\n prTitle: existingPr.title,\n prBody,\n });\n logger.info({ pr: existingPr.number }, 'Onboarding PR updated');\n }\n return;\n }\n logger.debug('Creating onboarding PR');\n const labels: string[] = prepareLabels(config);\n try {\n if (GlobalConfig.get('dryRun')) {\n logger.info('DRY-RUN: Would create onboarding PR');\n } else {\n // TODO #22198\n const prTitle =\n config.semanticCommits === 'enabled'\n ? getSemanticCommitPrTitle(config)\n : config.onboardingPrTitle!;\n const pr = await platform.createPr({\n sourceBranch: config.onboardingBranch!,\n targetBranch: config.defaultBranch!,\n prTitle,\n prBody,\n labels,\n platformPrOptions: getPlatformPrOptions({\n ...config,\n automerge: false,\n }),\n });\n logger.info(\n { pr: `Pull Request #${pr!.number}` },\n 'Onboarding PR created',\n );\n await addParticipants(config, pr!);\n }\n } catch (err) {\n if (\n err.response?.statusCode === 422 &&\n err.response?.body?.errors?.[0]?.message?.startsWith(\n 'A pull request already exists',\n )\n ) {\n logger.warn(\n 'Onboarding PR already exists but cannot find it. It was probably created by a different user.',\n );\n await scm.deleteBranch(config.onboardingBranch!);\n return;\n }\n throw err;\n }\n}\n\nfunction getRebaseCheckbox(onboardingRebaseCheckbox?: boolean): string {\n let rebaseCheckBox = '';\n if (onboardingRebaseCheckbox) {\n // Create markdown checkbox\n rebaseCheckBox = `\\n\\n---\\n\\n - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, click this checkbox.\\n`;\n }\n\n return rebaseCheckBox;\n}\n\nasync function getOnboardingConfigHashComment(\n config: RenovateConfig,\n): Promise<string> {\n const configFile = getDefaultConfigFileName(config);\n const existingContents =\n (await getFile(configFile, config.onboardingBranch)) ?? '';\n const hash = toSha256(existingContents);\n\n return `\\n<!--renovate-config-hash:${hash}-->\\n`;\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.
|
|
4
|
+
"version": "42.90.1",
|
|
5
5
|
"type": "commonjs",
|
|
6
6
|
"bin": {
|
|
7
7
|
"renovate": "dist/renovate.js",
|
|
@@ -338,6 +338,7 @@
|
|
|
338
338
|
"vitest": "GIT_ALLOW_PROTOCOL=file LOG_LEVEL=fatal vitest run --logHeapUsage",
|
|
339
339
|
"lint": "run-s ls-lint type-check oxlint eslint prettier markdown-lint git-check doc-fence-check",
|
|
340
340
|
"lint-fix": "run-s oxlint-fix eslint-fix prettier-fix markdown-lint-fix",
|
|
341
|
+
"check": "tsx tools/check/index.ts",
|
|
341
342
|
"ls-lint": "ls-lint",
|
|
342
343
|
"markdown-lint": "markdownlint-cli2",
|
|
343
344
|
"markdown-lint-fix": "markdownlint-cli2 --fix",
|
package/renovate-schema.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
|
-
"title": "JSON schema for Renovate 42.
|
|
2
|
+
"title": "JSON schema for Renovate 42.90.1 config files (https://renovatebot.com/)",
|
|
3
3
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
4
|
-
"x-renovate-version": "42.
|
|
4
|
+
"x-renovate-version": "42.90.1",
|
|
5
5
|
"allowComments": true,
|
|
6
6
|
"type": "object",
|
|
7
7
|
"properties": {
|