UNPKG

renovate

Version:

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

129 lines 4.53 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.updateArtifacts = updateArtifacts; const tslib_1 = require("tslib"); const shlex_1 = require("shlex"); const upath_1 = tslib_1.__importDefault(require("upath")); const error_messages_1 = require("../../../constants/error-messages"); const logger_1 = require("../../../logger"); const array_1 = require("../../../util/array"); const exec_1 = require("../../../util/exec"); const fs_1 = require("../../../util/fs"); const git_1 = require("../../../util/git"); const regex_1 = require("../../../util/regex"); const pluginRegex = (0, regex_1.regEx)(`^\\s*plugin\\s*(['"])(?<plugin>[^'"]+)(['"])`); function getPluginCommands(content) { const result = new Set(); const lines = content.split(regex_1.newlineRegex); lines.forEach((line) => { const match = pluginRegex.exec(line); if (match?.groups) { const { plugin } = match.groups; result.add(`gem install ${(0, shlex_1.quote)(plugin)}`); } }); return [...result]; } async function updateArtifacts({ packageFileName, updatedDeps, newPackageFileContent, config, }) { logger_1.logger.debug(`cocoapods.getArtifacts(${packageFileName})`); if (updatedDeps.length < 1) { logger_1.logger.debug('CocoaPods: empty update - returning null'); return null; } const lockFileName = (0, fs_1.getSiblingFileName)(packageFileName, 'Podfile.lock'); try { await (0, fs_1.writeLocalFile)(packageFileName, newPackageFileContent); } catch (err) { logger_1.logger.warn({ err }, 'Podfile could not be written'); return [ { artifactError: { lockFile: lockFileName, stderr: err.message, }, }, ]; } const existingLockFileContent = await (0, fs_1.readLocalFile)(lockFileName, 'utf8'); if (!existingLockFileContent) { logger_1.logger.debug(`Lockfile not found: ${lockFileName}`); return null; } const match = (0, regex_1.regEx)(/^COCOAPODS: (?<cocoapodsVersion>.*)$/m).exec(existingLockFileContent); const cocoapods = match?.groups?.cocoapodsVersion ?? null; const cmd = [...getPluginCommands(newPackageFileContent), 'pod install']; const execOptions = { cwdFile: packageFileName, extraEnv: { CP_HOME_DIR: await (0, fs_1.ensureCacheDir)('cocoapods'), }, docker: {}, toolConstraints: [ { toolName: 'ruby', }, { toolName: 'cocoapods', constraint: cocoapods, }, ], }; try { await (0, exec_1.exec)(cmd, execOptions); } catch (err) { // istanbul ignore if if (err.message === error_messages_1.TEMPORARY_ERROR) { throw err; } return [ { artifactError: { lockFile: lockFileName, stderr: err.stderr ?? err.stdout ?? err.message, }, }, ]; } const status = await (0, git_1.getRepoStatus)(); if (!status.modified.includes(lockFileName)) { return null; } logger_1.logger.debug(`Returning updated lockfile: ${lockFileName}`); const lockFileContent = await (0, fs_1.readLocalFile)(lockFileName); const res = [ { file: { type: 'addition', path: lockFileName, contents: lockFileContent, }, }, ]; const podsDir = upath_1.default.join(upath_1.default.dirname(packageFileName), 'Pods'); const podsManifestFileName = upath_1.default.join(podsDir, 'Manifest.lock'); if (await (0, fs_1.readLocalFile)(podsManifestFileName, 'utf8')) { for (const f of status.modified.concat(status.not_added)) { if (f.startsWith(podsDir)) { res.push({ file: { type: 'addition', path: f, contents: await (0, fs_1.readLocalFile)(f), }, }); } } for (const f of (0, array_1.coerceArray)(status.deleted)) { res.push({ file: { type: 'deletion', path: f, }, }); } } return res; } //# sourceMappingURL=artifacts.js.map