@squiz/dxp-cli-next 5.10.0 → 5.11.0

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.
Files changed (28) hide show
  1. package/README.md +1 -0
  2. package/lib/__tests__/integration/main.spec.js +1 -1
  3. package/lib/datastore/simulator/clear/clear.d.ts +3 -0
  4. package/lib/datastore/simulator/clear/clear.js +70 -0
  5. package/lib/datastore/simulator/clear/clear.spec.d.ts +1 -0
  6. package/lib/datastore/simulator/clear/clear.spec.js +224 -0
  7. package/lib/datastore/simulator/list/list.d.ts +3 -0
  8. package/lib/datastore/simulator/list/list.js +117 -0
  9. package/lib/datastore/simulator/list/list.spec.d.ts +1 -0
  10. package/lib/datastore/simulator/list/list.spec.js +95 -0
  11. package/lib/datastore/simulator/pause/pause.d.ts +3 -0
  12. package/lib/datastore/simulator/pause/pause.js +85 -0
  13. package/lib/datastore/simulator/pause/pause.spec.d.ts +1 -0
  14. package/lib/datastore/simulator/pause/pause.spec.js +90 -0
  15. package/lib/datastore/simulator/remove/remove.js +1 -1
  16. package/lib/datastore/simulator/resume/resume.d.ts +3 -0
  17. package/lib/datastore/simulator/resume/resume.js +85 -0
  18. package/lib/datastore/simulator/resume/resume.spec.d.ts +1 -0
  19. package/lib/datastore/simulator/resume/resume.spec.js +90 -0
  20. package/lib/datastore/simulator/simulatorCommand.js +11 -1
  21. package/lib/datastore/simulator/upgrade/upgrade.d.ts +3 -0
  22. package/lib/datastore/simulator/upgrade/upgrade.js +160 -0
  23. package/lib/datastore/simulator/upgrade/upgrade.spec.d.ts +1 -0
  24. package/lib/datastore/simulator/upgrade/upgrade.spec.js +204 -0
  25. package/lib/datastore/simulator/utils.d.ts +2 -0
  26. package/lib/datastore/simulator/utils.js +4 -5
  27. package/lib/dxp.js +2 -1
  28. package/package.json +2 -2
@@ -0,0 +1,204 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
26
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
27
+ return new (P || (P = Promise))(function (resolve, reject) {
28
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
29
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
30
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
31
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
32
+ });
33
+ };
34
+ var __importDefault = (this && this.__importDefault) || function (mod) {
35
+ return (mod && mod.__esModule) ? mod : { "default": mod };
36
+ };
37
+ Object.defineProperty(exports, "__esModule", { value: true });
38
+ const upgrade_1 = __importDefault(require("./upgrade"));
39
+ const utils = __importStar(require("../utils"));
40
+ const chalk_1 = __importDefault(require("chalk"));
41
+ const nock_1 = __importDefault(require("nock"));
42
+ const logSpy = jest.spyOn(global.console, 'log');
43
+ const exitSpy = jest.spyOn(process, 'exit').mockImplementation(() => {
44
+ return undefined;
45
+ }); // prevent process exit on error
46
+ beforeEach(() => {
47
+ jest.resetAllMocks();
48
+ (0, nock_1.default)('https://registry.hub.docker.com')
49
+ .get('/v2/repositories/squizdxp/datastore/tags/latest')
50
+ .reply(200, {
51
+ images: [
52
+ {
53
+ digest: 'sha256:bd61f8f80d9f235d81477454cf512a6edede0ae6d2d0a8c0508956db2418dbe0',
54
+ },
55
+ ],
56
+ });
57
+ });
58
+ describe('datastoreSimulatorUpgrade', () => {
59
+ it('should not upgrade a simulator if prompt returns false', () => __awaiter(void 0, void 0, void 0, function* () {
60
+ const forcePromptSpy = jest
61
+ .spyOn(utils, 'forcePrompt')
62
+ .mockResolvedValue(false);
63
+ let executeCommandCount = 0;
64
+ const executeCommandSpy = jest
65
+ .spyOn(utils, 'executeCommand')
66
+ .mockImplementation((cmd, opt) => {
67
+ executeCommandCount++;
68
+ switch (executeCommandCount) {
69
+ case 1:
70
+ expect(cmd).toStrictEqual('docker -v');
71
+ return Promise.resolve('Docker version 20.10.23, build 7155243');
72
+ }
73
+ return Promise.reject(false);
74
+ });
75
+ const program = (0, upgrade_1.default)();
76
+ const commandErrorSpy = jest.spyOn(program, 'error');
77
+ yield program.parseAsync([
78
+ 'node',
79
+ 'dxp-cli',
80
+ 'datastore',
81
+ 'simulator',
82
+ 'upgrade',
83
+ ]);
84
+ expect(commandErrorSpy).toHaveBeenCalledWith(chalk_1.default.red(`To upgrade run:
85
+ $ dxp-next datastore simulator upgrade --force
86
+ `));
87
+ expect(forcePromptSpy).toHaveBeenCalledWith('This will wipe all test data for all of your simulated blueprints. Are you sure you want to continue? (y/N)', false);
88
+ expect(logSpy).toHaveBeenCalledTimes(1);
89
+ expect(executeCommandSpy).toHaveBeenCalledTimes(1);
90
+ }));
91
+ it('should not upgrade a simulator if already on latest', () => __awaiter(void 0, void 0, void 0, function* () {
92
+ let executeCommandCount = 0;
93
+ const executeCommandSpy = jest
94
+ .spyOn(utils, 'executeCommand')
95
+ .mockImplementation((cmd, opt) => {
96
+ executeCommandCount++;
97
+ switch (executeCommandCount) {
98
+ case 1:
99
+ expect(cmd).toStrictEqual('docker -v');
100
+ return Promise.resolve('Docker version 20.10.23, build 7155243');
101
+ case 2:
102
+ expect(cmd).toStrictEqual('docker image inspect squizdxp/datastore:latest --format "{{ index .RepoDigests }}"');
103
+ return Promise.resolve('[squizdxp/datastore@sha256:bd61f8f80d9f235d81477454cf512a6edede0ae6d2d0a8c0508956db2418dbe0]');
104
+ }
105
+ return Promise.reject(false);
106
+ });
107
+ const program = (0, upgrade_1.default)();
108
+ const commandErrorSpy = jest.spyOn(program, 'error');
109
+ yield program.parseAsync([
110
+ 'node',
111
+ 'dxp-cli',
112
+ 'datastore',
113
+ 'simulator',
114
+ 'upgrade',
115
+ '--force',
116
+ ]);
117
+ expect(logSpy).toHaveBeenCalledTimes(1);
118
+ expect(executeCommandSpy).toHaveBeenCalledTimes(2);
119
+ }));
120
+ it('should upgrade a simulator if prompt returns true', () => __awaiter(void 0, void 0, void 0, function* () {
121
+ const forcePromptSpy = jest
122
+ .spyOn(utils, 'forcePrompt')
123
+ .mockResolvedValue(true);
124
+ let executeCommandCount = 0;
125
+ const executeCommandSpy = jest
126
+ .spyOn(utils, 'executeCommand')
127
+ .mockImplementation((cmd, opt) => {
128
+ executeCommandCount++;
129
+ // console.info(executeCommandCount, cmd);
130
+ switch (executeCommandCount) {
131
+ case 1:
132
+ expect(cmd).toStrictEqual('docker -v');
133
+ return Promise.resolve('Docker version 20.10.23, build 7155243');
134
+ case 2:
135
+ expect(cmd).toStrictEqual('docker image inspect squizdxp/datastore:latest --format "{{ index .RepoDigests }}"');
136
+ return Promise.resolve('[squizdxp/datastore@sha256:bd61f8f80d9f235d81477454cf512a6edede0ae6d2d0a8c0508956db2418dbe1]');
137
+ case 3:
138
+ expect(cmd).toStrictEqual('docker image inspect squizdxp/datastore:latest --format \'{{ or (index .Config.Labels "squiz.datastore.version") (printf "Unknown") }}\'');
139
+ return Promise.resolve('4.0.0');
140
+ case 4:
141
+ expect(cmd).toStrictEqual('docker ps -a --filter "name=datastore-sim-*" --format "{{.Names}}~{{.Labels}}~{{.Status}}~{{.Ports}}#"');
142
+ return Promise.resolve('datastore-sim-6909fc2c~desktop.docker.io/binds/0/Source=/Users/pnolland/Documents/Work/GitRepos/blueprints/boilerplate,desktop.docker.io/binds/0/SourceKind=hostFile,desktop.docker.io/binds/0/Target=/var/www/instances,port=7001,squiz.datastore.version=4.0.0,blueprint=/Users/pnolland/Documents/Work/GitRepos/blueprints/boilerplate/api.yaml~Up 16 hours~0.0.0.0:7001->80/tcp#');
143
+ case 5:
144
+ expect(cmd).toStrictEqual('docker pull squizdxp/datastore:latest');
145
+ return Promise.resolve('');
146
+ case 6:
147
+ expect(cmd).toStrictEqual('mktemp -d -t datastore-XXXXXXXXXX');
148
+ return Promise.resolve('/tmp/datastore-XXXXXXXXXX');
149
+ case 7:
150
+ expect(cmd).toStrictEqual('mkdir /tmp/datastore-XXXXXXXXXX/datastore-sim-6909fc2c');
151
+ return Promise.resolve('');
152
+ case 8:
153
+ expect(cmd).toStrictEqual('docker start datastore-sim-6909fc2c > /dev/null');
154
+ return Promise.resolve('');
155
+ case 9:
156
+ expect(cmd).toStrictEqual('docker cp datastore-sim-6909fc2c:/var/www/data /tmp/datastore-XXXXXXXXXX/datastore-sim-6909fc2c/');
157
+ return Promise.resolve('');
158
+ case 10:
159
+ expect(cmd).toStrictEqual('docker rm -f datastore-sim-6909fc2c > /dev/null');
160
+ return Promise.resolve('');
161
+ case 11:
162
+ expect(cmd).toStrictEqual('docker run -l "blueprint=/Users/pnolland/Documents/Work/GitRepos/blueprints/boilerplate/api.yaml" -l "port=7001" -itd --name datastore-sim-6909fc2c -p 0.0.0.0:7001:80 -e MYHOST=0.0.0.0 -e MYPORT=7001 -e BLUEPRINT=/Users/pnolland/Documents/Work/GitRepos/blueprints/boilerplate/api.yaml -v "/Users/pnolland/Documents/Work/GitRepos/blueprints/boilerplate":/var/www/instances squizdxp/datastore:latest');
163
+ return Promise.resolve('');
164
+ case 12:
165
+ expect(cmd).toStrictEqual('docker cp /tmp/datastore-XXXXXXXXXX/datastore-sim-6909fc2c/data datastore-sim-6909fc2c:/var/www/');
166
+ return Promise.resolve('');
167
+ case 13:
168
+ expect(cmd).toStrictEqual('docker image inspect squizdxp/datastore:latest --format \'{{ or (index .Config.Labels "squiz.datastore.version") (printf "Unknown") }}\'');
169
+ return Promise.resolve('4.0.1');
170
+ case 14:
171
+ expect(cmd).toStrictEqual('docker exec datastore-sim-6909fc2c cat /var/www/data/containerData.json');
172
+ return Promise.resolve('{}');
173
+ case 15:
174
+ expect(cmd).toStrictEqual(`docker exec -i datastore-sim-6909fc2c bash -c "echo '{
175
+ \\"imageVersion\\": \\"4.0.1\\",
176
+ \\"imageDigest\\": \\"[squizdxp/datastore@sha256:bd61f8f80d9f235d81477454cf512a6edede0ae6d2d0a8c0508956db2418dbe1]\\"
177
+ }' > /var/www/data/containerData.json"`);
178
+ return Promise.resolve('');
179
+ case 16:
180
+ expect(cmd).toStrictEqual('docker exec datastore-sim-6909fc2c bash -c "rm -rf /var/www/data/storage; rm -rf /var/www/data/provision/**/oven"');
181
+ return Promise.resolve('');
182
+ case 17:
183
+ expect(cmd).toStrictEqual('docker image inspect squizdxp/datastore:latest --format \'{{ or (index .Config.Labels "squiz.datastore.version") (printf "Unknown") }}\'');
184
+ return Promise.resolve('4.0.1');
185
+ case 18:
186
+ expect(cmd).toStrictEqual('rm -rf /tmp/datastore-XXXXXXXXXX');
187
+ return Promise.resolve('');
188
+ }
189
+ return Promise.reject(false);
190
+ });
191
+ const program = (0, upgrade_1.default)();
192
+ const commandErrorSpy = jest.spyOn(program, 'error');
193
+ yield program.parseAsync([
194
+ 'node',
195
+ 'dxp-cli',
196
+ 'datastore',
197
+ 'simulator',
198
+ 'upgrade',
199
+ ]);
200
+ expect(forcePromptSpy).toHaveBeenCalledWith('This will wipe all test data for all of your simulated blueprints. Are you sure you want to continue? (y/N)', false);
201
+ expect(logSpy).toHaveBeenCalledTimes(2);
202
+ expect(executeCommandSpy).toHaveBeenCalledTimes(18);
203
+ }));
204
+ });
@@ -1,8 +1,10 @@
1
+ import { FileStore } from '../../ApplicationStore';
1
2
  declare type datastoreVersionCache = {
2
3
  digest: string;
3
4
  updatedAt: number;
4
5
  version: string;
5
6
  };
7
+ export declare const datastoreSimulatorCache: FileStore;
6
8
  export declare const datastoreRepo = "squizdxp/datastore:latest";
7
9
  export declare const allowedExtensions: string[];
8
10
  export declare const host = "0.0.0.0";
@@ -32,13 +32,13 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
32
32
  });
33
33
  };
34
34
  Object.defineProperty(exports, "__esModule", { value: true });
35
- exports.getSimulatorDetails = exports.checkUpdateAvailable = exports.checkDockerInstalled = exports.forcePrompt = exports.promptForContinue = exports.stringHashShort = exports.executeCommand = exports.availablePorts = exports.host = exports.allowedExtensions = exports.datastoreRepo = void 0;
35
+ exports.getSimulatorDetails = exports.checkUpdateAvailable = exports.checkDockerInstalled = exports.forcePrompt = exports.promptForContinue = exports.stringHashShort = exports.executeCommand = exports.availablePorts = exports.host = exports.allowedExtensions = exports.datastoreRepo = exports.datastoreSimulatorCache = void 0;
36
36
  const child_process_1 = require("child_process");
37
37
  const ApplicationStore_1 = require("../../ApplicationStore");
38
38
  const ApiService_1 = require("../../ApiService");
39
39
  const utils_1 = require("../utils");
40
40
  const path_1 = require("path");
41
- const datastoreSimulatorCache = {
41
+ exports.datastoreSimulatorCache = {
42
42
  name: 'datastore-simulator',
43
43
  type: 'data',
44
44
  };
@@ -95,7 +95,6 @@ const promptForContinue = (versionCache, currentVersion) => __awaiter(void 0, vo
95
95
  });
96
96
  exports.promptForContinue = promptForContinue;
97
97
  const forcePrompt = (message, def = false) => __awaiter(void 0, void 0, void 0, function* () {
98
- console.info('WHY!!!!!');
99
98
  const inquirer = yield Promise.resolve().then(() => __importStar(require('inquirer')));
100
99
  const confirm = yield inquirer.default.prompt([
101
100
  {
@@ -124,7 +123,7 @@ const checkUpdateAvailable = () => __awaiter(void 0, void 0, void 0, function* (
124
123
  simulatorVersionCmd +=
125
124
  ' --format \'{{ or (index .Config.Labels "squiz.datastore.version") (printf "Unknown") }}\'';
126
125
  // Default updatedAt to over 1 hour ago to force a check
127
- const versionCache = JSON.parse((yield (0, ApplicationStore_1.getApplicationFile)(datastoreSimulatorCache)) ||
126
+ const versionCache = JSON.parse((yield (0, ApplicationStore_1.getApplicationFile)(exports.datastoreSimulatorCache)) ||
128
127
  `{"updatedAt": ${Math.floor(Date.now() / 1000 - 7200)}}`);
129
128
  let refreshVersionCache = false;
130
129
  let versionInfo = versionCache;
@@ -155,7 +154,7 @@ const checkUpdateAvailable = () => __awaiter(void 0, void 0, void 0, function* (
155
154
  updatedAt: Date.now() / 1000,
156
155
  version: taggedImage.name || '',
157
156
  };
158
- yield (0, ApplicationStore_1.saveApplicationFile)(datastoreSimulatorCache, JSON.stringify(versionInfo));
157
+ yield (0, ApplicationStore_1.saveApplicationFile)(exports.datastoreSimulatorCache, JSON.stringify(versionInfo));
159
158
  }
160
159
  let result;
161
160
  try {
package/lib/dxp.js CHANGED
@@ -14,6 +14,7 @@ validateNodeVersion();
14
14
  const auth_1 = __importDefault(require("./auth"));
15
15
  const cmp_1 = __importDefault(require("./cmp"));
16
16
  const job_runner_1 = __importDefault(require("./job-runner"));
17
+ const datastore_1 = __importDefault(require("./datastore"));
17
18
  const program = new commander_1.default.Command();
18
19
  const packageJson = require('../package.json');
19
20
  const version = packageJson.version;
@@ -24,7 +25,7 @@ program
24
25
  .addCommand(auth_1.default)
25
26
  .addCommand(cmp_1.default)
26
27
  .addCommand(job_runner_1.default)
27
- // .addCommand(datastoreCommand)
28
+ .addCommand(datastore_1.default)
28
29
  .action(() => {
29
30
  program.help();
30
31
  })
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@squiz/dxp-cli-next",
3
- "version": "5.10.0",
3
+ "version": "5.11.0",
4
4
  "repository": {
5
5
  "url": "https://gitlab.squiz.net/dxp/dxp-cli-next"
6
6
  },
@@ -39,7 +39,7 @@
39
39
  "codecov"
40
40
  ],
41
41
  "dependencies": {
42
- "@squiz/component-cli-lib": "1.63.0",
42
+ "@squiz/component-cli-lib": "1.64.1",
43
43
  "@apidevtools/swagger-parser": "10.1.0",
44
44
  "axios": "1.1.3",
45
45
  "cli-color": "2.0.3",