renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
150 lines • 7.03 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.renovateRepository = renovateRepository;
exports.printRepositoryProblems = printRepositoryProblems;
const tslib_1 = require("tslib");
const fs_extra_1 = tslib_1.__importDefault(require("fs-extra"));
const global_1 = require("../../config/global");
const secrets_1 = require("../../config/secrets");
const error_messages_1 = require("../../constants/error-messages");
const expose_cjs_1 = require("../../expose.cjs");
const instrumentation_1 = require("../../instrumentation");
const reporting_1 = require("../../instrumentation/reporting");
const logger_1 = require("../../logger");
const remap_1 = require("../../logger/remap");
const docker_1 = require("../../util/exec/docker");
const fs_1 = require("../../util/fs");
const git_1 = require("../../util/git");
const semantic_1 = require("../../util/git/semantic");
const queue = tslib_1.__importStar(require("../../util/http/queue"));
const throttle = tslib_1.__importStar(require("../../util/http/throttle"));
const split_1 = require("../../util/split");
const stats_1 = require("../../util/stats");
const cache_1 = require("./cache");
const common_1 = require("./common");
const config_migration_1 = require("./config-migration");
const dependency_dashboard_1 = require("./dependency-dashboard");
const error_1 = tslib_1.__importDefault(require("./error"));
const finalize_1 = require("./finalize");
const prune_1 = require("./finalize/prune");
const init_1 = require("./init");
const common_2 = require("./onboarding/common");
const pr_1 = require("./onboarding/pr");
const process_1 = require("./process");
const result_1 = require("./result");
// istanbul ignore next
async function renovateRepository(repoConfig, canRetry = true) {
(0, split_1.splitInit)();
let config = global_1.GlobalConfig.set((0, secrets_1.applySecretsAndVariablesToConfig)({
config: repoConfig,
deleteVariables: false,
deleteSecrets: false,
}));
await (0, docker_1.removeDanglingContainers)();
(0, logger_1.setMeta)({ repository: config.repository });
logger_1.logger.info({ renovateVersion: expose_cjs_1.pkg.version }, 'Repository started');
logger_1.logger.trace({ config });
let repoResult;
queue.clear();
throttle.clear();
const localDir = global_1.GlobalConfig.get('localDir');
try {
await fs_extra_1.default.ensureDir(localDir);
logger_1.logger.debug('Using localDir: ' + localDir);
config = await (0, init_1.initRepo)(config);
(0, split_1.addSplit)('init');
const performExtract = config.repoIsOnboarded ||
!common_2.OnboardingState.onboardingCacheValid ||
common_2.OnboardingState.prUpdateRequested;
const extractResult = performExtract
? await (0, instrumentation_1.instrument)('extract', () => (0, process_1.extractDependencies)(config))
: emptyExtract(config);
(0, reporting_1.addExtractionStats)(config, extractResult);
const { branches, branchList, packageFiles } = extractResult;
if (config.semanticCommits === 'auto') {
config.semanticCommits = await (0, semantic_1.detectSemanticCommits)();
}
if (global_1.GlobalConfig.get('dryRun') !== 'lookup' &&
global_1.GlobalConfig.get('dryRun') !== 'extract') {
await (0, instrumentation_1.instrument)('onboarding', () => (0, pr_1.ensureOnboardingPr)(config, packageFiles, branches));
(0, split_1.addSplit)('onboarding');
const res = await (0, instrumentation_1.instrument)('update', () => (0, process_1.updateRepo)(config, branches));
(0, logger_1.setMeta)({ repository: config.repository });
(0, split_1.addSplit)('update');
if (performExtract) {
await (0, cache_1.setBranchCache)(branches); // update branch cache if performed extraction
}
if (res === 'automerged') {
if (canRetry) {
logger_1.logger.info('Restarting repository job after automerge result');
const recursiveRes = await renovateRepository(repoConfig, false);
return recursiveRes;
}
logger_1.logger.debug(`Automerged but already retried once`);
}
else {
const configMigrationRes = await (0, config_migration_1.configMigration)(config, branchList);
await (0, dependency_dashboard_1.ensureDependencyDashboard)(config, branches, packageFiles, configMigrationRes);
}
await (0, finalize_1.finalizeRepo)(config, branchList, repoConfig);
// TODO #22198
repoResult = (0, result_1.processResult)(config, res);
}
printRepositoryProblems(config.repository);
}
catch (err) /* istanbul ignore next */ {
(0, logger_1.setMeta)({ repository: config.repository });
const errorRes = await (0, error_1.default)(config, err);
const pruneWhenErrors = [
error_messages_1.REPOSITORY_DISABLED_BY_CONFIG,
error_messages_1.REPOSITORY_FORKED,
error_messages_1.REPOSITORY_NO_CONFIG,
];
if (pruneWhenErrors.includes(errorRes)) {
await (0, prune_1.pruneStaleBranches)(config, []);
}
repoResult = (0, result_1.processResult)(config, errorRes);
}
if (localDir && !repoConfig.persistRepoData) {
try {
await (0, fs_1.deleteLocalFile)('.');
}
catch (err) /* istanbul ignore if */ {
logger_1.logger.warn({ err }, 'localDir deletion error');
}
}
try {
await fs_extra_1.default.remove((0, fs_1.privateCacheDir)());
}
catch (err) /* istanbul ignore if */ {
logger_1.logger.warn({ err }, 'privateCacheDir deletion error');
}
const splits = (0, split_1.getSplits)();
logger_1.logger.debug(splits, 'Repository timing splits (milliseconds)');
stats_1.PackageCacheStats.report();
stats_1.DatasourceCacheStats.report();
stats_1.HttpStats.report();
stats_1.HttpCacheStats.report();
stats_1.LookupStats.report();
stats_1.ObsoleteCacheHitLogger.report();
stats_1.AbandonedPackageStats.report();
const cloned = (0, git_1.isCloned)();
logger_1.logger.info({ cloned, durationMs: splits.total }, 'Repository finished');
(0, remap_1.resetRepositoryLogLevelRemaps)();
return repoResult;
}
// istanbul ignore next: renovateRepository is ignored
function emptyExtract(config) {
return {
branches: [],
branchList: [config.onboardingBranch], // to prevent auto closing
packageFiles: {},
};
}
function printRepositoryProblems(repository) {
const repoProblems = (0, common_1.extractRepoProblems)(repository);
if (repoProblems.size) {
logger_1.logger.debug({ repoProblems: Array.from(repoProblems) }, 'repository problems');
}
}
//# sourceMappingURL=index.js.map