diff --git a/lib/workers/branch/lock-files.js b/lib/workers/branch/lock-files.js index f57e7b6d3e7d827ab3a11a249aae46c5affd88b3..586897e9b5366772443dbfcc397d3ae63c851008 100644 --- a/lib/workers/branch/lock-files.js +++ b/lib/workers/branch/lock-files.js @@ -95,12 +95,12 @@ async function writeExistingFiles(config) { const { logger } = config; if (config.npmrc) { logger.debug('Writing repo .npmrc'); - await fs.outputFile(path.join(config.tmpDir.name, '.npmrc'), config.npmrc); + await fs.outputFile(path.join(config.tmpDir.path, '.npmrc'), config.npmrc); } if (config.yarnrc) { logger.debug('Writing repo .yarnrc'); await fs.outputFile( - path.join(config.tmpDir.name, '.yarnrc'), + path.join(config.tmpDir.path, '.yarnrc'), config.yarnrc ); } @@ -109,7 +109,7 @@ async function writeExistingFiles(config) { } for (const packageFile of config.packageFiles) { const basedir = path.join( - config.tmpDir.name, + config.tmpDir.path, path.dirname(packageFile.packageFile) ); if (packageFile.packageFile.endsWith('package.json')) { @@ -184,7 +184,7 @@ async function writeUpdatedPackageFiles(config) { delete massagedFile.engines; delete massagedFile.scripts; await fs.outputFile( - path.join(config.tmpDir.name, packageFile.name), + path.join(config.tmpDir.path, packageFile.name), JSON.stringify(massagedFile) ); } @@ -211,7 +211,7 @@ async function getUpdatedLockFiles(config) { for (const lockFileDir of dirs.packageLockFileDirs) { logger.debug(`Generating package-lock.json for ${lockFileDir}`); const newContent = await npm.generateLockFile( - path.join(config.tmpDir.name, lockFileDir), + path.join(config.tmpDir.path, lockFileDir), logger ); if (newContent) { @@ -237,7 +237,7 @@ async function getUpdatedLockFiles(config) { for (const lockFileDir of dirs.yarnLockFileDirs) { logger.debug(`Generating yarn.lock for ${lockFileDir}`); const newContent = await yarn.generateLockFile( - path.join(config.tmpDir.name, lockFileDir), + path.join(config.tmpDir.path, lockFileDir), logger ); if (newContent) { diff --git a/lib/workers/branch/npm.js b/lib/workers/branch/npm.js index c2ce0bb1bd88495acac00a490b4be3e89ba57d82..599432b32452f22ebbc7236f5c95c2dce72c0a71 100644 --- a/lib/workers/branch/npm.js +++ b/lib/workers/branch/npm.js @@ -65,7 +65,10 @@ async function generateLockFile(tmpDir, logger) { logger.debug(`npm stderr:\n${stderr}`); const duration = process.hrtime(startTime); const seconds = Math.round(duration[0] + duration[1] / 1e9); - lockFile = fs.readFileSync(path.join(tmpDir, 'package-lock.json'), 'utf8'); + lockFile = await fs.readFile( + path.join(tmpDir, 'package-lock.json'), + 'utf8' + ); logger.info( { seconds, type: 'package-lock.json', stdout, stderr }, 'Generated lockfile' diff --git a/lib/workers/branch/yarn.js b/lib/workers/branch/yarn.js index 212d910cb62b8518703b6a43383a939b82d43064..51b06610349b9bb0658de56c5e223a4b725b56da 100644 --- a/lib/workers/branch/yarn.js +++ b/lib/workers/branch/yarn.js @@ -66,7 +66,7 @@ async function generateLockFile(tmpDir, logger) { logger.debug(`yarn stderr:\n${stderr}`); const duration = process.hrtime(startTime); const seconds = Math.round(duration[0] + duration[1] / 1e9); - lockFile = fs.readFileSync(path.join(tmpDir, 'yarn.lock'), 'utf8'); + lockFile = await fs.readFile(path.join(tmpDir, 'yarn.lock'), 'utf8'); logger.info( { seconds, type: 'yarn.lock', stdout, stderr }, 'Generated lockfile' diff --git a/lib/workers/repository/index.js b/lib/workers/repository/index.js index 318b024a78021ca4ebae833c090bbf98ec10c7d8..d1a5b54a22d73d613d414fd3fa767e84b3b705f2 100644 --- a/lib/workers/repository/index.js +++ b/lib/workers/repository/index.js @@ -1,5 +1,5 @@ const convertHrTime = require('convert-hrtime'); -const tmp = require('tmp'); +const tmp = require('tmp-promise'); // Workers const branchWorker = require('../branch'); // children @@ -28,7 +28,7 @@ async function renovateRepository(repoConfig, token) { let config = { ...repoConfig }; const { logger } = config; logger.trace({ config }, 'renovateRepository'); - config.tmpDir = tmp.dirSync({ unsafeCleanup: true }); + config.tmpDir = await tmp.dir({ unsafeCleanup: true }); config.errors = []; config.warnings = []; async function renovateRepositoryInner(count = 1) { @@ -166,5 +166,5 @@ async function renovateRepository(repoConfig, token) { logger.debug({ err }); } } - config.tmpDir.removeCallback(); + config.tmpDir.cleanup(); } diff --git a/package.json b/package.json index 735c25ea7faf52bc3fc348f21316e843c6cb3378..4a20f134e46556591d9ab6b55768de82d89a22a5 100644 --- a/package.json +++ b/package.json @@ -73,7 +73,7 @@ "semver-stable": "2.0.4", "semver-utils": "1.1.1", "showdown": "1.7.6", - "tmp": "0.0.33", + "tmp-promise": "1.0.3", "traverse": "0.6.6", "yarn": "1.2.1" }, diff --git a/test/workers/branch/lock-files.spec.js b/test/workers/branch/lock-files.spec.js index 333077a47649d51b411d63898d860d76f7022008..cbec321bb0e411135d17ceca4b3144b5ef86c745 100644 --- a/test/workers/branch/lock-files.spec.js +++ b/test/workers/branch/lock-files.spec.js @@ -181,7 +181,7 @@ describe('workers/branch/lock-files', () => { config = { ...defaultConfig, logger, - tmpDir: { name: 'some-tmp-dir' }, + tmpDir: { path: 'some-tmp-dir' }, }; fs.outputFile = jest.fn(); fs.remove = jest.fn(); @@ -234,7 +234,7 @@ describe('workers/branch/lock-files', () => { config = { ...defaultConfig, logger, - tmpDir: { name: 'some-tmp-dir' }, + tmpDir: { path: 'some-tmp-dir' }, }; fs.outputFile = jest.fn(); }); @@ -281,7 +281,7 @@ describe('workers/branch/lock-files', () => { getFileContent: jest.fn(() => 'some lock file contents'), }, logger, - tmpDir: { name: 'some-tmp-dir' }, + tmpDir: { path: 'some-tmp-dir' }, }; npm.generateLockFile = jest.fn(); npm.generateLockFile.mockReturnValue('some lock file contents'); diff --git a/test/workers/branch/npm.spec.js b/test/workers/branch/npm.spec.js index 9a68104620090c8ed8afe7a1c55acdf309b37d60..b5319b7e37b21f145d889f54900dc709541ea8c4 100644 --- a/test/workers/branch/npm.spec.js +++ b/test/workers/branch/npm.spec.js @@ -18,9 +18,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await npmHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('catches errors', async () => { @@ -29,11 +29,11 @@ describe('generateLockFile', () => { stdout: '', stderror: 'some-error', }); - fs.readFileSync = jest.fn(() => { + fs.readFile = jest.fn(() => { throw new Error('not found'); }); const lockFile = await npmHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toBe(null); }); it('finds npm embedded in renovate', async () => { @@ -48,9 +48,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await npmHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('finds npm globally', async () => { @@ -66,9 +66,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await npmHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('uses fallback npm', async () => { @@ -86,9 +86,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await npmHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); }); diff --git a/test/workers/branch/yarn.spec.js b/test/workers/branch/yarn.spec.js index 5ee773ef1657a0912fe620e8ea8dacca9a42e990..8cfb1bcc64b8618a88694ede181328dcd90fff1a 100644 --- a/test/workers/branch/yarn.spec.js +++ b/test/workers/branch/yarn.spec.js @@ -18,9 +18,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await yarnHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('catches errors', async () => { @@ -29,11 +29,11 @@ describe('generateLockFile', () => { stdout: '', stderror: 'some-error', }); - fs.readFileSync = jest.fn(() => { + fs.readFile = jest.fn(() => { throw new Error('not found'); }); const lockFile = await yarnHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toBe(null); }); it('finds yarn embedded in renovate', async () => { @@ -48,9 +48,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await yarnHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('finds yarn globally', async () => { @@ -66,9 +66,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await yarnHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); it('uses fallback yarn', async () => { @@ -86,9 +86,9 @@ describe('generateLockFile', () => { stdout: '', stderror: '', }); - fs.readFileSync = jest.fn(() => 'package-lock-contents'); + fs.readFile = jest.fn(() => 'package-lock-contents'); const lockFile = await yarnHelper.generateLockFile('some-dir', logger); - expect(fs.readFileSync.mock.calls.length).toEqual(1); + expect(fs.readFile.mock.calls.length).toEqual(1); expect(lockFile).toEqual('package-lock-contents'); }); }); diff --git a/yarn.lock b/yarn.lock index f26ac9227f54d95c0dc4dc29c60f1529a6c29224..09d2538daeeab9e1cff4dddeaf0f04b034ae48a1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -558,7 +558,7 @@ block-stream@*: dependencies: inherits "~2.0.0" -bluebird@^3.5.0, bluebird@~3.5.0: +bluebird@^3.3.1, bluebird@^3.5.0, bluebird@~3.5.0: version "3.5.1" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.1.tgz#d9551f9de98f1fcda1e683d17ee91a0602ee2eb9" @@ -3866,7 +3866,7 @@ os-locale@^2.0.0: lcid "^1.0.0" mem "^1.1.0" -os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" @@ -5092,7 +5092,20 @@ timed-out@^4.0.0: version "4.0.1" resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" -tmp@0.0.33, tmp@^0.0.33: +tmp-promise@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tmp-promise/-/tmp-promise-1.0.3.tgz#3b450927ab78c6aedca5e628c677f536cae38bc5" + dependencies: + bluebird "^3.3.1" + tmp "0.0.31" + +tmp@0.0.31: + version "0.0.31" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" + dependencies: + os-tmpdir "~1.0.1" + +tmp@^0.0.33: version "0.0.33" resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" dependencies: