UNPKG

renovate

Version:

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

73 lines 3.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.extractPackageFile = extractPackageFile; 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 yaml_1 = require("../../../util/yaml"); const extract_1 = require("../dockerfile/extract"); const schema_1 = require("./schema"); class LineMapper { imageLines; constructor(content, filter) { this.imageLines = [...content.split(regex_1.newlineRegex).entries()] .filter((entry) => filter.test(entry[1])) .map(([lineNumber, line]) => ({ lineNumber, line, used: false })); } pluckLineNumber(imageName) { const lineMeta = this.imageLines.find(({ line, used }) => !used && imageName && line.includes(imageName)); // istanbul ignore if if (!lineMeta) { return null; } lineMeta.used = true; // unset plucked lines so duplicates are skipped return lineMeta.lineNumber; } } function extractPackageFile(content, packageFile, extractConfig) { logger_1.logger.debug(`docker-compose.extractPackageFile(${packageFile})`); let config; try { config = (0, yaml_1.parseSingleYaml)(content, { customSchema: schema_1.DockerComposeFile, removeTemplates: true, }); } catch (err) { logger_1.logger.debug({ err, packageFile }, `Parsing Docker Compose config YAML failed`); return null; } try { const lineMapper = new LineMapper(content, (0, regex_1.regEx)(/^\s*image:/)); // docker-compose v1 places the services at the top level, // docker-compose v2+ places the services within a 'services' key // since docker-compose spec version 1.27, the 'version' key has // become optional and can no longer be used to differentiate // between v1 and v2. const services = config.services ?? config; const extensions = config.extensions ?? {}; // Image name/tags for services are only eligible for update if they don't // use variables and if the image is not built locally const deps = Object.values(services || /* istanbul ignore next: can never happen */ {}) .concat(Object.values(extensions)) .filter((service) => is_1.default.string(service?.image) && !service?.build) .map((service) => { const dep = (0, extract_1.getDep)(service.image, true, extractConfig.registryAliases); const lineNumber = lineMapper.pluckLineNumber(service.image); // istanbul ignore if if (!lineNumber) { return null; } return dep; }) .filter(is_1.default.truthy); logger_1.logger.trace({ deps }, 'Docker Compose image'); return { deps }; } catch (err) /* istanbul ignore next */ { logger_1.logger.debug({ packageFile, err }, 'Error extracting Docker Compose file'); return null; } } //# sourceMappingURL=extract.js.map