UNPKG

renovate

Version:

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

81 lines (80 loc) 2.9 kB
import "../../../constants/error-messages.js"; import { escapeRegExp, regEx } from "../../../util/regex.js"; import { logger } from "../../../logger/index.js"; import { ensureCacheDir, readLocalFile } from "../../../util/fs/index.js"; import { exec } from "../../../util/exec/index.js"; import { extrasPattern } from "./extract.js"; import { isNonEmptyArray } from "@sindresorhus/is"; import { quote } from "shlex"; //#region lib/modules/manager/pip_requirements/artifacts.ts /** * Create a RegExp that matches the first dependency pattern for * the named dependency that is followed by package hashes. * * The regular expression defines a single named group `depConstraint` * that holds the dependency constraint without the hash specifiers. * The substring matched by this named group will start with the dependency * name and end with a non-whitespace character. * * @param depName the name of the dependency */ function dependencyAndHashPattern(depName) { return regEx(`^\\s*(?<depConstraint>${escapeRegExp(depName)}${extrasPattern}\\s*==.*?\\S)\\s+--hash=`, "m"); } async function updateArtifacts({ packageFileName, updatedDeps, newPackageFileContent, config }) { logger.debug(`pip_requirements.updateArtifacts(${packageFileName})`); if (!isNonEmptyArray(updatedDeps)) { logger.debug("No updated pip_requirements deps - returning null"); return null; } try { const cmd = []; const rewrittenContent = newPackageFileContent.replace(regEx(/\\\n/g), ""); for (const dep of updatedDeps) { if (!dep.depName) continue; const depAndHashMatch = dependencyAndHashPattern(dep.depName).exec(rewrittenContent); if (depAndHashMatch) { const depConstraint = depAndHashMatch.groups.depConstraint; cmd.push(`hashin ${quote(depConstraint)} -r ${quote(packageFileName)}`); } } if (!cmd.length) { logger.debug("No hashin commands to run - returning"); return null; } await exec(cmd, { cwdFile: ".", docker: {}, toolConstraints: [{ toolName: "python", constraint: config.constraints?.python }, { toolName: "hashin", constraint: config.constraints?.hashin }], extraEnv: { PIP_CACHE_DIR: await ensureCacheDir("pip") } }); const newContent = await readLocalFile(packageFileName, "utf8"); if (newContent === newPackageFileContent) { logger.debug(`${packageFileName} is unchanged`); return null; } logger.debug(`Returning updated ${packageFileName}`); return [{ file: { type: "addition", path: packageFileName, contents: newContent } }]; } catch (err) { // istanbul ignore if if (err.message === "temporary-error") throw err; logger.debug({ err }, `Failed to update ${packageFileName} file`); return [{ artifactError: { fileName: packageFileName, stderr: `${String(err.stdout)}\n${String(err.stderr)}` } }]; } } //#endregion export { updateArtifacts }; //# sourceMappingURL=artifacts.js.map