datagrok-tools 6.4.3 → 6.4.5
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/CHANGELOG.md +8 -0
- package/bin/commands/publish.js +2 -3
- package/bin/utils/test-utils.js +19 -7
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
# Datagrok-tools changelog
|
|
2
2
|
|
|
3
|
+
## 6.4.5 (2026-06-23)
|
|
4
|
+
|
|
5
|
+
* `grok test` — screen recording (`--record`) is now optional: if `page.screencast()` can't start (e.g. `ffmpeg` is missing on the runner, `spawnSync ffmpeg ENOENT`), the run warns and continues instead of failing the whole Puppeteer pass with 0 tests executed.
|
|
6
|
+
|
|
7
|
+
## 6.4.4 (2026-06-22)
|
|
8
|
+
|
|
9
|
+
* `grok publish` — fixed every publish failing with a silent `exit 1` after a successful upload: a stray `fs.unlinkSync('zip')` threw `ENOENT` (the archive is streamed in-memory, no `zip` file is ever written), and the surrounding `catch` only logged under `--verbose`. The errant unlink is removed and publish errors are now always surfaced.
|
|
10
|
+
|
|
3
11
|
## 6.4.3 (2026-06-22)
|
|
4
12
|
|
|
5
13
|
* `grok api` — numeric IVP model inputs are now generated with `nullable: false`, so an emptied input field fails form validation instead of running the solver with a null.
|
package/bin/commands/publish.js
CHANGED
|
@@ -457,7 +457,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
|
|
|
457
457
|
}
|
|
458
458
|
if (debug) timestamps = checkData;
|
|
459
459
|
} catch (error) {
|
|
460
|
-
|
|
460
|
+
color.error(utils.isConnectivityError(error) ? `Server is possibly offline: ${host}` : `Failed to validate package on ${host}: ${error?.message ?? error}`);
|
|
461
461
|
if (color.isVerbose()) console.error(error);
|
|
462
462
|
return 1;
|
|
463
463
|
}
|
|
@@ -582,7 +582,6 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
|
|
|
582
582
|
body: zipBuffer
|
|
583
583
|
});
|
|
584
584
|
const log = JSON.parse(await body.text());
|
|
585
|
-
_fs.default.unlinkSync('zip');
|
|
586
585
|
if (log != undefined) {
|
|
587
586
|
if (log['#type'] === 'ApiError') {
|
|
588
587
|
color.error(log['message']);
|
|
@@ -595,7 +594,7 @@ async function processPackage(debug, rebuild, host, devKey, packageName, dropDb,
|
|
|
595
594
|
}
|
|
596
595
|
}
|
|
597
596
|
} catch (error) {
|
|
598
|
-
|
|
597
|
+
color.error(utils.isConnectivityError(error) ? `Server is possibly offline: ${url}` : `Publish failed: ${error?.message ?? error}`);
|
|
599
598
|
if (color.isVerbose()) console.error(error);
|
|
600
599
|
return 1;
|
|
601
600
|
}
|
package/bin/utils/test-utils.js
CHANGED
|
@@ -256,9 +256,14 @@ async function loadTestsList(packages, core = false, record = false) {
|
|
|
256
256
|
const suffix = process.env.BACKUP_SIZE && process.env.WORKER_ID && process.env.TOTAL_WORKERS ? `_${process.env.BACKUP_SIZE}_${process.env.WORKER_ID}_${process.env.TOTAL_WORKERS}` : '';
|
|
257
257
|
const logsDir = `./load-test-console-output${suffix}.log`;
|
|
258
258
|
const recordDir = `./load-test-record${suffix}.mp4`;
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
259
|
+
try {
|
|
260
|
+
recorder = await page.screencast({
|
|
261
|
+
path: recordDir
|
|
262
|
+
});
|
|
263
|
+
} catch (e) {
|
|
264
|
+
recorder = null;
|
|
265
|
+
color.warn(`Screen recording disabled: ${e?.message || e}`);
|
|
266
|
+
}
|
|
262
267
|
await page.exposeFunction('addLogsToFile', addLogsToFile);
|
|
263
268
|
_fs.default.writeFileSync(logsDir, ``);
|
|
264
269
|
page.on('console', msg => {
|
|
@@ -636,10 +641,17 @@ async function runBrowser(testExecutionData, browserOptions, browsersId, testInv
|
|
|
636
641
|
const logsDir = `./test-console-output-${currentBrowserNum}.log`;
|
|
637
642
|
const recordDir = `./test-record-${currentBrowserNum}.mp4`;
|
|
638
643
|
if (browserOptions.record && !existingBrowserSession) {
|
|
639
|
-
// Only set up recording on initial browser creation, not on retry
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
644
|
+
// Only set up recording on initial browser creation, not on retry.
|
|
645
|
+
// Recording is an optional diagnostic — if it can't start (e.g. ffmpeg is
|
|
646
|
+
// missing on the runner), warn and keep testing instead of failing the pass.
|
|
647
|
+
try {
|
|
648
|
+
recorder = await page.screencast({
|
|
649
|
+
path: recordDir
|
|
650
|
+
});
|
|
651
|
+
} catch (e) {
|
|
652
|
+
recorder = null;
|
|
653
|
+
color.warn(`Screen recording disabled: ${e?.message || e}`);
|
|
654
|
+
}
|
|
643
655
|
await page.exposeFunction('addLogsToFile', addLogsToFile);
|
|
644
656
|
_fs.default.writeFileSync(logsDir, ``);
|
|
645
657
|
page.on('console', msg => {
|
package/package.json
CHANGED