UNPKG

renovate

Version:

Automated dependency updates. Flexible so you don't need to be.

107 lines 5.81 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ModuleExtractor = exports.hostnameMatchRegex = exports.azureDevOpsSshRefMatchRegex = exports.gitTagsRefMatchRegex = exports.bitbucketRefMatchRegex = exports.githubRefMatchRegex = void 0; const tslib_1 = require("tslib"); const is_1 = tslib_1.__importDefault(require("@sindresorhus/is")); const logger_1 = require("../../../../../logger"); const regex_1 = require("../../../../../util/regex"); const bitbucket_tags_1 = require("../../../../datasource/bitbucket-tags"); const git_tags_1 = require("../../../../datasource/git-tags"); const github_tags_1 = require("../../../../datasource/github-tags"); const terraform_module_1 = require("../../../../datasource/terraform-module"); const base_1 = require("../../base"); exports.githubRefMatchRegex = (0, regex_1.regEx)(/github\.com([/:])(?<project>[^/]+\/[a-z0-9-_.]+).*\?(depth=\d+&)?ref=(?<tag>.*?)(&depth=\d+)?$/i); exports.bitbucketRefMatchRegex = (0, regex_1.regEx)(/(?:git::)?(?<url>(?:http|https|ssh)?(?::\/\/)?(?:.*@)?(?<path>bitbucket\.org\/(?<workspace>.*)\/(?<project>.*)\.git\/?(?<subfolder>.*)))\?(depth=\d+&)?ref=(?<tag>.*?)(&depth=\d+)?$/); exports.gitTagsRefMatchRegex = (0, regex_1.regEx)(/(?:git::)?(?<url>(?:(?:http|https|ssh):\/\/)?(?:.*@)?(?<path>[^:/]+[:/](?<project>[^/]+(?:\/[^/]+)*))(?:\.git)?)((\/\/)?(?<subfolder>[^?]*))?\?(depth=\d+&)?ref=(?<tag>.*?)(&depth=\d+)?$/); exports.azureDevOpsSshRefMatchRegex = (0, regex_1.regEx)(/(?:git::)?(?<url>git@ssh\.dev\.azure\.com:v3\/(?<organization>[^/]*)\/(?<project>[^/]*)\/(?<repository>[^/]*))(?<modulepath>.*)?\?(depth=\d+&)?ref=(?<tag>.*?)(&depth=\d+)?$/); exports.hostnameMatchRegex = (0, regex_1.regEx)(/^(?<hostname>[a-zA-Z\d]([a-zA-Z\d-]*\.)+[a-zA-Z\d]+)/); class ModuleExtractor extends base_1.DependencyExtractor { getCheckList() { return ['module']; } extract(hclRoot) { const modules = hclRoot.module; if (is_1.default.nullOrUndefined(modules)) { return []; } /* v8 ignore next 4 -- needs test */ if (!is_1.default.plainObject(modules)) { logger_1.logger.debug({ modules }, 'Terraform: unexpected `modules` value'); return []; } const dependencies = []; for (const [depName, moduleElements] of Object.entries(modules)) { for (const moduleElement of moduleElements) { const dep = { depName, depType: 'module', currentValue: moduleElement.version, managerData: { source: moduleElement.source, }, }; dependencies.push(this.analyseTerraformModule(dep)); } } return dependencies; } analyseTerraformModule(dep) { // TODO #22198 const source = dep.managerData.source; const githubRefMatch = exports.githubRefMatchRegex.exec(source); const bitbucketRefMatch = exports.bitbucketRefMatchRegex.exec(source); const gitTagsRefMatch = exports.gitTagsRefMatchRegex.exec(source); const azureDevOpsSshRefMatch = exports.azureDevOpsSshRefMatchRegex.exec(source); if (githubRefMatch?.groups) { dep.packageName = githubRefMatch.groups.project.replace((0, regex_1.regEx)(/\.git$/), ''); dep.depName = 'github.com/' + dep.packageName; dep.currentValue = githubRefMatch.groups.tag; dep.datasource = github_tags_1.GithubTagsDatasource.id; } else if (bitbucketRefMatch?.groups) { dep.depName = bitbucketRefMatch.groups.workspace + '/' + bitbucketRefMatch.groups.project; dep.packageName = dep.depName; dep.currentValue = bitbucketRefMatch.groups.tag; dep.datasource = bitbucket_tags_1.BitbucketTagsDatasource.id; } else if (azureDevOpsSshRefMatch?.groups) { dep.depName = `${azureDevOpsSshRefMatch.groups.organization}/${azureDevOpsSshRefMatch.groups.project}/${azureDevOpsSshRefMatch.groups.repository}${azureDevOpsSshRefMatch.groups.modulepath}`; dep.packageName = azureDevOpsSshRefMatch.groups.url; dep.currentValue = azureDevOpsSshRefMatch.groups.tag; dep.datasource = git_tags_1.GitTagsDatasource.id; } else if (gitTagsRefMatch?.groups) { if (gitTagsRefMatch.groups.subfolder) { logger_1.logger.debug('Terraform module contains subdirectory'); } dep.depName = gitTagsRefMatch.groups.path.replace('.git', ''); dep.packageName = gitTagsRefMatch.groups.url.replace('.git', ''); dep.currentValue = gitTagsRefMatch.groups.tag; dep.datasource = git_tags_1.GitTagsDatasource.id; } else if (source) { const moduleParts = source.split('//')[0].split('/'); if (moduleParts[0] === '.' || moduleParts[0] === '..') { dep.skipReason = 'local'; } else if (moduleParts.length >= 3) { const hostnameMatch = exports.hostnameMatchRegex.exec(source); if (hostnameMatch?.groups) { dep.registryUrls = [`https://${hostnameMatch.groups.hostname}`]; } dep.depName = moduleParts.join('/'); dep.datasource = terraform_module_1.TerraformModuleDatasource.id; } } else { logger_1.logger.debug({ dep }, 'terraform dep has no source'); dep.skipReason = 'no-source'; } return dep; } } exports.ModuleExtractor = ModuleExtractor; //# sourceMappingURL=modules.js.map