UNPKG

renovate

Version:

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

94 lines (93 loc) 4.47 kB
import "../../../constants/error-messages.js"; import { getEnv } from "../../../util/env.js"; import { logger } from "../../../logger/index.js"; import { parseUrl } from "../../../util/url.js"; import { deleteLocalFile, readLocalFile, writeLocalFile } from "../../../util/fs/index.js"; import { exec } from "../../../util/exec/index.js"; import { getRepoStatus } from "../../../util/git/index.js"; import { extractPackageFileFlags } from "../pip_requirements/common.js"; import { extractHeaderCommand, extractPythonVersion, getExecOptions, getRegistryCredVarsFromPackageFiles, matchManager } from "./common.js"; import { inferCommandExecDir } from "./utils.js"; import { quote } from "shlex"; import upath from "upath"; //#region lib/modules/manager/pip-compile/artifacts.ts function haveCredentialsInPipEnvironmentVariables() { const env = getEnv(); if (env.PIP_INDEX_URL) { const indexUrl = parseUrl(env.PIP_INDEX_URL); if (!indexUrl) return true; if (!!indexUrl.username || !!indexUrl.password) return true; } if (env.PIP_EXTRA_INDEX_URL) return env.PIP_EXTRA_INDEX_URL.split(" ").some((urlString) => { const url = parseUrl(urlString); if (!url) return true; return !!url.username || !!url.password; }); return false; } function constructPipCompileCmd(compileArgs, upgradePackages = []) { if (compileArgs.commandType === "custom") throw new Error("Detected custom command, header modified or set by CUSTOM_COMPILE_COMMAND"); if (!compileArgs.outputFile) logger.debug(`pip-compile: implicit output file`); if (compileArgs.commandType === "pip-compile" && !compileArgs.noEmitIndexUrl && !compileArgs.emitIndexUrl && haveCredentialsInPipEnvironmentVariables()) compileArgs.argv.splice(1, 0, "--no-emit-index-url"); for (const dep of upgradePackages) compileArgs.argv.push(`--upgrade-package=${quote(`${dep.depName}==${dep.newVersion}`)}`); return compileArgs.argv.map(quote).join(" "); } async function updateArtifacts({ packageFileName: inputFileName, newPackageFileContent: newInputContent, updatedDeps, config }) { if (!config.lockFiles) { logger.warn({ packageFileName: inputFileName }, "pip-compile: No lock files associated with a package file"); return null; } logger.debug(`pipCompile.updateArtifacts(${inputFileName}->${JSON.stringify(config.lockFiles)})`); const result = []; for (const outputFileName of config.lockFiles) { const existingOutput = await readLocalFile(outputFileName, "utf8"); if (!existingOutput) { logger.debug("pip-compile: No output file found"); return null; } try { await writeLocalFile(inputFileName, newInputContent); if (config.isLockFileMaintenance) await deleteLocalFile(outputFileName); const compileArgs = extractHeaderCommand(existingOutput, outputFileName); let pythonVersion; if (compileArgs.commandType === "uv") pythonVersion = compileArgs.pythonVersion; else pythonVersion = extractPythonVersion(existingOutput, outputFileName); const cwd = inferCommandExecDir(outputFileName, compileArgs.outputFile); const upgradePackages = updatedDeps.filter((dep) => dep.isLockfileUpdate); const packageFiles = []; for (const name of compileArgs.sourceFiles) if (matchManager(name) === "pip_requirements") { const content = await readLocalFile(upath.join(cwd, name), "utf8"); if (content) { const packageFile = extractPackageFileFlags(content); packageFiles.push(packageFile); } } const cmd = constructPipCompileCmd(compileArgs, upgradePackages); const execOptions = await getExecOptions(config, compileArgs.commandType, cwd, getRegistryCredVarsFromPackageFiles(packageFiles), pythonVersion); logger.trace({ cwd, cmd }, "pip-compile command"); logger.trace({ env: execOptions.extraEnv }, "pip-compile extra env vars"); await exec(cmd, execOptions); if ((await getRepoStatus())?.modified.includes(outputFileName)) result.push({ file: { type: "addition", path: outputFileName, contents: await readLocalFile(outputFileName, "utf8") } }); } catch (err) { // istanbul ignore if if (err.message === "temporary-error") throw err; logger.debug({ err }, "pip-compile: Failed to run command"); result.push({ artifactError: { fileName: outputFileName, stderr: err.message } }); } } logger.debug("pip-compile: Returning updated output file(s)"); return result.length === 0 ? null : result; } //#endregion export { updateArtifacts }; //# sourceMappingURL=artifacts.js.map