renovate
Version:
Automated dependency updates. Flexible so you don't need to be.
102 lines • 4.59 kB
JavaScript
"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 buildpacks_registry_1 = require("../../datasource/buildpacks-registry");
const semver_1 = require("../../versioning/semver");
const extract_1 = require("../dockerfile/extract");
const schema_1 = require("./schema");
const dockerPrefix = (0, regex_1.regEx)(/^docker:\/?\//);
const dockerRef = (0, regex_1.regEx)(/^((?:[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?(?:\.[a-z\d](?:[a-z\d-]{0,61}[a-z\d])?)*)(?::\d{2,5}\/)?)?[a-z\d]+((\.|_|__|-+)[a-z\d]+)*(\/[a-z\d]+((\.|_|__|-+)[a-z\d]+)*)*(?::(\w[\w.-]{0,127})(?:@sha256:[A-Fa-f\d]{32,})?|@sha256:[A-Fa-f\d]{32,})$/);
function isDockerRef(ref) {
if (ref.startsWith('docker:/') || dockerRef.test(ref)) {
return true;
}
return false;
}
const buildpackRegistryPrefix = 'urn:cnb:registry:';
const buildpackRegistryId = (0, regex_1.regEx)(/^[a-z0-9\-.]+\/[a-z0-9\-.]+(?:@(?<version>.+))?$/);
function isBuildpackRegistryId(ref) {
const bpRegistryMatch = buildpackRegistryId.exec(ref);
if (!bpRegistryMatch) {
return false;
}
else if (!bpRegistryMatch.groups?.version) {
return true;
}
return (0, semver_1.isVersion)(bpRegistryMatch.groups.version);
}
function isBuildpackRegistryRef(ref) {
return isBuildpackRegistryId(ref) || ref.startsWith(buildpackRegistryPrefix);
}
function parseProjectToml(content, packageFile) {
const res = schema_1.ProjectDescriptorToml.safeParse(content);
if (res.success) {
return res.data;
}
logger_1.logger.debug({ packageFile, err: res.error }, 'Failed to parse buildpacks project descriptor TOML');
return null;
}
function extractPackageFile(content, packageFile, config) {
const deps = [];
const descriptor = parseProjectToml(content, packageFile);
if (!descriptor) {
return null;
}
if (descriptor.io?.buildpacks?.builder &&
isDockerRef(descriptor.io.buildpacks.builder)) {
const dep = (0, extract_1.getDep)(descriptor.io.buildpacks.builder.replace(dockerPrefix, ''), true, config.registryAliases);
logger_1.logger.trace({
depName: dep.depName,
currentValue: dep.currentValue,
currentDigest: dep.currentDigest,
}, 'Cloud Native Buildpacks builder');
deps.push({ ...dep, commitMessageTopic: 'builder {{depName}}' });
}
if (descriptor.io?.buildpacks?.group &&
is_1.default.array(descriptor.io.buildpacks.group)) {
for (const group of descriptor.io.buildpacks.group) {
if ((0, schema_1.isBuildpackByURI)(group) && isDockerRef(group.uri)) {
const dep = (0, extract_1.getDep)(group.uri.replace(dockerPrefix, ''), true, config.registryAliases);
logger_1.logger.trace({
depName: dep.depName,
currentValue: dep.currentValue,
currentDigest: dep.currentDigest,
}, 'Cloud Native Buildpack');
deps.push(dep);
}
else if ((0, schema_1.isBuildpackByURI)(group) && isBuildpackRegistryRef(group.uri)) {
const dependency = group.uri.replace(buildpackRegistryPrefix, '');
if (dependency.includes('@')) {
const version = dependency.split('@')[1];
const dep = {
datasource: buildpacks_registry_1.BuildpacksRegistryDatasource.id,
currentValue: version,
packageName: dependency.split('@')[0],
autoReplaceStringTemplate: '{{depName}}{{#if newValue}}:{{newValue}}{{/if}}{{#if newDigest}}@{{newDigest}}{{/if}}',
};
deps.push(dep);
}
}
else if ((0, schema_1.isBuildpackByName)(group)) {
const version = group.version;
if (version) {
const dep = {
datasource: buildpacks_registry_1.BuildpacksRegistryDatasource.id,
currentValue: version,
packageName: group.id,
};
deps.push(dep);
}
}
}
}
if (!deps.length) {
return null;
}
return { deps };
}
//# sourceMappingURL=extract.js.map