monorepo-next 9.2.6 → 9.3.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -115,6 +115,8 @@ Options:
115
115
  --version Show version number [boolean]
116
116
  --silent Don't print logs and errors
117
117
  [boolean] [default: false]
118
+ --dry-run log to console instead of modifying files
119
+ [boolean] [default: false]
118
120
  --push git push + tags when done
119
121
  [boolean] [default: true]
120
122
  --publish npm publish when done[boolean] [default: true]
@@ -10,6 +10,7 @@ module.exports = {
10
10
  describe: 'release all packages as needed',
11
11
  builder: {
12
12
  'silent': commonArgs['silent'],
13
+ 'dry-run': commonArgs['dry-run'],
13
14
  'push': {
14
15
  describe: 'git push + tags when done',
15
16
  type: 'boolean',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "monorepo-next",
3
- "version": "9.2.6",
3
+ "version": "9.3.1",
4
4
  "description": "Detach monorepo packages from normal linking",
5
5
  "bin": {
6
6
  "next": "bin/next.js"
@@ -68,7 +68,7 @@
68
68
  "minimatch": "^5.0.0",
69
69
  "npm-packlist": "^6.0.0",
70
70
  "rfc6902": "^5.0.0",
71
- "semver": "7.5.0",
71
+ "semver": "7.5.1",
72
72
  "standard-version": "9.5.0",
73
73
  "superset": "^2.0.1",
74
74
  "tmp": "0.2.1",
@@ -86,6 +86,7 @@
86
86
  "eslint-plugin-mocha": "^10.0.0",
87
87
  "eslint-plugin-node": "^11.0.0",
88
88
  "fixturify": "^3.0.0",
89
+ "fs-extra": "^11.1.1",
89
90
  "git-fixtures": "^5.0.0",
90
91
  "mocha": "^10.0.0",
91
92
  "mocha-helpers": "^7.0.0",
@@ -24,11 +24,14 @@ async function getPackageChangedFiles({
24
24
  // Be careful you don't accidentally use `...` instead of `..`.
25
25
  // `...` finds the merge-base and uses that instead of `fromCommit`.
26
26
  // https://stackoverflow.com/a/60496462
27
+ //
28
+ // I tried using ls-tree instead of diff when it is a new package (fromCommit is first commit in repo),
29
+ // but it took the same amount of time.
27
30
  let committedChanges = await git(['diff', '--name-only', `${fromCommit}..${toCommit}`, packageCwd], options);
28
31
 
29
32
  committedChanges = getLinesFromOutput(committedChanges);
30
33
 
31
- let dirtyChanges = await git(['status', '--porcelain', packageCwd, '-u'], options);
34
+ let dirtyChanges = await git(['status', '--porcelain', '--untracked-files', packageCwd], options);
32
35
 
33
36
  dirtyChanges = getLinesFromOutput(dirtyChanges).map(line => line.substr(3));
34
37
 
package/src/release.js CHANGED
@@ -15,12 +15,13 @@ const {
15
15
  getWorkspaceCwd,
16
16
  getCurrentCommit,
17
17
  } = require('./git');
18
-
18
+ const semver = require('semver');
19
19
  const { builder } = require('../bin/commands/release');
20
20
 
21
21
  async function release({
22
22
  cwd = process.cwd(),
23
23
  silent,
24
+ dryRun = builder['dry-run'].default,
24
25
  shouldPush = builder['push'].default,
25
26
  shouldPublish = builder['publish'].default,
26
27
  shouldBumpInRangeDependencies = builder['bump-in-range-dependencies'].default,
@@ -37,6 +38,7 @@ async function release({
37
38
  pushOverride,
38
39
  prePublishCallback = () => {},
39
40
  publishOverride,
41
+ cached,
40
42
  } = {}) {
41
43
  let currentBranch = await getCurrentBranch(cwd);
42
44
  if (currentBranch !== defaultBranch) {
@@ -50,6 +52,7 @@ async function release({
50
52
  let packagesWithChanges = await buildChangeGraph({
51
53
  workspaceMeta,
52
54
  shouldExcludeDevChanges,
55
+ cached,
53
56
  });
54
57
 
55
58
  packagesWithChanges = packagesWithChanges.filter(({ dag }) => {
@@ -75,7 +78,9 @@ async function release({
75
78
  let packageJsonPath = path.join(cwd, 'package.json');
76
79
  let packageJson = await readJson(packageJsonPath);
77
80
 
78
- if (releaseTree.oldVersion) {
81
+ if (releaseTree.oldVersion && releaseTree.oldVersion !== packageJson.version) {
82
+ log(`Updating ${packageJson.name} from ${packageJson.version} to ${releaseTree.oldVersion}.`);
83
+
79
84
  packageJson.version = releaseTree.oldVersion;
80
85
  }
81
86
 
@@ -83,11 +88,19 @@ async function release({
83
88
  let deps = releaseTree[type];
84
89
 
85
90
  for (let [name, newRange] of Object.entries(deps)) {
86
- packageJson[type][name] = newRange;
91
+ let oldRange = packageJson[type][name];
92
+
93
+ if (newRange !== oldRange) {
94
+ log(`Updating ${packageJson.name} ${type} ${name} from ${oldRange} to ${newRange}.`);
95
+
96
+ packageJson[type][name] = newRange;
97
+ }
87
98
  }
88
99
  }
89
100
 
90
- await writeJson(packageJsonPath, packageJson);
101
+ if (!dryRun) {
102
+ await writeJson(packageJsonPath, packageJson);
103
+ }
91
104
 
92
105
  // eslint-disable-next-line no-inner-declarations
93
106
  async function originalVersion(options) {
@@ -98,6 +111,7 @@ async function release({
98
111
  tag: true,
99
112
  },
100
113
  silent,
114
+ dryRun,
101
115
  tagPrefix: `${name}@`,
102
116
  releaseAs: releaseTree.releaseType,
103
117
  scripts,
@@ -125,7 +139,13 @@ async function release({
125
139
  process.chdir(originalCwd);
126
140
  }
127
141
 
128
- let { version } = await readJson(packageJsonPath);
142
+ let version;
143
+
144
+ if (dryRun) {
145
+ version = semver.inc(releaseTree.oldVersion, releaseTree.releaseType);
146
+ } else {
147
+ version = (await readJson(packageJsonPath)).version;
148
+ }
129
149
 
130
150
  // eslint-disable-next-line require-atomic-updates
131
151
  releaseTree.newVersion = version;
@@ -135,7 +155,7 @@ async function release({
135
155
  async function handleLifecycleScript(lifecycle) {
136
156
  let script = scripts[lifecycle];
137
157
  if (script) {
138
- await execa.command(script, {
158
+ await exec(execa.command, script, {
139
159
  shell: true,
140
160
  });
141
161
  }
@@ -147,38 +167,45 @@ async function release({
147
167
 
148
168
  let commitMessage = `chore(release): ${tags.join()}`;
149
169
 
150
- await execa('git', ['add', '-A'], { cwd: workspaceCwd });
170
+ if (!dryRun) {
171
+ await execa('git', ['add', '-A'], { cwd: workspaceCwd });
172
+ }
151
173
 
152
- await preCommitCallback();
174
+ await preCommitCallback({ dryRun });
153
175
 
154
176
  await handleLifecycleScript('precommit');
155
177
 
156
178
  let previousCommit = await getCurrentCommit(workspaceCwd);
157
179
 
158
- await execa('git', ['commit', '-m', commitMessage], { cwd: workspaceCwd });
180
+ await exec(execa, 'git', ['commit', '-m', commitMessage], { cwd: workspaceCwd });
159
181
 
160
182
  await handleLifecycleScript('postcommit');
161
183
 
162
184
  await handleLifecycleScript('pretag');
163
185
 
164
186
  for (let tag of tags) {
165
- await execa('git', ['tag', '-a', tag, '-m', tag], { cwd: workspaceCwd });
187
+ await exec(execa, 'git', ['tag', '-a', tag, '-m', tag], { cwd: workspaceCwd });
166
188
  }
167
189
 
168
190
  await handleLifecycleScript('posttag');
169
191
 
170
192
  async function originalPush() {
171
- await push({ cwd: workspaceCwd });
193
+ if (dryRun) {
194
+ log('push');
195
+ } else {
196
+ await push({ cwd: workspaceCwd });
197
+ }
172
198
  }
173
199
 
174
200
  if (shouldPush) {
175
- await prePushCallback();
201
+ await prePushCallback({ dryRun });
176
202
 
177
203
  try {
178
204
  if (pushOverride) {
179
205
  await pushOverride({
180
206
  cwd: workspaceCwd,
181
207
  originalPush,
208
+ dryRun,
182
209
  });
183
210
  } else {
184
211
  await originalPush();
@@ -195,7 +222,7 @@ async function release({
195
222
  }
196
223
 
197
224
  if (shouldPublish) {
198
- await prePublishCallback();
225
+ await prePublishCallback({ dryRun });
199
226
  }
200
227
 
201
228
  // eslint-disable-next-line require-atomic-updates
@@ -203,19 +230,40 @@ async function release({
203
230
  if (shouldPublish && _shouldPublish) {
204
231
  // eslint-disable-next-line no-inner-declarations
205
232
  async function originalPublish() {
206
- await publish({ cwd });
233
+ if (dryRun) {
234
+ log('publish');
235
+ } else {
236
+ await publish({ cwd });
237
+ }
207
238
  }
208
239
 
209
240
  if (publishOverride) {
210
241
  await publishOverride({
211
242
  cwd,
212
243
  originalPublish,
244
+ dryRun,
213
245
  });
214
246
  } else {
215
247
  await originalPublish();
216
248
  }
217
249
  }
218
250
  }
251
+
252
+ function exec(execa, ...args) {
253
+ if (dryRun) {
254
+ log(...args);
255
+ } else {
256
+ return execa.apply(this, args);
257
+ }
258
+ }
259
+
260
+ function log() {
261
+ if (silent) {
262
+ return;
263
+ }
264
+
265
+ console.log(...arguments);
266
+ }
219
267
  }
220
268
 
221
269
  async function push({ cwd }) {
package/src/run.js CHANGED
@@ -15,6 +15,7 @@ async function run({
15
15
  shouldExcludeDevChanges = builder['exclude-dev-changes'].default,
16
16
  silent,
17
17
  args,
18
+ cached,
18
19
  }) {
19
20
  let workspaceCwd = await getWorkspaceCwd(cwd);
20
21
 
@@ -24,6 +25,7 @@ async function run({
24
25
  workspaceMeta,
25
26
  shouldOnlyIncludeReleasable,
26
27
  shouldExcludeDevChanges,
28
+ cached,
27
29
  });
28
30
 
29
31
  let stdout = '';