create-nx-workspace 19.5.2 → 19.5.4
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/bin/create-nx-workspace.js +1 -2
- package/package.json +2 -2
- package/src/create-workspace.d.ts +1 -0
- package/src/create-workspace.js +20 -15
- package/src/utils/ci/setup-ci.d.ts +1 -1
- package/src/utils/ci/setup-ci.js +1 -10
- package/src/utils/git/git.d.ts +1 -1
- package/src/utils/git/git.js +10 -18
- package/src/utils/nx/messages.d.ts +259 -0
- package/src/utils/nx/messages.js +185 -0
- package/src/utils/nx/nx-cloud.d.ts +4 -5
- package/src/utils/nx/nx-cloud.js +37 -27
- package/src/utils/output.d.ts +5 -2
- package/src/utils/output.js +20 -3
|
@@ -14,7 +14,6 @@ const get_third_party_preset_1 = require("../src/utils/preset/get-third-party-pr
|
|
|
14
14
|
const prompts_1 = require("../src/internal-utils/prompts");
|
|
15
15
|
const yargs_options_1 = require("../src/internal-utils/yargs-options");
|
|
16
16
|
const show_nx_warning_1 = require("../src/utils/nx/show-nx-warning");
|
|
17
|
-
const nx_cloud_1 = require("../src/utils/nx/nx-cloud");
|
|
18
17
|
const ab_testing_1 = require("../src/utils/nx/ab-testing");
|
|
19
18
|
const error_utils_1 = require("../src/utils/error-utils");
|
|
20
19
|
const fs_1 = require("fs");
|
|
@@ -125,7 +124,7 @@ async function main(parsedArgs) {
|
|
|
125
124
|
],
|
|
126
125
|
});
|
|
127
126
|
if (parsedArgs.nxCloud && workspaceInfo.nxCloudInfo) {
|
|
128
|
-
|
|
127
|
+
console.log(workspaceInfo.nxCloudInfo);
|
|
129
128
|
}
|
|
130
129
|
if ((0, preset_1.isKnownPreset)(parsedArgs.preset)) {
|
|
131
130
|
(0, point_to_tutorial_and_course_1.pointToTutorialAndCourse)(parsedArgs.preset);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "create-nx-workspace",
|
|
3
|
-
"version": "19.5.
|
|
3
|
+
"version": "19.5.4",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "Smart Monorepos · Fast CI",
|
|
6
6
|
"repository": {
|
|
@@ -37,7 +37,7 @@
|
|
|
37
37
|
"tmp": "~0.2.1",
|
|
38
38
|
"tslib": "^2.3.0",
|
|
39
39
|
"yargs": "^17.6.2",
|
|
40
|
-
"axios": "^1.
|
|
40
|
+
"axios": "^1.7.2"
|
|
41
41
|
},
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
package/src/create-workspace.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createWorkspace = createWorkspace;
|
|
4
|
+
exports.extractConnectUrl = extractConnectUrl;
|
|
4
5
|
const output_1 = require("./utils/output");
|
|
5
6
|
const nx_cloud_1 = require("./utils/nx/nx-cloud");
|
|
6
7
|
const create_sandbox_1 = require("./create-sandbox");
|
|
@@ -25,11 +26,20 @@ async function createWorkspace(preset, options) {
|
|
|
25
26
|
if (thirdPartyPackageName) {
|
|
26
27
|
await (0, create_preset_1.createPreset)(thirdPartyPackageName, options, packageManager, directory);
|
|
27
28
|
}
|
|
28
|
-
let
|
|
29
|
-
|
|
29
|
+
let connectUrl;
|
|
30
|
+
let nxCloudInfo;
|
|
31
|
+
if (nxCloud !== 'skip') {
|
|
32
|
+
const token = await (0, nx_cloud_1.setupNxCloud)(directory, nxCloud, useGitHub);
|
|
33
|
+
if (nxCloud !== 'yes') {
|
|
34
|
+
await (0, setup_ci_1.setupCI)(directory, nxCloud, packageManager);
|
|
35
|
+
}
|
|
36
|
+
const { connectCloudUrl, output } = await (0, nx_cloud_1.getOnboardingInfo)(nxCloud, token, directory, useGitHub);
|
|
37
|
+
connectUrl = connectCloudUrl;
|
|
38
|
+
nxCloudInfo = output;
|
|
39
|
+
}
|
|
40
|
+
if (!skipGit) {
|
|
30
41
|
try {
|
|
31
|
-
await (0, git_1.initializeGitRepo)(directory, { defaultBase, commit });
|
|
32
|
-
gitSuccess = true;
|
|
42
|
+
await (0, git_1.initializeGitRepo)(directory, { defaultBase, commit, connectUrl });
|
|
33
43
|
}
|
|
34
44
|
catch (e) {
|
|
35
45
|
if (e instanceof Error) {
|
|
@@ -43,18 +53,13 @@ async function createWorkspace(preset, options) {
|
|
|
43
53
|
}
|
|
44
54
|
}
|
|
45
55
|
}
|
|
46
|
-
let nxCloudInstallRes;
|
|
47
|
-
if (nxCloud !== 'skip') {
|
|
48
|
-
nxCloudInstallRes = await (0, nx_cloud_1.setupNxCloud)(directory, packageManager, nxCloud, useGitHub);
|
|
49
|
-
if (nxCloud !== 'yes') {
|
|
50
|
-
const nxCIsetupRes = await (0, setup_ci_1.setupCI)(directory, nxCloud, packageManager, nxCloudInstallRes?.code === 0);
|
|
51
|
-
if (nxCIsetupRes?.code === 0) {
|
|
52
|
-
(0, git_1.commitChanges)(directory, `feat(nx): Generated CI workflow`);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
56
|
return {
|
|
57
|
-
nxCloudInfo
|
|
57
|
+
nxCloudInfo,
|
|
58
58
|
directory,
|
|
59
59
|
};
|
|
60
60
|
}
|
|
61
|
+
function extractConnectUrl(text) {
|
|
62
|
+
const urlPattern = /(https:\/\/[^\s]+\/connect\/[^\s]+)/g;
|
|
63
|
+
const match = text.match(urlPattern);
|
|
64
|
+
return match ? match[0] : null;
|
|
65
|
+
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { PackageManager } from '../package-manager';
|
|
2
|
-
export declare function setupCI(directory: string, ci: string, packageManager: PackageManager
|
|
2
|
+
export declare function setupCI(directory: string, ci: string, packageManager: PackageManager): Promise<{
|
|
3
3
|
code: number;
|
|
4
4
|
stdout: string;
|
|
5
5
|
}>;
|
package/src/utils/ci/setup-ci.js
CHANGED
|
@@ -6,16 +6,7 @@ const child_process_utils_1 = require("../child-process-utils");
|
|
|
6
6
|
const error_utils_1 = require("../error-utils");
|
|
7
7
|
const output_1 = require("../output");
|
|
8
8
|
const package_manager_1 = require("../package-manager");
|
|
9
|
-
async function setupCI(directory, ci, packageManager
|
|
10
|
-
if (!nxCloudSuccessfullyInstalled) {
|
|
11
|
-
output_1.output.error({
|
|
12
|
-
title: `CI workflow generation skipped`,
|
|
13
|
-
bodyLines: [
|
|
14
|
-
`Nx Cloud was not installed`,
|
|
15
|
-
`The autogenerated CI workflow requires Nx Cloud to be set-up.`,
|
|
16
|
-
],
|
|
17
|
-
});
|
|
18
|
-
}
|
|
9
|
+
async function setupCI(directory, ci, packageManager) {
|
|
19
10
|
const ciSpinner = ora(`Generating CI workflow`).start();
|
|
20
11
|
try {
|
|
21
12
|
const pmc = (0, package_manager_1.getPackageManagerCommand)(packageManager);
|
package/src/utils/git/git.d.ts
CHANGED
package/src/utils/git/git.js
CHANGED
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.checkGitVersion = checkGitVersion;
|
|
4
4
|
exports.initializeGitRepo = initializeGitRepo;
|
|
5
|
-
exports.commitChanges = commitChanges;
|
|
6
5
|
const child_process_1 = require("child_process");
|
|
7
6
|
const default_base_1 = require("./default-base");
|
|
8
7
|
const output_1 = require("../output");
|
|
@@ -72,23 +71,16 @@ async function initializeGitRepo(directory, options) {
|
|
|
72
71
|
}
|
|
73
72
|
await execute(['add', '.']);
|
|
74
73
|
if (options.commit) {
|
|
75
|
-
|
|
74
|
+
let message = `${options.commit.message}` || 'initial commit';
|
|
75
|
+
if (options.connectUrl) {
|
|
76
|
+
message = `${message}
|
|
77
|
+
|
|
78
|
+
To connect your workspace to Nx Cloud, push your repository
|
|
79
|
+
to your git hosting provider and go to the following URL:
|
|
80
|
+
|
|
81
|
+
${options.connectUrl}
|
|
82
|
+
`;
|
|
83
|
+
}
|
|
76
84
|
await execute(['commit', `-m "${message}"`]);
|
|
77
85
|
}
|
|
78
86
|
}
|
|
79
|
-
function commitChanges(directory, message) {
|
|
80
|
-
try {
|
|
81
|
-
(0, child_process_1.execSync)('git add -A', { encoding: 'utf8', stdio: 'pipe', cwd: directory });
|
|
82
|
-
(0, child_process_1.execSync)('git commit --no-verify -F -', {
|
|
83
|
-
encoding: 'utf8',
|
|
84
|
-
stdio: 'pipe',
|
|
85
|
-
input: message,
|
|
86
|
-
cwd: directory,
|
|
87
|
-
});
|
|
88
|
-
}
|
|
89
|
-
catch (e) {
|
|
90
|
-
console.error(`There was an error committing your Nx Cloud token.\n
|
|
91
|
-
Please commit the changes manually and push to your new repository.\n
|
|
92
|
-
\n${e}`);
|
|
93
|
-
}
|
|
94
|
-
}
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
declare const outputMessages: {
|
|
2
|
+
readonly 'create-nx-workspace-success-ci-setup': readonly [{
|
|
3
|
+
readonly code: "nx-cloud-workspace-push-goto";
|
|
4
|
+
readonly createMessage: (url: string) => {
|
|
5
|
+
title: string;
|
|
6
|
+
type: string;
|
|
7
|
+
bodyLines: string[];
|
|
8
|
+
};
|
|
9
|
+
}, {
|
|
10
|
+
readonly code: "nx-cloud-powered-ci-setup-visit";
|
|
11
|
+
readonly createMessage: (url: string) => {
|
|
12
|
+
title: string;
|
|
13
|
+
type: string;
|
|
14
|
+
bodyLines: string[];
|
|
15
|
+
};
|
|
16
|
+
}, {
|
|
17
|
+
readonly code: "nx-cloud-powered-ci-setup-connect";
|
|
18
|
+
readonly createMessage: (url: string) => {
|
|
19
|
+
title: string;
|
|
20
|
+
type: string;
|
|
21
|
+
bodyLines: string[];
|
|
22
|
+
};
|
|
23
|
+
}, {
|
|
24
|
+
readonly code: "ci-setup-visit";
|
|
25
|
+
readonly createMessage: (url: string) => {
|
|
26
|
+
title: string;
|
|
27
|
+
type: string;
|
|
28
|
+
bodyLines: string[];
|
|
29
|
+
};
|
|
30
|
+
}, {
|
|
31
|
+
readonly code: "ci-setup-connect";
|
|
32
|
+
readonly createMessage: (url: string) => {
|
|
33
|
+
title: string;
|
|
34
|
+
type: string;
|
|
35
|
+
bodyLines: string[];
|
|
36
|
+
};
|
|
37
|
+
}, {
|
|
38
|
+
readonly code: "nx-cloud-powered-ci-setup-visit-warn";
|
|
39
|
+
readonly createMessage: (url: string) => {
|
|
40
|
+
title: string;
|
|
41
|
+
type: string;
|
|
42
|
+
bodyLines: string[];
|
|
43
|
+
};
|
|
44
|
+
}, {
|
|
45
|
+
readonly code: "nx-cloud-powered-ci-setup-connect-warn";
|
|
46
|
+
readonly createMessage: (url: string) => {
|
|
47
|
+
title: string;
|
|
48
|
+
type: string;
|
|
49
|
+
bodyLines: string[];
|
|
50
|
+
};
|
|
51
|
+
}, {
|
|
52
|
+
readonly code: "ci-setup-visit-warn";
|
|
53
|
+
readonly createMessage: (url: string) => {
|
|
54
|
+
title: string;
|
|
55
|
+
type: string;
|
|
56
|
+
bodyLines: string[];
|
|
57
|
+
};
|
|
58
|
+
}, {
|
|
59
|
+
readonly code: "ci-setup-connect-warn";
|
|
60
|
+
readonly createMessage: (url: string) => {
|
|
61
|
+
title: string;
|
|
62
|
+
type: string;
|
|
63
|
+
bodyLines: string[];
|
|
64
|
+
};
|
|
65
|
+
}];
|
|
66
|
+
readonly 'create-nx-workspace-success-cache-setup': readonly [{
|
|
67
|
+
readonly code: "nx-cloud-workspace-push-goto";
|
|
68
|
+
readonly createMessage: (url: string) => {
|
|
69
|
+
title: string;
|
|
70
|
+
type: string;
|
|
71
|
+
bodyLines: string[];
|
|
72
|
+
};
|
|
73
|
+
}, {
|
|
74
|
+
readonly code: "nx-cloud-remote-cache-setup-finish";
|
|
75
|
+
readonly createMessage: (url: string) => {
|
|
76
|
+
title: string;
|
|
77
|
+
type: string;
|
|
78
|
+
bodyLines: string[];
|
|
79
|
+
};
|
|
80
|
+
}, {
|
|
81
|
+
readonly code: "nx-cloud-remote-cache-setup-connect";
|
|
82
|
+
readonly createMessage: (url: string) => {
|
|
83
|
+
title: string;
|
|
84
|
+
type: string;
|
|
85
|
+
bodyLines: string[];
|
|
86
|
+
};
|
|
87
|
+
}, {
|
|
88
|
+
readonly code: "remote-cache-visit";
|
|
89
|
+
readonly createMessage: (url: string) => {
|
|
90
|
+
title: string;
|
|
91
|
+
type: string;
|
|
92
|
+
bodyLines: string[];
|
|
93
|
+
};
|
|
94
|
+
}, {
|
|
95
|
+
readonly code: "remote-cache-connect";
|
|
96
|
+
readonly createMessage: (url: string) => {
|
|
97
|
+
title: string;
|
|
98
|
+
type: string;
|
|
99
|
+
bodyLines: string[];
|
|
100
|
+
};
|
|
101
|
+
}, {
|
|
102
|
+
readonly code: "nx-cloud-remote-cache-setup-visit-warn";
|
|
103
|
+
readonly createMessage: (url: string) => {
|
|
104
|
+
title: string;
|
|
105
|
+
type: string;
|
|
106
|
+
bodyLines: string[];
|
|
107
|
+
};
|
|
108
|
+
}, {
|
|
109
|
+
readonly code: "nx-cloud-remote-cache-setup-connect-warn";
|
|
110
|
+
readonly createMessage: (url: string) => {
|
|
111
|
+
title: string;
|
|
112
|
+
type: string;
|
|
113
|
+
bodyLines: string[];
|
|
114
|
+
};
|
|
115
|
+
}, {
|
|
116
|
+
readonly code: "remote-cache-visit-warn";
|
|
117
|
+
readonly createMessage: (url: string) => {
|
|
118
|
+
title: string;
|
|
119
|
+
type: string;
|
|
120
|
+
bodyLines: string[];
|
|
121
|
+
};
|
|
122
|
+
}, {
|
|
123
|
+
readonly code: "remote-cache-connect-warn";
|
|
124
|
+
readonly createMessage: (url: string) => {
|
|
125
|
+
title: string;
|
|
126
|
+
type: string;
|
|
127
|
+
bodyLines: string[];
|
|
128
|
+
};
|
|
129
|
+
}];
|
|
130
|
+
};
|
|
131
|
+
type OutputMessageKey = keyof typeof outputMessages;
|
|
132
|
+
export declare function getMessageFactory(key: OutputMessageKey): {
|
|
133
|
+
readonly code: "nx-cloud-workspace-push-goto";
|
|
134
|
+
readonly createMessage: (url: string) => {
|
|
135
|
+
title: string;
|
|
136
|
+
type: string;
|
|
137
|
+
bodyLines: string[];
|
|
138
|
+
};
|
|
139
|
+
} | {
|
|
140
|
+
readonly code: "nx-cloud-powered-ci-setup-visit";
|
|
141
|
+
readonly createMessage: (url: string) => {
|
|
142
|
+
title: string;
|
|
143
|
+
type: string;
|
|
144
|
+
bodyLines: string[];
|
|
145
|
+
};
|
|
146
|
+
} | {
|
|
147
|
+
readonly code: "nx-cloud-powered-ci-setup-connect";
|
|
148
|
+
readonly createMessage: (url: string) => {
|
|
149
|
+
title: string;
|
|
150
|
+
type: string;
|
|
151
|
+
bodyLines: string[];
|
|
152
|
+
};
|
|
153
|
+
} | {
|
|
154
|
+
readonly code: "ci-setup-visit";
|
|
155
|
+
readonly createMessage: (url: string) => {
|
|
156
|
+
title: string;
|
|
157
|
+
type: string;
|
|
158
|
+
bodyLines: string[];
|
|
159
|
+
};
|
|
160
|
+
} | {
|
|
161
|
+
readonly code: "ci-setup-connect";
|
|
162
|
+
readonly createMessage: (url: string) => {
|
|
163
|
+
title: string;
|
|
164
|
+
type: string;
|
|
165
|
+
bodyLines: string[];
|
|
166
|
+
};
|
|
167
|
+
} | {
|
|
168
|
+
readonly code: "nx-cloud-powered-ci-setup-visit-warn";
|
|
169
|
+
readonly createMessage: (url: string) => {
|
|
170
|
+
title: string;
|
|
171
|
+
type: string;
|
|
172
|
+
bodyLines: string[];
|
|
173
|
+
};
|
|
174
|
+
} | {
|
|
175
|
+
readonly code: "nx-cloud-powered-ci-setup-connect-warn";
|
|
176
|
+
readonly createMessage: (url: string) => {
|
|
177
|
+
title: string;
|
|
178
|
+
type: string;
|
|
179
|
+
bodyLines: string[];
|
|
180
|
+
};
|
|
181
|
+
} | {
|
|
182
|
+
readonly code: "ci-setup-visit-warn";
|
|
183
|
+
readonly createMessage: (url: string) => {
|
|
184
|
+
title: string;
|
|
185
|
+
type: string;
|
|
186
|
+
bodyLines: string[];
|
|
187
|
+
};
|
|
188
|
+
} | {
|
|
189
|
+
readonly code: "ci-setup-connect-warn";
|
|
190
|
+
readonly createMessage: (url: string) => {
|
|
191
|
+
title: string;
|
|
192
|
+
type: string;
|
|
193
|
+
bodyLines: string[];
|
|
194
|
+
};
|
|
195
|
+
} | {
|
|
196
|
+
readonly code: "nx-cloud-workspace-push-goto";
|
|
197
|
+
readonly createMessage: (url: string) => {
|
|
198
|
+
title: string;
|
|
199
|
+
type: string;
|
|
200
|
+
bodyLines: string[];
|
|
201
|
+
};
|
|
202
|
+
} | {
|
|
203
|
+
readonly code: "nx-cloud-remote-cache-setup-finish";
|
|
204
|
+
readonly createMessage: (url: string) => {
|
|
205
|
+
title: string;
|
|
206
|
+
type: string;
|
|
207
|
+
bodyLines: string[];
|
|
208
|
+
};
|
|
209
|
+
} | {
|
|
210
|
+
readonly code: "nx-cloud-remote-cache-setup-connect";
|
|
211
|
+
readonly createMessage: (url: string) => {
|
|
212
|
+
title: string;
|
|
213
|
+
type: string;
|
|
214
|
+
bodyLines: string[];
|
|
215
|
+
};
|
|
216
|
+
} | {
|
|
217
|
+
readonly code: "remote-cache-visit";
|
|
218
|
+
readonly createMessage: (url: string) => {
|
|
219
|
+
title: string;
|
|
220
|
+
type: string;
|
|
221
|
+
bodyLines: string[];
|
|
222
|
+
};
|
|
223
|
+
} | {
|
|
224
|
+
readonly code: "remote-cache-connect";
|
|
225
|
+
readonly createMessage: (url: string) => {
|
|
226
|
+
title: string;
|
|
227
|
+
type: string;
|
|
228
|
+
bodyLines: string[];
|
|
229
|
+
};
|
|
230
|
+
} | {
|
|
231
|
+
readonly code: "nx-cloud-remote-cache-setup-visit-warn";
|
|
232
|
+
readonly createMessage: (url: string) => {
|
|
233
|
+
title: string;
|
|
234
|
+
type: string;
|
|
235
|
+
bodyLines: string[];
|
|
236
|
+
};
|
|
237
|
+
} | {
|
|
238
|
+
readonly code: "nx-cloud-remote-cache-setup-connect-warn";
|
|
239
|
+
readonly createMessage: (url: string) => {
|
|
240
|
+
title: string;
|
|
241
|
+
type: string;
|
|
242
|
+
bodyLines: string[];
|
|
243
|
+
};
|
|
244
|
+
} | {
|
|
245
|
+
readonly code: "remote-cache-visit-warn";
|
|
246
|
+
readonly createMessage: (url: string) => {
|
|
247
|
+
title: string;
|
|
248
|
+
type: string;
|
|
249
|
+
bodyLines: string[];
|
|
250
|
+
};
|
|
251
|
+
} | {
|
|
252
|
+
readonly code: "remote-cache-connect-warn";
|
|
253
|
+
readonly createMessage: (url: string) => {
|
|
254
|
+
title: string;
|
|
255
|
+
type: string;
|
|
256
|
+
bodyLines: string[];
|
|
257
|
+
};
|
|
258
|
+
};
|
|
259
|
+
export {};
|
|
@@ -0,0 +1,185 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getMessageFactory = getMessageFactory;
|
|
4
|
+
const outputMessages = {
|
|
5
|
+
'create-nx-workspace-success-ci-setup': [
|
|
6
|
+
{
|
|
7
|
+
code: 'nx-cloud-workspace-push-goto',
|
|
8
|
+
createMessage: (url) => ({
|
|
9
|
+
title: `Your Nx Cloud workspace is ready.`,
|
|
10
|
+
type: 'success',
|
|
11
|
+
bodyLines: [
|
|
12
|
+
`To claim it, connect it to your Nx Cloud account:`,
|
|
13
|
+
`- Push your repository to your git hosting provider.`,
|
|
14
|
+
`- Go to the following URL to connect your workspace to Nx Cloud:`,
|
|
15
|
+
'',
|
|
16
|
+
`${url}`,
|
|
17
|
+
],
|
|
18
|
+
}),
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
code: 'nx-cloud-powered-ci-setup-visit',
|
|
22
|
+
createMessage: (url) => ({
|
|
23
|
+
title: `Your CI setup powered by Nx Cloud is almost complete.`,
|
|
24
|
+
type: 'success',
|
|
25
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
26
|
+
}),
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
code: 'nx-cloud-powered-ci-setup-connect',
|
|
30
|
+
createMessage: (url) => ({
|
|
31
|
+
title: `Your CI setup powered by Nx Cloud is almost complete.`,
|
|
32
|
+
type: 'success',
|
|
33
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
34
|
+
}),
|
|
35
|
+
},
|
|
36
|
+
{
|
|
37
|
+
code: 'ci-setup-visit',
|
|
38
|
+
createMessage: (url) => ({
|
|
39
|
+
title: `Your CI setup is almost complete.`,
|
|
40
|
+
type: 'success',
|
|
41
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
42
|
+
}),
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
code: 'ci-setup-connect',
|
|
46
|
+
createMessage: (url) => ({
|
|
47
|
+
title: `Your CI setup is almost complete.`,
|
|
48
|
+
type: 'success',
|
|
49
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
50
|
+
}),
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
code: 'nx-cloud-powered-ci-setup-visit-warn',
|
|
54
|
+
createMessage: (url) => ({
|
|
55
|
+
title: `Your CI setup powered by Nx Cloud is almost complete.`,
|
|
56
|
+
type: 'warning',
|
|
57
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
58
|
+
}),
|
|
59
|
+
},
|
|
60
|
+
{
|
|
61
|
+
code: 'nx-cloud-powered-ci-setup-connect-warn',
|
|
62
|
+
createMessage: (url) => ({
|
|
63
|
+
title: `Your CI setup powered by Nx Cloud is almost complete.`,
|
|
64
|
+
type: 'warning',
|
|
65
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
66
|
+
}),
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
code: 'ci-setup-visit-warn',
|
|
70
|
+
createMessage: (url) => ({
|
|
71
|
+
title: `Your CI setup is almost complete.`,
|
|
72
|
+
type: 'warning',
|
|
73
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
74
|
+
}),
|
|
75
|
+
},
|
|
76
|
+
{
|
|
77
|
+
code: 'ci-setup-connect-warn',
|
|
78
|
+
createMessage: (url) => ({
|
|
79
|
+
title: `Your CI setup is almost complete.`,
|
|
80
|
+
type: 'warning',
|
|
81
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
82
|
+
}),
|
|
83
|
+
},
|
|
84
|
+
],
|
|
85
|
+
'create-nx-workspace-success-cache-setup': [
|
|
86
|
+
{
|
|
87
|
+
code: 'nx-cloud-workspace-push-goto',
|
|
88
|
+
createMessage: (url) => ({
|
|
89
|
+
title: `Your Nx Cloud workspace is ready.`,
|
|
90
|
+
type: 'success',
|
|
91
|
+
bodyLines: [
|
|
92
|
+
`To claim it, connect it to your Nx Cloud account:`,
|
|
93
|
+
`- Push your repository to your git hosting provider.`,
|
|
94
|
+
`- Go to the following URL to connect your workspace to Nx Cloud:`,
|
|
95
|
+
'',
|
|
96
|
+
`${url}`,
|
|
97
|
+
],
|
|
98
|
+
}),
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
code: 'nx-cloud-remote-cache-setup-finish',
|
|
102
|
+
createMessage: (url) => ({
|
|
103
|
+
title: `Your Nx Cloud remote cache setup is almost complete.`,
|
|
104
|
+
type: 'success',
|
|
105
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
106
|
+
}),
|
|
107
|
+
},
|
|
108
|
+
{
|
|
109
|
+
code: 'nx-cloud-remote-cache-setup-connect',
|
|
110
|
+
createMessage: (url) => ({
|
|
111
|
+
title: `Your Nx Cloud remote cache setup is almost complete.`,
|
|
112
|
+
type: 'success',
|
|
113
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
114
|
+
}),
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
code: 'remote-cache-visit',
|
|
118
|
+
createMessage: (url) => ({
|
|
119
|
+
title: `Your remote cache setup is almost complete.`,
|
|
120
|
+
type: 'success',
|
|
121
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
122
|
+
}),
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
code: 'remote-cache-connect',
|
|
126
|
+
createMessage: (url) => ({
|
|
127
|
+
title: `Your remote cache setup is almost complete.`,
|
|
128
|
+
type: 'success',
|
|
129
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
130
|
+
}),
|
|
131
|
+
},
|
|
132
|
+
{
|
|
133
|
+
code: 'nx-cloud-remote-cache-setup-visit-warn',
|
|
134
|
+
createMessage: (url) => ({
|
|
135
|
+
title: `Your Nx Cloud remote cache setup is almost complete.`,
|
|
136
|
+
type: 'warning',
|
|
137
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
138
|
+
}),
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
code: 'nx-cloud-remote-cache-setup-connect-warn',
|
|
142
|
+
createMessage: (url) => ({
|
|
143
|
+
title: `Your Nx Cloud remote cache setup is almost complete.`,
|
|
144
|
+
type: 'warning',
|
|
145
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
146
|
+
}),
|
|
147
|
+
},
|
|
148
|
+
{
|
|
149
|
+
code: 'remote-cache-visit-warn',
|
|
150
|
+
createMessage: (url) => ({
|
|
151
|
+
title: `Your remote cache setup is almost complete.`,
|
|
152
|
+
type: 'warning',
|
|
153
|
+
bodyLines: [`Finish it by visiting: ${url}`],
|
|
154
|
+
}),
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
code: 'remote-cache-connect-warn',
|
|
158
|
+
createMessage: (url) => ({
|
|
159
|
+
title: `Your remote cache setup is almost complete.`,
|
|
160
|
+
type: 'warning',
|
|
161
|
+
bodyLines: [`Connect your repository: ${url}`],
|
|
162
|
+
}),
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
};
|
|
166
|
+
class ABTestingMessages {
|
|
167
|
+
constructor() {
|
|
168
|
+
this.selectedMessages = {};
|
|
169
|
+
}
|
|
170
|
+
getMessageFactory(key) {
|
|
171
|
+
if (this.selectedMessages[key] === undefined) {
|
|
172
|
+
if (process.env.NX_GENERATE_DOCS_PROCESS === 'true') {
|
|
173
|
+
this.selectedMessages[key] = 0;
|
|
174
|
+
}
|
|
175
|
+
else {
|
|
176
|
+
this.selectedMessages[key] = Math.floor(Math.random() * outputMessages[key].length);
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
return outputMessages[key][this.selectedMessages[key]];
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
const messages = new ABTestingMessages();
|
|
183
|
+
function getMessageFactory(key) {
|
|
184
|
+
return messages.getMessageFactory(key);
|
|
185
|
+
}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { PackageManager } from '../package-manager';
|
|
2
1
|
export type NxCloud = 'yes' | 'github' | 'circleci' | 'skip';
|
|
3
|
-
export declare function setupNxCloud(directory: string,
|
|
4
|
-
|
|
5
|
-
|
|
2
|
+
export declare function setupNxCloud(directory: string, nxCloud: NxCloud, useGitHub?: boolean): Promise<string>;
|
|
3
|
+
export declare function getOnboardingInfo(nxCloud: NxCloud, token: string, directory: string, useGithub?: boolean): Promise<{
|
|
4
|
+
output: string;
|
|
5
|
+
connectCloudUrl: string;
|
|
6
6
|
}>;
|
|
7
|
-
export declare function printNxCloudSuccessMessage(nxCloudOut: string): void;
|
package/src/utils/nx/nx-cloud.js
CHANGED
|
@@ -1,24 +1,27 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.setupNxCloud = setupNxCloud;
|
|
4
|
-
exports.
|
|
4
|
+
exports.getOnboardingInfo = getOnboardingInfo;
|
|
5
5
|
const ora = require("ora");
|
|
6
|
-
const child_process_utils_1 = require("../child-process-utils");
|
|
7
6
|
const output_1 = require("../output");
|
|
8
|
-
const package_manager_1 = require("../package-manager");
|
|
9
7
|
const error_utils_1 = require("../error-utils");
|
|
10
|
-
|
|
8
|
+
const messages_1 = require("./messages");
|
|
9
|
+
async function setupNxCloud(directory, nxCloud, useGitHub) {
|
|
11
10
|
const nxCloudSpinner = ora(`Setting up Nx Cloud`).start();
|
|
12
11
|
try {
|
|
13
|
-
|
|
14
|
-
const
|
|
15
|
-
|
|
16
|
-
nxCloudSpinner.succeed('CI workflow with Nx Cloud has been generated successfully');
|
|
12
|
+
// nx-ignore-next-line
|
|
13
|
+
const { connectWorkspaceToCloud } = require(require.resolve('nx/src/command-line/connect/connect-to-nx-cloud', {
|
|
14
|
+
paths: [directory],
|
|
17
15
|
}
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
// nx-ignore-next-line
|
|
17
|
+
));
|
|
18
|
+
const accessToken = await connectWorkspaceToCloud({
|
|
19
|
+
installationSource: 'create-nx-workspace',
|
|
20
|
+
directory,
|
|
21
|
+
github: useGitHub,
|
|
22
|
+
});
|
|
23
|
+
nxCloudSpinner.succeed('Nx Cloud has been set up successfully');
|
|
24
|
+
return accessToken;
|
|
22
25
|
}
|
|
23
26
|
catch (e) {
|
|
24
27
|
nxCloudSpinner.fail();
|
|
@@ -37,19 +40,26 @@ async function setupNxCloud(directory, packageManager, nxCloud, useGitHub) {
|
|
|
37
40
|
nxCloudSpinner.stop();
|
|
38
41
|
}
|
|
39
42
|
}
|
|
40
|
-
function
|
|
41
|
-
//
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
43
|
+
async function getOnboardingInfo(nxCloud, token, directory, useGithub) {
|
|
44
|
+
// nx-ignore-next-line
|
|
45
|
+
const { createNxCloudOnboardingURL } = require(require.resolve('nx/src/nx-cloud/utilities/url-shorten', {
|
|
46
|
+
paths: [directory],
|
|
47
|
+
}
|
|
48
|
+
// nx-ignore-next-line
|
|
49
|
+
));
|
|
50
|
+
const source = nxCloud === 'yes'
|
|
51
|
+
? 'create-nx-workspace-success-cache-setup'
|
|
52
|
+
: 'create-nx-workspace-success-ci-setup';
|
|
53
|
+
const { code, createMessage } = (0, messages_1.getMessageFactory)(source);
|
|
54
|
+
const connectCloudUrl = await createNxCloudOnboardingURL(source, token, useGithub ??
|
|
55
|
+
(nxCloud === 'yes' || nxCloud === 'github' || nxCloud === 'circleci'), code);
|
|
56
|
+
const out = new output_1.CLIOutput(false);
|
|
57
|
+
const message = createMessage(connectCloudUrl);
|
|
58
|
+
if (message.type === 'success') {
|
|
59
|
+
out.success(message);
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
out.warn(message);
|
|
63
|
+
}
|
|
64
|
+
return { output: out.getOutput(), connectCloudUrl };
|
|
55
65
|
}
|
package/src/utils/output.d.ts
CHANGED
|
@@ -15,7 +15,10 @@ export interface CLISuccessMessageConfig {
|
|
|
15
15
|
title: string;
|
|
16
16
|
bodyLines?: string[];
|
|
17
17
|
}
|
|
18
|
-
declare class CLIOutput {
|
|
18
|
+
export declare class CLIOutput {
|
|
19
|
+
private real;
|
|
20
|
+
private outstream;
|
|
21
|
+
constructor(real?: boolean);
|
|
19
22
|
/**
|
|
20
23
|
* Longer dash character which forms more of a continuous line when place side to side
|
|
21
24
|
* with itself, unlike the standard dash character
|
|
@@ -53,6 +56,6 @@ declare class CLIOutput {
|
|
|
53
56
|
log({ title, bodyLines, color }: CLIWarnMessageConfig & {
|
|
54
57
|
color?: string;
|
|
55
58
|
}): void;
|
|
59
|
+
getOutput(): string;
|
|
56
60
|
}
|
|
57
61
|
export declare const output: CLIOutput;
|
|
58
|
-
export {};
|
package/src/utils/output.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* we duplicate the helper functions from @nx/workspace in this file.
|
|
5
5
|
*/
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
-
exports.output = void 0;
|
|
7
|
+
exports.output = exports.CLIOutput = void 0;
|
|
8
8
|
const chalk = require("chalk");
|
|
9
9
|
const os_1 = require("os");
|
|
10
10
|
const is_ci_1 = require("./ci/is-ci");
|
|
@@ -15,7 +15,9 @@ if ((0, is_ci_1.isCI)()) {
|
|
|
15
15
|
chalk.level = 0;
|
|
16
16
|
}
|
|
17
17
|
class CLIOutput {
|
|
18
|
-
constructor() {
|
|
18
|
+
constructor(real = true) {
|
|
19
|
+
this.real = real;
|
|
20
|
+
this.outstream = this.real ? process.stdout : new FakeStdout();
|
|
19
21
|
/**
|
|
20
22
|
* Expose some color and other utility functions so that other parts of the codebase that need
|
|
21
23
|
* more fine-grained control of message bodies are still using a centralized
|
|
@@ -45,7 +47,7 @@ class CLIOutput {
|
|
|
45
47
|
return divider;
|
|
46
48
|
}
|
|
47
49
|
writeToStdOut(str) {
|
|
48
|
-
|
|
50
|
+
this.outstream.write(str);
|
|
49
51
|
}
|
|
50
52
|
writeOutputTitle({ color, title, }) {
|
|
51
53
|
this.writeToStdOut(`${this.applyCLIPrefix(color, title)}${os_1.EOL}`);
|
|
@@ -134,5 +136,20 @@ class CLIOutput {
|
|
|
134
136
|
this.writeOptionalOutputBody(bodyLines);
|
|
135
137
|
this.addNewline();
|
|
136
138
|
}
|
|
139
|
+
getOutput() {
|
|
140
|
+
return this.outstream.toString();
|
|
141
|
+
}
|
|
137
142
|
}
|
|
143
|
+
exports.CLIOutput = CLIOutput;
|
|
138
144
|
exports.output = new CLIOutput();
|
|
145
|
+
class FakeStdout {
|
|
146
|
+
constructor() {
|
|
147
|
+
this.content = '';
|
|
148
|
+
}
|
|
149
|
+
write(str) {
|
|
150
|
+
this.content += str;
|
|
151
|
+
}
|
|
152
|
+
toString() {
|
|
153
|
+
return this.content;
|
|
154
|
+
}
|
|
155
|
+
}
|