renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
80 lines (79 loc) • 3.03 kB
JavaScript
import { matchRegexOrGlobList } from "../../util/string-match.js";
import { logger } from "../../logger/index.js";
import { platform } from "../../modules/platform/index.js";
import { isString } from "@sindresorhus/is";
//#region lib/workers/global/autodiscover.ts
// istanbul ignore next
function repoName(value) {
return String(isString(value) ? value : value.repository).toLowerCase();
}
async function autodiscoverRepositories(config) {
const { autodiscoverFilter } = config;
if (config.platform === "local") {
if (config.repositories?.length) {
logger.debug({ repositories: config.repositories }, "Found repositories when in local mode");
throw new Error("Invalid configuration: repositories list not supported when platform=local");
}
config.repositories = ["local"];
return config;
}
if (!config.autodiscover) {
if (!config.repositories?.length) logger.warn("No repositories found - did you want to run with flag --autodiscover?");
return config;
}
const autodiscoverConfig = {
topics: config.autodiscoverTopics,
sort: config.autodiscoverRepoSort,
order: config.autodiscoverRepoOrder,
includeMirrors: config.includeMirrors,
namespaces: config.autodiscoverNamespaces,
projects: config.autodiscoverProjects
};
logger.debug({ autodiscoverConfig }, `Attempting to autodiscover ${config.platform} repositories`);
let discovered = await platform.getRepos(autodiscoverConfig);
if (!discovered?.length) {
logger.debug("No repositories were autodiscovered");
return config;
}
logger.debug(`Autodiscovered ${discovered.length} repositories`);
logger.trace({
length: discovered.length,
repositories: discovered
}, `Autodiscovered repositories`);
if (autodiscoverFilter) {
logger.debug({ autodiscoverFilter }, "Applying autodiscoverFilter");
discovered = applyFilters(discovered, isString(autodiscoverFilter) ? [autodiscoverFilter] : autodiscoverFilter);
if (!discovered.length) {
logger.debug("None of the discovered repositories matched the filter");
return config;
}
}
logger.info({
length: discovered.length,
repositories: discovered
}, `Autodiscovered repositories`);
// istanbul ignore if
if (config.repositories?.length) {
logger.debug("Checking autodiscovered repositories against configured repositories");
for (const configuredRepo of config.repositories) {
const repository = repoName(configuredRepo);
let found = false;
for (let i = discovered.length - 1; i > -1; i -= 1) if (repository === repoName(discovered[i])) {
found = true;
logger.debug({ repository }, "Using configured repository settings");
discovered[i] = configuredRepo;
}
if (!found) logger.warn({ repository }, "Configured repository is in not in autodiscover list");
}
}
return {
...config,
repositories: discovered
};
}
function applyFilters(repos, filters) {
return repos.filter((repo) => matchRegexOrGlobList(repo, filters));
}
//#endregion
export { applyFilters, autodiscoverRepositories };
//# sourceMappingURL=autodiscover.js.map