diff --git a/src/build-dep-graph.js b/src/build-dep-graph.js index 5ab3677c..8f70d17e 100644 --- a/src/build-dep-graph.js +++ b/src/build-dep-graph.js @@ -6,6 +6,8 @@ const glob = promisify(require('glob')); const semver = require('semver'); const dependencyTypes = require('./dependency-types'); const execa = require('execa'); +const fs = require('fs'); +const readFile = promisify(fs.readFile); function copyDeps(left, right) { for (let dependencyType of dependencyTypes) { @@ -13,7 +15,7 @@ function copyDeps(left, right) { } } -function firstPass(workspaceMeta, workspacePackageJson, packageDirs) { +async function firstPass(workspaceMeta, workspacePackageJson, packageDirs) { workspaceMeta.packageName = workspacePackageJson.name || 'Workspace Root'; workspaceMeta.version = workspacePackageJson.version; workspaceMeta.isPrivate = true; @@ -22,7 +24,7 @@ function firstPass(workspaceMeta, workspacePackageJson, packageDirs) { for (let packageDir of packageDirs) { let packageJson; try { - packageJson = require(path.join(packageDir, 'package')); + packageJson = JSON.parse(await readFile(path.join(packageDir, 'package.json'), 'utf8')); } catch (err) { // ignore empty folders continue; @@ -81,7 +83,7 @@ async function buildDepGraph(workspaceCwd) { let _1dFilesArray; if (!workspaces) { - _1dFilesArray = (await execa.command('pnpm recursive exec -- node -e "console.log(process.cwd())"', { cwd: workspaceCwd })).stdout + _1dFilesArray = (await execa('pnpm', ['recursive', 'exec', '--', 'node', '-e', 'console.log(process.cwd())'], { cwd: workspaceCwd })).stdout .split(/\r?\n/) .map(workspace => path.relative(workspaceCwd, workspace)); } else { @@ -104,7 +106,7 @@ async function buildDepGraph(workspaceCwd) { cwd: workspaceCwd, }; - firstPass(workspaceMeta, workspacePackageJson, packageDirs); + await firstPass(workspaceMeta, workspacePackageJson, packageDirs); secondPass(workspaceMeta); return workspaceMeta; diff --git a/test/release-test.js b/test/release-test.js index 95aa8021..2740b074 100644 --- a/test/release-test.js +++ b/test/release-test.js @@ -952,4 +952,70 @@ describe(_release, function() { expect(stdout).to.equal(['foo', 'bar'].join(EOL)); }); + + it('ignores prior version bumps and changelogs', async function() { + fixturify.writeSync(tmpPath, { + 'packages': { + 'my-app': { + 'package.json': stringifyJson({ + 'private': true, + 'name': 'my-app', + 'version': '1.0.0', + }), + }, + }, + 'package.json': stringifyJson({ + 'private': true, + 'name': 'my-monorepo', + 'version': '1.0.0', + 'workspaces': [ + 'packages/*', + ], + }), + }); + + await execa('git', ['add', '.'], { cwd: tmpPath }); + await execa('git', ['commit', '-m', 'chore: release'], { cwd: tmpPath }); + + await execa('git', ['tag', 'my-app@1.0.0'], { cwd: tmpPath }); + await execa('git', ['tag', 'my-monorepo@1.0.0'], { cwd: tmpPath }); + + fixturify.writeSync(tmpPath, { + 'packages': { + 'my-app': { + 'index.js': 'foo', + }, + }, + }); + + await execa('git', ['add', '.'], { cwd: tmpPath }); + await execa('git', ['commit', '-m', 'fix: foo'], { cwd: tmpPath }); + + await release(); + + let tags = await getTagsOnLastCommit(tmpPath); + + expect(tags).to.deep.equal([ + 'my-app@1.0.1', + ]); + + fixturify.writeSync(tmpPath, { + 'packages': { + 'my-app': { + 'index.js': 'bar', + }, + }, + }); + + await execa('git', ['add', '.'], { cwd: tmpPath }); + await execa('git', ['commit', '-m', 'fix: bar'], { cwd: tmpPath }); + + await release(); + + tags = await getTagsOnLastCommit(tmpPath); + + expect(tags).to.deep.equal([ + 'my-app@1.0.2', + ]); + }); });