@optimizely/ocp-cli 1.2.6 → 1.2.8
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/dist/commands/app/BaseBuildCommand.js +1 -1
- package/dist/commands/app/BaseBuildCommand.js.map +1 -1
- package/dist/commands/app/Init.js +1 -1
- package/dist/commands/app/Init.js.map +1 -1
- package/dist/lib/AppUpdater.d.ts +1 -0
- package/dist/lib/AppUpdater.js +10 -10
- package/dist/lib/AppUpdater.js.map +1 -1
- package/dist/lib/checkForUpdate.js +15 -9
- package/dist/lib/checkForUpdate.js.map +1 -1
- package/dist/lib/packageManagerHandler.d.ts +53 -0
- package/dist/lib/packageManagerHandler.js +162 -0
- package/dist/lib/packageManagerHandler.js.map +1 -0
- package/dist/oo-cli.manifest.json +1 -1
- package/dist/test/AppUpdater.test.d.ts +1 -0
- package/dist/test/AppUpdater.test.js +155 -0
- package/dist/test/AppUpdater.test.js.map +1 -0
- package/dist/test/packageManagerHandler.test.d.ts +1 -0
- package/dist/test/packageManagerHandler.test.js +169 -0
- package/dist/test/packageManagerHandler.test.js.map +1 -0
- package/package.json +2 -2
- package/src/commands/app/BaseBuildCommand.ts +1 -1
- package/src/commands/app/Init.ts +1 -1
- package/src/lib/AppUpdater.ts +14 -15
- package/src/lib/checkForUpdate.ts +24 -13
- package/src/lib/packageManagerHandler.ts +178 -0
- package/src/test/AppUpdater.test.ts +196 -0
- package/src/test/packageManagerHandler.test.ts +190 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const AppUpdater_1 = require("../lib/AppUpdater");
|
|
4
|
+
const packageManagerHandler_1 = require("../lib/packageManagerHandler");
|
|
5
|
+
jest.mock('../lib/packageManagerHandler');
|
|
6
|
+
describe('AppUpdater', () => {
|
|
7
|
+
beforeEach(() => {
|
|
8
|
+
jest.clearAllMocks();
|
|
9
|
+
});
|
|
10
|
+
afterEach(() => {
|
|
11
|
+
jest.restoreAllMocks();
|
|
12
|
+
});
|
|
13
|
+
describe('getPackageDependencies', () => {
|
|
14
|
+
it('should parse dependencies correctly', () => {
|
|
15
|
+
const mockDeps = {
|
|
16
|
+
type: 'tree',
|
|
17
|
+
data: {
|
|
18
|
+
type: 'list',
|
|
19
|
+
trees: [
|
|
20
|
+
{
|
|
21
|
+
name: '@zaiusinc/package1@1.0.0',
|
|
22
|
+
children: [],
|
|
23
|
+
hint: null,
|
|
24
|
+
color: 'bold',
|
|
25
|
+
depth: 0,
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: '@zaiusinc/package2@2.0.0',
|
|
29
|
+
children: [],
|
|
30
|
+
hint: null,
|
|
31
|
+
color: 'bold',
|
|
32
|
+
depth: 0,
|
|
33
|
+
},
|
|
34
|
+
],
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
|
|
38
|
+
const result = AppUpdater_1.AppUpdater.getPackageDependencies();
|
|
39
|
+
expect(result).toEqual({
|
|
40
|
+
'@zaiusinc/package1': '1.0.0',
|
|
41
|
+
'@zaiusinc/package2': '2.0.0',
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
it('should handle prod dependencies flag', () => {
|
|
45
|
+
const mockDeps = {
|
|
46
|
+
type: 'tree',
|
|
47
|
+
data: {
|
|
48
|
+
type: 'list',
|
|
49
|
+
trees: [
|
|
50
|
+
{
|
|
51
|
+
name: '@zaiusinc/package1@1.0.0',
|
|
52
|
+
children: [],
|
|
53
|
+
hint: null,
|
|
54
|
+
color: 'bold',
|
|
55
|
+
depth: 0,
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
};
|
|
60
|
+
const mockHandler = packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
|
|
61
|
+
AppUpdater_1.AppUpdater.getPackageDependencies(true);
|
|
62
|
+
expect(mockHandler).toHaveBeenCalledWith(/@zaiusinc\//, true);
|
|
63
|
+
});
|
|
64
|
+
describe('error handling', () => {
|
|
65
|
+
let mockExit;
|
|
66
|
+
let mockConsole;
|
|
67
|
+
let mockConsoleError;
|
|
68
|
+
beforeEach(() => {
|
|
69
|
+
mockExit = jest
|
|
70
|
+
.spyOn(process, 'exit')
|
|
71
|
+
.mockImplementation(() => undefined);
|
|
72
|
+
mockConsole = jest
|
|
73
|
+
.spyOn(console, 'log')
|
|
74
|
+
.mockImplementation(() => undefined);
|
|
75
|
+
mockConsoleError = jest
|
|
76
|
+
.spyOn(console, 'error')
|
|
77
|
+
.mockImplementation(() => undefined);
|
|
78
|
+
});
|
|
79
|
+
afterEach(() => {
|
|
80
|
+
mockExit.mockRestore();
|
|
81
|
+
mockConsole.mockRestore();
|
|
82
|
+
mockConsoleError.mockRestore();
|
|
83
|
+
});
|
|
84
|
+
it('should exit with error on package manager failure', () => {
|
|
85
|
+
packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([false, 'error']);
|
|
86
|
+
AppUpdater_1.AppUpdater.getPackageDependencies();
|
|
87
|
+
expect(mockExit).toHaveBeenCalledWith(1);
|
|
88
|
+
expect(mockConsoleError).toHaveBeenCalledWith('error');
|
|
89
|
+
});
|
|
90
|
+
it('should exit with error on exception', () => {
|
|
91
|
+
packageManagerHandler_1.default.getPackageDependencies.mockImplementation(() => {
|
|
92
|
+
throw new Error('test error');
|
|
93
|
+
});
|
|
94
|
+
AppUpdater_1.AppUpdater.getPackageDependencies();
|
|
95
|
+
expect(mockExit).toHaveBeenCalledWith(1);
|
|
96
|
+
expect(mockConsoleError).toHaveBeenCalledWith(new Error('test error'));
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
describe('ensurePublicPackageUsage', () => {
|
|
101
|
+
let mockExit;
|
|
102
|
+
let mockConsoleLog;
|
|
103
|
+
let mockConsoleError;
|
|
104
|
+
beforeEach(() => {
|
|
105
|
+
mockExit = jest
|
|
106
|
+
.spyOn(process, 'exit')
|
|
107
|
+
.mockImplementation(() => undefined);
|
|
108
|
+
mockConsoleLog = jest
|
|
109
|
+
.spyOn(console, 'log')
|
|
110
|
+
.mockImplementation(() => undefined);
|
|
111
|
+
mockConsoleError = jest
|
|
112
|
+
.spyOn(console, 'error')
|
|
113
|
+
.mockImplementation(() => undefined);
|
|
114
|
+
});
|
|
115
|
+
afterEach(() => {
|
|
116
|
+
mockExit.mockRestore();
|
|
117
|
+
mockConsoleLog.mockRestore();
|
|
118
|
+
mockConsoleError.mockRestore();
|
|
119
|
+
});
|
|
120
|
+
it('should allow execution when no deprecated packages are found', () => {
|
|
121
|
+
const mockDeps = {
|
|
122
|
+
type: 'tree',
|
|
123
|
+
data: {
|
|
124
|
+
type: 'list',
|
|
125
|
+
trees: [],
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
|
|
129
|
+
AppUpdater_1.AppUpdater.ensurePublicPackageUsage();
|
|
130
|
+
expect(mockExit).not.toHaveBeenCalled();
|
|
131
|
+
});
|
|
132
|
+
it('should exit when deprecated @zaius packages are found', () => {
|
|
133
|
+
const mockDeps = {
|
|
134
|
+
type: 'tree',
|
|
135
|
+
data: {
|
|
136
|
+
type: 'list',
|
|
137
|
+
trees: [
|
|
138
|
+
{
|
|
139
|
+
name: '@zaius/app-sdk@1.0.0',
|
|
140
|
+
children: [],
|
|
141
|
+
hint: null,
|
|
142
|
+
color: 'bold',
|
|
143
|
+
depth: 0,
|
|
144
|
+
},
|
|
145
|
+
],
|
|
146
|
+
},
|
|
147
|
+
};
|
|
148
|
+
packageManagerHandler_1.default.getPackageDependencies.mockReturnValueOnce([true, mockDeps]);
|
|
149
|
+
AppUpdater_1.AppUpdater.ensurePublicPackageUsage();
|
|
150
|
+
expect(mockExit).toHaveBeenCalledWith(1);
|
|
151
|
+
expect(mockConsoleLog).toHaveBeenCalledWith(expect.stringContaining('@zaius/app-sdk & @zaius/node-sdk are no longer supported'));
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
});
|
|
155
|
+
//# sourceMappingURL=AppUpdater.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"AppUpdater.test.js","sourceRoot":"","sources":["../../src/test/AppUpdater.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
/* tslint:disable:max-line-length */
|
|
4
|
+
const packageManagerHandler_1 = require("../lib/packageManagerHandler");
|
|
5
|
+
const TerminalOutput_1 = require("../lib/TerminalOutput");
|
|
6
|
+
jest.mock('../lib/TerminalOutput', () => ({
|
|
7
|
+
TerminalOutput: {
|
|
8
|
+
exec: jest.fn(),
|
|
9
|
+
},
|
|
10
|
+
}));
|
|
11
|
+
describe('PackageManagerHandler', () => {
|
|
12
|
+
let packageManager;
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
jest.clearAllMocks();
|
|
15
|
+
});
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
jest.restoreAllMocks();
|
|
18
|
+
});
|
|
19
|
+
describe('isLegacyYarnAvailable', () => {
|
|
20
|
+
it('should return true when yarn 1.x is available', () => {
|
|
21
|
+
TerminalOutput_1.TerminalOutput.exec.mockReturnValue({
|
|
22
|
+
status: 0,
|
|
23
|
+
stdout: '1.22.19\n',
|
|
24
|
+
stderr: '',
|
|
25
|
+
});
|
|
26
|
+
expect(packageManagerHandler_1.default.isLegacyYarnAvailable()).toBe(true);
|
|
27
|
+
});
|
|
28
|
+
it('should return false when yarn 2.x is available', () => {
|
|
29
|
+
TerminalOutput_1.TerminalOutput.exec.mockReturnValue({
|
|
30
|
+
status: 0,
|
|
31
|
+
stdout: '2.0.0\n',
|
|
32
|
+
stderr: '',
|
|
33
|
+
});
|
|
34
|
+
expect(packageManagerHandler_1.default.isLegacyYarnAvailable()).toBe(false);
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
describe('upgradeGlobalPackageToLatest', () => {
|
|
38
|
+
it('should use yarn when the cli is installed using yarn', () => {
|
|
39
|
+
TerminalOutput_1.TerminalOutput.exec
|
|
40
|
+
.mockReturnValueOnce({
|
|
41
|
+
status: 0,
|
|
42
|
+
stdout: '/foo/bar/yarn/bin/test-cli\n',
|
|
43
|
+
stderr: '',
|
|
44
|
+
}) // yarn check
|
|
45
|
+
.mockReturnValueOnce({ status: 0, stdout: '1.22.0', stderr: '' }) // check for yarn 1.x
|
|
46
|
+
.mockReturnValueOnce({ status: 0, stdout: 'success', stderr: '' }); // upgrade command
|
|
47
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
48
|
+
const [success, _] = packageManager.upgradeGlobalPackageToLatest();
|
|
49
|
+
expect(success).toBe(true);
|
|
50
|
+
expect(TerminalOutput_1.TerminalOutput.exec).toHaveBeenCalledWith('yarn global upgrade test-package --latest');
|
|
51
|
+
});
|
|
52
|
+
it('should notify failure when the cli is installed using yarn 1.x but current yarn version is newer than 1.x', () => {
|
|
53
|
+
TerminalOutput_1.TerminalOutput.exec
|
|
54
|
+
.mockReturnValueOnce({
|
|
55
|
+
status: 0,
|
|
56
|
+
stdout: '/foo/bar/yarn/bin/test-cli\n',
|
|
57
|
+
stderr: '',
|
|
58
|
+
}) // yarn check
|
|
59
|
+
.mockReturnValueOnce({ status: 0, stdout: '2.22.0', stderr: '' }); // check for yarn 1.x
|
|
60
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
61
|
+
const [success, message] = packageManager.upgradeGlobalPackageToLatest();
|
|
62
|
+
expect(success).toBe(false);
|
|
63
|
+
expect(message).toContain('not compatible');
|
|
64
|
+
});
|
|
65
|
+
});
|
|
66
|
+
describe('fetchLatestPackage', () => {
|
|
67
|
+
it('should fetch latest version using yarn when cli is installed with it', () => {
|
|
68
|
+
TerminalOutput_1.TerminalOutput.exec
|
|
69
|
+
.mockReturnValueOnce({
|
|
70
|
+
status: 0,
|
|
71
|
+
stdout: '/foo/bar/yarn/bin/test-cli\n',
|
|
72
|
+
stderr: '',
|
|
73
|
+
}) // yarn check
|
|
74
|
+
.mockReturnValueOnce({ status: 0, stdout: '1.0.0', stderr: '' }); // fetch command
|
|
75
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
76
|
+
const [success, version] = packageManager.fetchLatestPackage();
|
|
77
|
+
expect(success).toBe(true);
|
|
78
|
+
expect(version).toBe('1.0.0');
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
describe('getPackageDependencies', () => {
|
|
82
|
+
it('should parse npm dependencies into yarn-like format', () => {
|
|
83
|
+
const mockNpmOutput = JSON.stringify({
|
|
84
|
+
dependencies: {
|
|
85
|
+
'test-pkg': {
|
|
86
|
+
version: '1.0.0',
|
|
87
|
+
dependencies: {
|
|
88
|
+
'nested-test': {
|
|
89
|
+
version: '2.0.0',
|
|
90
|
+
},
|
|
91
|
+
},
|
|
92
|
+
},
|
|
93
|
+
'other-pkg': {
|
|
94
|
+
version: '3.0.0',
|
|
95
|
+
},
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
TerminalOutput_1.TerminalOutput.exec.mockReturnValueOnce({
|
|
99
|
+
status: 0,
|
|
100
|
+
stdout: mockNpmOutput,
|
|
101
|
+
stderr: '',
|
|
102
|
+
}); // list command
|
|
103
|
+
const [success, deps] = packageManagerHandler_1.default.getPackageDependencies(/test/);
|
|
104
|
+
expect(success).toBe(true);
|
|
105
|
+
expect(deps).toEqual({
|
|
106
|
+
type: 'tree',
|
|
107
|
+
data: {
|
|
108
|
+
type: 'list',
|
|
109
|
+
trees: [
|
|
110
|
+
{
|
|
111
|
+
name: 'test-pkg@1.0.0',
|
|
112
|
+
children: [],
|
|
113
|
+
hint: null,
|
|
114
|
+
color: 'bold',
|
|
115
|
+
depth: 0,
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'nested-test@2.0.0',
|
|
119
|
+
children: [],
|
|
120
|
+
hint: null,
|
|
121
|
+
color: null,
|
|
122
|
+
depth: 1,
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
},
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
describe('getPackageUpgradeCommand', () => {
|
|
130
|
+
it('should return yarn upgrade command when cli is installed with yarn', () => {
|
|
131
|
+
TerminalOutput_1.TerminalOutput.exec
|
|
132
|
+
.mockReturnValueOnce({
|
|
133
|
+
status: 0,
|
|
134
|
+
stdout: '/foo/bar/yarn/bin/test-cli\n',
|
|
135
|
+
stderr: '',
|
|
136
|
+
}) // yarn check
|
|
137
|
+
.mockReturnValueOnce({ status: 0, stdout: '1.22.0', stderr: '' }); // check for yarn 1.x
|
|
138
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
139
|
+
const [success, command] = packageManager.getPackageUpgradeCommand();
|
|
140
|
+
expect(success).toBe(true);
|
|
141
|
+
expect(command).toBe('yarn global upgrade test-package --latest');
|
|
142
|
+
});
|
|
143
|
+
it('should return npm upgrade command when cli is installed with npm', () => {
|
|
144
|
+
TerminalOutput_1.TerminalOutput.exec.mockReturnValueOnce({
|
|
145
|
+
status: 0,
|
|
146
|
+
stdout: '/usr/local/bin/test-cli\n',
|
|
147
|
+
stderr: '',
|
|
148
|
+
}); // npm check
|
|
149
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
150
|
+
const [success, command] = packageManager.getPackageUpgradeCommand();
|
|
151
|
+
expect(success).toBe(true);
|
|
152
|
+
expect(command).toBe('npm install --global test-package@latest');
|
|
153
|
+
});
|
|
154
|
+
it('should return error when yarn version is not 1.x', () => {
|
|
155
|
+
TerminalOutput_1.TerminalOutput.exec
|
|
156
|
+
.mockReturnValueOnce({
|
|
157
|
+
status: 0,
|
|
158
|
+
stdout: '/foo/bar/yarn/bin/test-cli\n',
|
|
159
|
+
stderr: '',
|
|
160
|
+
}) // yarn check
|
|
161
|
+
.mockReturnValueOnce({ status: 0, stdout: '2.22.0', stderr: '' }); // check for yarn 1.x
|
|
162
|
+
packageManager = new packageManagerHandler_1.default('test-package', 'test-cli');
|
|
163
|
+
const [success, message] = packageManager.getPackageUpgradeCommand();
|
|
164
|
+
expect(success).toBe(false);
|
|
165
|
+
expect(message).toContain('not compatible');
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
});
|
|
169
|
+
//# sourceMappingURL=packageManagerHandler.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"packageManagerHandler.test.js","sourceRoot":"","sources":["../../src/test/packageManagerHandler.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@optimizely/ocp-cli",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.8",
|
|
4
4
|
"description": "Optimizely Connect Platform command line interface",
|
|
5
5
|
"repository": "https://github.com/ZaiusInc/ocp-cli",
|
|
6
6
|
"license": "Apache-2.0",
|
|
@@ -34,7 +34,7 @@
|
|
|
34
34
|
"dependencies": {
|
|
35
35
|
"@aws-sdk/client-s3": "^3.316.0",
|
|
36
36
|
"@inquirer/prompts": "^7.2.4",
|
|
37
|
-
"@zaiusinc/app-sdk": "^1.4
|
|
37
|
+
"@zaiusinc/app-sdk": "^1.5.4",
|
|
38
38
|
"@zaiusinc/node-sdk": "^1.1.3",
|
|
39
39
|
"adm-zip": "^0.4.13",
|
|
40
40
|
"chalk": "^4.1.2",
|
|
@@ -80,7 +80,7 @@ export abstract class BaseBuildCommand {
|
|
|
80
80
|
|
|
81
81
|
console.log(chalk.gray('Performing local validation...'));
|
|
82
82
|
try {
|
|
83
|
-
execSync('yarn
|
|
83
|
+
execSync('yarn validate', {stdio: 'inherit'});
|
|
84
84
|
} catch (e) {
|
|
85
85
|
process.exit(1);
|
|
86
86
|
}
|
package/src/commands/app/Init.ts
CHANGED
|
@@ -158,7 +158,7 @@ export class CreateCommand {
|
|
|
158
158
|
'Reviews & Ratings', 'Content Management', 'Data Quality & Enrichment', 'Productivity', 'CRM',
|
|
159
159
|
'Accounting & Finance', 'CDP / DMP', 'Attribution & Linking', 'Testing & Utilities',
|
|
160
160
|
'Personalization & Content', 'Offers', 'Merchandising & Products', 'Site & Content Experience',
|
|
161
|
-
'Subscriptions'].sort();
|
|
161
|
+
'Subscriptions', 'Audience Sync'].sort();
|
|
162
162
|
await this.onAnswer(undefined, (await TerminalMenu.ask(`${this.question}:`, categories)).text);
|
|
163
163
|
break;
|
|
164
164
|
|
package/src/lib/AppUpdater.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import * as chalk from 'chalk';
|
|
2
|
-
import * as child_process from 'child_process';
|
|
3
2
|
import fetch from 'node-fetch';
|
|
4
3
|
import {compare, major} from 'semver';
|
|
5
4
|
import {getDependencyFileUrl} from './Config';
|
|
@@ -8,6 +7,7 @@ import {TerminalPassthru} from './TeminalPassthru';
|
|
|
8
7
|
import {TerminalConfirm} from './TerminalConfirm';
|
|
9
8
|
import table = require('text-table');
|
|
10
9
|
import {DependencyStage} from './DependencyStage';
|
|
10
|
+
import PackageManagerHandler from './packageManagerHandler';
|
|
11
11
|
|
|
12
12
|
export namespace AppUpdater {
|
|
13
13
|
/**
|
|
@@ -127,21 +127,20 @@ export namespace AppUpdater {
|
|
|
127
127
|
|
|
128
128
|
export function getPackageDependencies(prod: boolean = false): {[name: string]: string} {
|
|
129
129
|
try {
|
|
130
|
-
const result =
|
|
131
|
-
|
|
132
|
-
|
|
130
|
+
const [success, result] = PackageManagerHandler.getPackageDependencies(
|
|
131
|
+
/@zaiusinc\//,
|
|
132
|
+
prod
|
|
133
133
|
);
|
|
134
134
|
|
|
135
|
-
if (
|
|
136
|
-
const tree = JSON.parse(result.stdout.toString());
|
|
135
|
+
if (success) {
|
|
137
136
|
const output: {[name: string]: string} = {};
|
|
138
|
-
for (const item of
|
|
137
|
+
for (const item of result.data.trees) {
|
|
139
138
|
const [name, version] = item.name.split(/(?!^)@/);
|
|
140
139
|
output[name] = version;
|
|
141
140
|
}
|
|
142
141
|
return output;
|
|
143
142
|
} else {
|
|
144
|
-
console.error(result
|
|
143
|
+
console.error(result);
|
|
145
144
|
}
|
|
146
145
|
} catch (e) {
|
|
147
146
|
console.error(e);
|
|
@@ -154,16 +153,16 @@ export namespace AppUpdater {
|
|
|
154
153
|
return compare(ocpVersion, projectModuleversion) === 0;
|
|
155
154
|
}
|
|
156
155
|
|
|
157
|
-
|
|
156
|
+
// exported for testing
|
|
157
|
+
export function ensurePublicPackageUsage() {
|
|
158
158
|
try {
|
|
159
|
-
const result =
|
|
160
|
-
|
|
161
|
-
|
|
159
|
+
const [success, result] = PackageManagerHandler.getPackageDependencies(
|
|
160
|
+
/@zaius\/app-sdk|@zaius\/node-sdk/,
|
|
161
|
+
true
|
|
162
162
|
);
|
|
163
163
|
|
|
164
|
-
if (
|
|
165
|
-
|
|
166
|
-
if (!tree.data.trees.length) {
|
|
164
|
+
if (success) {
|
|
165
|
+
if (!result.data.trees.length) {
|
|
167
166
|
return;
|
|
168
167
|
}
|
|
169
168
|
|
|
@@ -4,9 +4,8 @@ import * as os from 'os';
|
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import * as semver from 'semver';
|
|
6
6
|
import { ManifestDefinition } from 'oo-cli/dist/types/manifest';
|
|
7
|
-
import { TerminalOutput } from './TerminalOutput';
|
|
8
7
|
import { TerminalConfirm } from './TerminalConfirm';
|
|
9
|
-
import
|
|
8
|
+
import PackageManagerHandler from './packageManagerHandler';
|
|
10
9
|
|
|
11
10
|
interface LastCheck {
|
|
12
11
|
date: Date;
|
|
@@ -20,13 +19,24 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
|
|
|
20
19
|
const installed = manifest.package?.version!;
|
|
21
20
|
const prerelease = semver.prerelease(installed);
|
|
22
21
|
const isBeta = prerelease && prerelease[0] === 'beta';
|
|
22
|
+
const packageManagerHandler = new PackageManagerHandler(
|
|
23
|
+
'@optimizely/ocp-cli',
|
|
24
|
+
'ocp'
|
|
25
|
+
);
|
|
23
26
|
|
|
24
27
|
if (isBeta) {
|
|
28
|
+
const [success, result] = packageManagerHandler.getPackageUpgradeCommand();
|
|
29
|
+
if (!success) {
|
|
30
|
+
console.log(chalk.red(result));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
25
33
|
console.log(
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
34
|
+
chalk.yellow(
|
|
35
|
+
`You are running beta version (${installed})'. ` +
|
|
36
|
+
`Run ${chalk.italic.grey(
|
|
37
|
+
`${result}`
|
|
38
|
+
)} to upgrade to the latest release version`
|
|
39
|
+
)
|
|
30
40
|
);
|
|
31
41
|
return;
|
|
32
42
|
}
|
|
@@ -41,13 +51,18 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
|
|
|
41
51
|
|
|
42
52
|
try {
|
|
43
53
|
let upToDate = true;
|
|
44
|
-
const latest =
|
|
45
|
-
if (latest) {
|
|
54
|
+
const [success, latest] = packageManagerHandler.fetchLatestPackage();
|
|
55
|
+
if (success && latest) {
|
|
46
56
|
if (semver.gt(latest, installed)) {
|
|
47
57
|
upToDate = false;
|
|
48
58
|
if (await TerminalConfirm.ask(
|
|
49
59
|
chalk.yellow('A new version of OCP CLI is available. Update now?'), noPrompt, true)) {
|
|
50
|
-
|
|
60
|
+
const [passed, error] =
|
|
61
|
+
packageManagerHandler.upgradeGlobalPackageToLatest();
|
|
62
|
+
if (!passed) {
|
|
63
|
+
console.log(chalk.red(error));
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
51
66
|
}
|
|
52
67
|
}
|
|
53
68
|
}
|
|
@@ -57,10 +72,6 @@ export async function checkForUpdate(manifest: ManifestDefinition, noPrompt: boo
|
|
|
57
72
|
}
|
|
58
73
|
}
|
|
59
74
|
|
|
60
|
-
async function fetchLatest() {
|
|
61
|
-
return TerminalOutput.exec('yarn info -s @optimizely/ocp-cli dist-tags.latest').stdout.trim();
|
|
62
|
-
}
|
|
63
|
-
|
|
64
75
|
function getLastCheck(): LastCheck | undefined {
|
|
65
76
|
const file = path.join(os.homedir(), `.ocp/${LAST_VERSION_CHECK_FILE}`);
|
|
66
77
|
if (fs.existsSync(file)) {
|