bdy 1.18.24-dev → 1.18.24-dev-pipeline
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/distTs/package.json +1 -1
- package/distTs/src/api/client.js +9 -2
- package/distTs/src/command/crawl/validation.js +151 -0
- package/distTs/src/command/crawl.js +144 -0
- package/distTs/src/command/pipeline/run/start.js +101 -0
- package/distTs/src/command/pipeline/run/status.js +34 -0
- package/distTs/src/command/pipeline/run.js +7 -125
- package/distTs/src/command/project/link.js +11 -11
- package/distTs/src/command/tests/capture/validation.js +59 -0
- package/distTs/src/command/tests/capture.js +100 -0
- package/distTs/src/command/tests/unit/upload.js +86 -0
- package/distTs/src/command/tests/unit.js +11 -0
- package/distTs/src/command/tests/visual/session/close.js +27 -0
- package/distTs/src/command/tests/visual/session/create.js +82 -0
- package/distTs/src/command/tests/visual/session.js +13 -0
- package/distTs/src/command/tests/visual/setup.js +20 -0
- package/distTs/src/command/tests/visual/shared/validation.js +118 -0
- package/distTs/src/command/tests/visual/upload.js +138 -0
- package/distTs/src/command/tests/visual.js +15 -0
- package/distTs/src/command/tests.js +15 -0
- package/distTs/src/input.js +6 -10
- package/distTs/src/output/pipeline.js +915 -0
- package/distTs/src/output.js +81 -31
- package/distTs/src/texts.js +28 -36
- package/distTs/src/types/crawl.js +2 -0
- package/distTs/src/types/pipeline.js +424 -0
- package/package.json +1 -1
- package/distTs/src/command/project/get.js +0 -18
- package/distTs/src/command/project/set.js +0 -31
- package/distTs/src/command/sandbox/get/yaml.js +0 -30
- package/distTs/src/command/vt/scrape.js +0 -193
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("../../../utils");
|
|
7
|
+
const texts_1 = require("../../../texts");
|
|
8
|
+
const output_1 = __importDefault(require("../../../output"));
|
|
9
|
+
const node_fs_1 = require("node:fs");
|
|
10
|
+
const node_path_1 = __importDefault(require("node:path"));
|
|
11
|
+
const node_zlib_1 = require("node:zlib");
|
|
12
|
+
const commandVisualUpload = (0, utils_1.newCommand)('upload', texts_1.DESC_COMMAND_VISUAL_UPLOAD);
|
|
13
|
+
commandVisualUpload.action(async () => {
|
|
14
|
+
const { getCiAndGitInfo, formattedCiInfo } = require('@buddy-works/ci-info');
|
|
15
|
+
const { checkToken } = require('../../../visualTest/validation');
|
|
16
|
+
const { getDefaultSettings, sendStorybook } = require('../../../visualTest/requests');
|
|
17
|
+
const { setDefaultSettings } = require('../../../visualTest/snapshots');
|
|
18
|
+
const { setCiAndCommitInfo } = require('../../../visualTest/context');
|
|
19
|
+
if (!checkToken('vt')) {
|
|
20
|
+
output_1.default.exitError(texts_1.ERR_MISSING_VT_TOKEN);
|
|
21
|
+
}
|
|
22
|
+
const currentDirectoryFiles = getCurrentDirectoryFiles();
|
|
23
|
+
if (!isStorybookDirectory(currentDirectoryFiles)) {
|
|
24
|
+
output_1.default.exitError(texts_1.ERR_WRONG_STORYBOOK_DIRECTORY);
|
|
25
|
+
}
|
|
26
|
+
const storybookStoriesIndex = getStorybookStoriesIndex(currentDirectoryFiles);
|
|
27
|
+
const storiesList = getStoriesList(storybookStoriesIndex);
|
|
28
|
+
const storybookSnapshots = getStorybookSnapshots(storiesList);
|
|
29
|
+
const defaultSettings = await getDefaultSettings();
|
|
30
|
+
setDefaultSettings(defaultSettings);
|
|
31
|
+
const ciAndGitInfo = await getCiAndGitInfo({
|
|
32
|
+
baseBranch: defaultSettings.baseBranch,
|
|
33
|
+
logger: output_1.default.warning,
|
|
34
|
+
});
|
|
35
|
+
setCiAndCommitInfo(ciAndGitInfo);
|
|
36
|
+
output_1.default.normal(formattedCiInfo(ciAndGitInfo));
|
|
37
|
+
try {
|
|
38
|
+
const compressedStorybookDirectory = await createCompressedStorybookDirectory(currentDirectoryFiles);
|
|
39
|
+
const { message } = await sendStorybook(storybookSnapshots, compressedStorybookDirectory);
|
|
40
|
+
output_1.default.exitSuccess(message);
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
output_1.default.exitError(`${error}`);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
function getCurrentDirectoryFiles() {
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
const filesAndDirectories = (0, node_fs_1.readdirSync)(cwd, {
|
|
49
|
+
encoding: 'utf8',
|
|
50
|
+
recursive: true,
|
|
51
|
+
});
|
|
52
|
+
return filesAndDirectories.filter((file) => {
|
|
53
|
+
const elementPath = node_path_1.default.join(cwd, file);
|
|
54
|
+
const stats = (0, node_fs_1.statSync)(elementPath);
|
|
55
|
+
return stats.isFile();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
async function createCompressedStorybookDirectory(files) {
|
|
59
|
+
const tar = require('tar-stream');
|
|
60
|
+
const cwd = process.cwd();
|
|
61
|
+
const chunks = [];
|
|
62
|
+
return new Promise((resolve, reject) => {
|
|
63
|
+
const compressStream = (0, node_zlib_1.createBrotliCompress)({
|
|
64
|
+
params: {
|
|
65
|
+
[node_zlib_1.constants.BROTLI_PARAM_QUALITY]: 6,
|
|
66
|
+
},
|
|
67
|
+
});
|
|
68
|
+
compressStream.on('data', (chunk) => {
|
|
69
|
+
chunks.push(chunk);
|
|
70
|
+
});
|
|
71
|
+
compressStream.on('end', () => {
|
|
72
|
+
resolve(Buffer.concat(chunks));
|
|
73
|
+
});
|
|
74
|
+
compressStream.on('error', reject);
|
|
75
|
+
const packStream = tar.pack();
|
|
76
|
+
packStream.pipe(compressStream);
|
|
77
|
+
let filesProcessed = 0;
|
|
78
|
+
for (const file of files) {
|
|
79
|
+
const filePath = node_path_1.default.join(cwd, file);
|
|
80
|
+
const stats = (0, node_fs_1.statSync)(filePath);
|
|
81
|
+
const entry = packStream.entry({
|
|
82
|
+
name: file,
|
|
83
|
+
size: stats.size,
|
|
84
|
+
}, (error) => {
|
|
85
|
+
if (error) {
|
|
86
|
+
reject(error);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
filesProcessed += 1;
|
|
90
|
+
if (filesProcessed === files.length) {
|
|
91
|
+
packStream.finalize();
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
const fileStream = (0, node_fs_1.createReadStream)(filePath);
|
|
96
|
+
fileStream.pipe(entry);
|
|
97
|
+
fileStream.on('error', reject);
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function isStorybookDirectory(files) {
|
|
102
|
+
return (files.length > 0 &&
|
|
103
|
+
files.includes('index.html') &&
|
|
104
|
+
files.includes('iframe.html'));
|
|
105
|
+
}
|
|
106
|
+
function getStorybookStoriesIndex(files) {
|
|
107
|
+
const indexFiles = files.find((file) => file === 'index.json');
|
|
108
|
+
if (indexFiles) {
|
|
109
|
+
return indexFiles;
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
return output_1.default.exitError(texts_1.ERR_MISSING_STORYBOOK_INDEX_FILE);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
function getStoriesList(storybookStoriesIndex) {
|
|
116
|
+
const storiesListFile = (0, node_fs_1.readFileSync)(storybookStoriesIndex);
|
|
117
|
+
try {
|
|
118
|
+
const json = JSON.parse(storiesListFile.toString());
|
|
119
|
+
if (![4, 5].includes(json.v)) {
|
|
120
|
+
output_1.default.exitError(texts_1.ERR_UNSUPPORTED_STORYBOOK);
|
|
121
|
+
}
|
|
122
|
+
return json;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
output_1.default.exitError(texts_1.ERR_PARSING_STORIES);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
function getStorybookSnapshots(storiesList) {
|
|
129
|
+
const stories = Object.entries(storiesList.entries)
|
|
130
|
+
.filter(([, value]) => value.type === 'story')
|
|
131
|
+
.map(([key, value]) => ({
|
|
132
|
+
id: key,
|
|
133
|
+
name: `${value.title}/${value.name}`,
|
|
134
|
+
}));
|
|
135
|
+
output_1.default.normal((0, texts_1.TXT_STORIES_AMOUNT)(stories.length));
|
|
136
|
+
return stories;
|
|
137
|
+
}
|
|
138
|
+
exports.default = commandVisualUpload;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("../../utils");
|
|
7
|
+
const texts_1 = require("../../texts");
|
|
8
|
+
const setup_1 = __importDefault(require("./visual/setup"));
|
|
9
|
+
const upload_1 = __importDefault(require("./visual/upload"));
|
|
10
|
+
const session_1 = __importDefault(require("./visual/session"));
|
|
11
|
+
const commandVisual = (0, utils_1.newCommand)('visual', texts_1.DESC_COMMAND_VISUAL);
|
|
12
|
+
commandVisual.addCommand(setup_1.default);
|
|
13
|
+
commandVisual.addCommand(upload_1.default);
|
|
14
|
+
commandVisual.addCommand(session_1.default);
|
|
15
|
+
exports.default = commandVisual;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const utils_1 = require("../utils");
|
|
7
|
+
const texts_1 = require("../texts");
|
|
8
|
+
const unit_1 = __importDefault(require("./tests/unit"));
|
|
9
|
+
const visual_1 = __importDefault(require("./tests/visual"));
|
|
10
|
+
const capture_1 = __importDefault(require("./tests/capture"));
|
|
11
|
+
const commandTests = (0, utils_1.newCommand)('tests', texts_1.DESC_COMMAND_TESTS);
|
|
12
|
+
commandTests.addCommand(unit_1.default);
|
|
13
|
+
commandTests.addCommand(visual_1.default);
|
|
14
|
+
commandTests.addCommand(capture_1.default);
|
|
15
|
+
exports.default = commandTests;
|
package/distTs/src/input.js
CHANGED
|
@@ -350,6 +350,12 @@ class Input {
|
|
|
350
350
|
return utils_1.PACKAGE_SCOPE.PROJECT;
|
|
351
351
|
return utils_1.PACKAGE_SCOPE.WORKSPACE;
|
|
352
352
|
}
|
|
353
|
+
static pipelineRunId(runId) {
|
|
354
|
+
const r = parseInt(runId, 10);
|
|
355
|
+
if (!isNaN(r))
|
|
356
|
+
return r;
|
|
357
|
+
output_1.default.exitError(texts_1.ERR_RUN_PIPELINE_WRONG_RUN_ID);
|
|
358
|
+
}
|
|
353
359
|
static pipelineRunPriority(priority) {
|
|
354
360
|
if (!priority)
|
|
355
361
|
return null;
|
|
@@ -457,16 +463,6 @@ class Input {
|
|
|
457
463
|
output_1.default.exitError(texts_1.ERR_REST_API_URL);
|
|
458
464
|
}
|
|
459
465
|
}
|
|
460
|
-
static pipelineRunWaitTime(time) {
|
|
461
|
-
let t = Number.parseInt(time, 10);
|
|
462
|
-
if (!t)
|
|
463
|
-
t = 1440;
|
|
464
|
-
else if (t < 0)
|
|
465
|
-
t = 1;
|
|
466
|
-
else if (t > 1440)
|
|
467
|
-
t = 1440;
|
|
468
|
-
return t;
|
|
469
|
-
}
|
|
470
466
|
static resolvePath(path) {
|
|
471
467
|
const p = (0, node_path_1.resolve)(path);
|
|
472
468
|
const exists = node_fs_1.default.existsSync(p);
|