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 +2 -0
- package/bin/commands/release.js +1 -0
- package/package.json +3 -2
- package/src/build-change-graph.js +4 -1
- package/src/release.js +62 -14
- package/src/run.js +2 -0
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]
|
package/bin/commands/release.js
CHANGED
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "monorepo-next",
|
3
|
-
"version": "9.
|
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.
|
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',
|
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]
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
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 = '';
|