@haibun/utils 1.55.2 → 1.55.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/build/vcapture/index copy.d.ts +17 -0
- package/build/vcapture/index copy.d.ts.map +1 -0
- package/build/vcapture/index copy.js +155 -0
- package/build/vcapture/index copy.js.map +1 -0
- package/build/vcapture/index.js +2 -133
- package/build/vcapture/index.js.map +1 -1
- package/build/vcapture/run-vcapture.d.ts +18 -0
- package/build/vcapture/run-vcapture.d.ts.map +1 -0
- package/build/vcapture/run-vcapture.js +155 -0
- package/build/vcapture/run-vcapture.js.map +1 -0
- package/build/vcapture/vcapture-lib.d.ts +17 -0
- package/build/vcapture/vcapture-lib.d.ts.map +1 -0
- package/build/vcapture/vcapture-lib.js +162 -0
- package/build/vcapture/vcapture-lib.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type TRunOptions = {
|
|
3
|
+
recreate: boolean;
|
|
4
|
+
tts: boolean;
|
|
5
|
+
capture: boolean;
|
|
6
|
+
res: string;
|
|
7
|
+
passEnv: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
|
|
10
|
+
runOptions: TRunOptions;
|
|
11
|
+
testToRun: string;
|
|
12
|
+
filter: string;
|
|
13
|
+
includeDirs: string[];
|
|
14
|
+
};
|
|
15
|
+
declare const TRunOptions: TRunOptions;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=index%20copy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index copy.d.ts","sourceRoot":"","sources":["../../src/vcapture/index copy.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AA0FD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA8CvF;AAGD,QAAA,MAAoB,WAAW,aAAmF,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
|
|
8
|
+
process.on('unhandledRejection', (err) => {
|
|
9
|
+
console.error('cli Unhandled Rejection:', err);
|
|
10
|
+
if (err && err.stack) {
|
|
11
|
+
console.error(err.stack);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.error(err);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
|
|
18
|
+
try {
|
|
19
|
+
const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
|
|
20
|
+
const projectDir = process.cwd();
|
|
21
|
+
const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
|
|
22
|
+
const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
|
|
23
|
+
if (thisRunOptions.passEnv) {
|
|
24
|
+
envs.push(thisRunOptions.passEnv);
|
|
25
|
+
}
|
|
26
|
+
const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
|
|
27
|
+
if (thisRunOptions.passEnv) {
|
|
28
|
+
haibunEnvc;
|
|
29
|
+
}
|
|
30
|
+
const captureDir = resolve(projectDir, 'capture');
|
|
31
|
+
console.info('vcapture running with options:', thisRunOptions);
|
|
32
|
+
if (!existsSync(captureDir)) {
|
|
33
|
+
console.log('Creating capture directory');
|
|
34
|
+
mkdirSync(captureDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
|
|
37
|
+
mkdirSync(buildContextDir, { recursive: true });
|
|
38
|
+
execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
|
|
39
|
+
execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
|
|
40
|
+
const dirsToMount = [...includeDirs, 'capture'];
|
|
41
|
+
const composeVolumes = [
|
|
42
|
+
`${projectDir}/capture:/app/capture`,
|
|
43
|
+
`${projectDir}:/app/output`,
|
|
44
|
+
...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
|
|
45
|
+
];
|
|
46
|
+
const composeEnvironment = [
|
|
47
|
+
'DISPLAY=:99',
|
|
48
|
+
`RES=${thisRunOptions.res}`,
|
|
49
|
+
`${HOST_PROJECT_DIR}=${projectDir}`,
|
|
50
|
+
`COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
|
|
51
|
+
];
|
|
52
|
+
if (thisRunOptions.tts) {
|
|
53
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
|
|
54
|
+
}
|
|
55
|
+
if (thisRunOptions.capture) {
|
|
56
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
|
|
57
|
+
}
|
|
58
|
+
const composeFile = `
|
|
59
|
+
services:
|
|
60
|
+
haibun-recorder:
|
|
61
|
+
build:
|
|
62
|
+
context: ${buildContextDir}
|
|
63
|
+
dockerfile: ${utilDir}/Dockerfile
|
|
64
|
+
volumes:
|
|
65
|
+
${asYamlOptions(composeVolumes)}
|
|
66
|
+
environment:
|
|
67
|
+
${(asYamlOptions(composeEnvironment))}
|
|
68
|
+
`;
|
|
69
|
+
writeFileSync(tmpFile, composeFile);
|
|
70
|
+
console.log(`Building then starting vcapture container using ${utilDir}`);
|
|
71
|
+
console.log(`Mounting directories:\n${composeVolumes}`);
|
|
72
|
+
try {
|
|
73
|
+
const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
|
|
74
|
+
console.log('building with:', cmd);
|
|
75
|
+
execSync(cmd, {
|
|
76
|
+
cwd: utilDir,
|
|
77
|
+
stdio: 'inherit',
|
|
78
|
+
env: {
|
|
79
|
+
...process.env,
|
|
80
|
+
CURRENT_DIR: projectDir,
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
unlinkSync(tmpFile);
|
|
86
|
+
execSync(`rm -rf ${buildContextDir}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Error:', error.stderr?.toString() || error.message);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function asYamlOptions(options) {
|
|
95
|
+
return options.map(o => ` - ${o}`).join('\n');
|
|
96
|
+
}
|
|
97
|
+
export function parseVCaptureArgs(args, printHelp) {
|
|
98
|
+
const runOptions = {
|
|
99
|
+
recreate: false,
|
|
100
|
+
tts: false,
|
|
101
|
+
capture: true,
|
|
102
|
+
res: '1280x720',
|
|
103
|
+
passEnv: undefined
|
|
104
|
+
};
|
|
105
|
+
args.reduce((acc, arg) => {
|
|
106
|
+
if (arg.startsWith('--')) {
|
|
107
|
+
const [what, ...v] = arg.split('=');
|
|
108
|
+
const value = v.join('=');
|
|
109
|
+
if (what === '--recreate') {
|
|
110
|
+
runOptions.recreate = value !== 'false';
|
|
111
|
+
return acc;
|
|
112
|
+
}
|
|
113
|
+
else if (what === '--tts') {
|
|
114
|
+
runOptions.tts = value !== 'false';
|
|
115
|
+
return acc;
|
|
116
|
+
}
|
|
117
|
+
else if (what === '--no-capture') {
|
|
118
|
+
runOptions.capture = false;
|
|
119
|
+
return acc;
|
|
120
|
+
}
|
|
121
|
+
else if (what === '--pass-env') {
|
|
122
|
+
runOptions.passEnv = value || args.shift();
|
|
123
|
+
return acc;
|
|
124
|
+
}
|
|
125
|
+
else if (what === '--res') {
|
|
126
|
+
const res = value || args.shift();
|
|
127
|
+
if (res && res.match(/^\d+x\d+$/)) {
|
|
128
|
+
runOptions.res = res;
|
|
129
|
+
return acc;
|
|
130
|
+
}
|
|
131
|
+
console.error(`Missing or incorrect WxH value for --res: ${res}`);
|
|
132
|
+
printHelp();
|
|
133
|
+
}
|
|
134
|
+
else if (arg === '--help') {
|
|
135
|
+
printHelp(0);
|
|
136
|
+
}
|
|
137
|
+
console.error(`unknown -- arg ${arg}`);
|
|
138
|
+
printHelp();
|
|
139
|
+
}
|
|
140
|
+
return [...acc, arg];
|
|
141
|
+
}, []);
|
|
142
|
+
const [testToRun, filter, ...includeDirs] = args;
|
|
143
|
+
if (!testToRun || includeDirs.length === 0) {
|
|
144
|
+
printHelp();
|
|
145
|
+
}
|
|
146
|
+
return { runOptions, testToRun, filter, includeDirs };
|
|
147
|
+
}
|
|
148
|
+
const args = process.argv.slice(2);
|
|
149
|
+
const { runOptions: TRunOptions, testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
|
|
150
|
+
runContainer(testToRun, filter, includeDirs, runOptions);
|
|
151
|
+
function printHelp(exitCode = 1) {
|
|
152
|
+
console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
|
|
153
|
+
process.exit(exitCode);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=index%20copy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index copy.js","sourceRoot":"","sources":["../../src/vcapture/index copy.ts"],"names":[],"mappings":"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"}
|
package/build/vcapture/index.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import {
|
|
3
|
-
import { execSync } from 'child_process';
|
|
4
|
-
import { resolve } from 'path';
|
|
5
|
-
import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
|
|
6
|
-
import { tmpdir } from 'os';
|
|
7
|
-
import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
|
|
2
|
+
import { parseVCaptureArgs, runContainer } from "./vcapture-lib.js";
|
|
8
3
|
process.on('unhandledRejection', (err) => {
|
|
9
4
|
console.error('cli Unhandled Rejection:', err);
|
|
10
5
|
if (err && err.stack) {
|
|
@@ -14,137 +9,11 @@ process.on('unhandledRejection', (err) => {
|
|
|
14
9
|
console.error(err);
|
|
15
10
|
}
|
|
16
11
|
});
|
|
17
|
-
const runOptions = {
|
|
18
|
-
recreate: false,
|
|
19
|
-
tts: false,
|
|
20
|
-
capture: true,
|
|
21
|
-
res: '1280x1024',
|
|
22
|
-
passEnv: undefined
|
|
23
|
-
};
|
|
24
|
-
const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
|
|
25
|
-
try {
|
|
26
|
-
const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
|
|
27
|
-
const projectDir = process.cwd();
|
|
28
|
-
const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
|
|
29
|
-
const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
|
|
30
|
-
if (runOptions.passEnv) {
|
|
31
|
-
envs.push(runOptions.passEnv);
|
|
32
|
-
}
|
|
33
|
-
const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
|
|
34
|
-
if (runOptions.passEnv) {
|
|
35
|
-
haibunEnvc;
|
|
36
|
-
}
|
|
37
|
-
const captureDir = resolve(projectDir, 'capture');
|
|
38
|
-
console.info('vcapture running with options:', thisRunOptions);
|
|
39
|
-
if (!existsSync(captureDir)) {
|
|
40
|
-
console.log('Creating capture directory');
|
|
41
|
-
mkdirSync(captureDir, { recursive: true });
|
|
42
|
-
}
|
|
43
|
-
const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
|
|
44
|
-
mkdirSync(buildContextDir, { recursive: true });
|
|
45
|
-
execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
|
|
46
|
-
execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
|
|
47
|
-
const dirsToMount = [...includeDirs, 'capture'];
|
|
48
|
-
const composeVolumes = [
|
|
49
|
-
`${projectDir}/capture:/app/capture`,
|
|
50
|
-
`${projectDir}:/app/output`,
|
|
51
|
-
...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
|
|
52
|
-
];
|
|
53
|
-
const composeEnvironment = [
|
|
54
|
-
'DISPLAY=:99',
|
|
55
|
-
`RES=${thisRunOptions.res}`,
|
|
56
|
-
`${HOST_PROJECT_DIR}=${projectDir}`,
|
|
57
|
-
`COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
|
|
58
|
-
];
|
|
59
|
-
if (thisRunOptions.tts) {
|
|
60
|
-
composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
|
|
61
|
-
}
|
|
62
|
-
if (thisRunOptions.capture) {
|
|
63
|
-
composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
|
|
64
|
-
}
|
|
65
|
-
const composeFile = `
|
|
66
|
-
services:
|
|
67
|
-
haibun-recorder:
|
|
68
|
-
build:
|
|
69
|
-
context: ${buildContextDir}
|
|
70
|
-
dockerfile: ${utilDir}/Dockerfile
|
|
71
|
-
volumes:
|
|
72
|
-
${asYamlOptions(composeVolumes)}
|
|
73
|
-
environment:
|
|
74
|
-
${(asYamlOptions(composeEnvironment))}
|
|
75
|
-
`;
|
|
76
|
-
writeFileSync(tmpFile, composeFile);
|
|
77
|
-
console.log(`Building then starting vcapture container using ${utilDir}`);
|
|
78
|
-
console.log(`Mounting directories:\n${composeVolumes}`);
|
|
79
|
-
try {
|
|
80
|
-
const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
|
|
81
|
-
console.log('building with:', cmd);
|
|
82
|
-
execSync(cmd, {
|
|
83
|
-
cwd: utilDir,
|
|
84
|
-
stdio: 'inherit',
|
|
85
|
-
env: {
|
|
86
|
-
...process.env,
|
|
87
|
-
CURRENT_DIR: projectDir,
|
|
88
|
-
}
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
finally {
|
|
92
|
-
unlinkSync(tmpFile);
|
|
93
|
-
execSync(`rm -rf ${buildContextDir}`);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
catch (error) {
|
|
97
|
-
console.error('Error:', error.stderr?.toString() || error.message);
|
|
98
|
-
process.exit(1);
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
12
|
const args = process.argv.slice(2);
|
|
102
|
-
args
|
|
103
|
-
if (arg.startsWith('--')) {
|
|
104
|
-
const [what, value] = arg.split('=');
|
|
105
|
-
if (what === '--recreate') {
|
|
106
|
-
runOptions.recreate = value !== 'false';
|
|
107
|
-
return acc;
|
|
108
|
-
}
|
|
109
|
-
else if (what === '--tts') {
|
|
110
|
-
runOptions.tts = value !== 'false';
|
|
111
|
-
return acc;
|
|
112
|
-
}
|
|
113
|
-
else if (what === '--no-capture') {
|
|
114
|
-
runOptions.capture = false;
|
|
115
|
-
return acc;
|
|
116
|
-
}
|
|
117
|
-
else if (what === '--pass-env') {
|
|
118
|
-
runOptions.passEnv = value || args.shift();
|
|
119
|
-
return acc;
|
|
120
|
-
}
|
|
121
|
-
else if (what === '--res') {
|
|
122
|
-
const res = value || args.shift();
|
|
123
|
-
if (res && res.match(/^\d+x\d+$/)) {
|
|
124
|
-
runOptions.res = res;
|
|
125
|
-
return acc;
|
|
126
|
-
}
|
|
127
|
-
console.error(`Missing or incorrect WxH value for --res: ${res}`);
|
|
128
|
-
printHelp();
|
|
129
|
-
}
|
|
130
|
-
else if (arg === '--help') {
|
|
131
|
-
printHelp(0);
|
|
132
|
-
}
|
|
133
|
-
console.error(`unknown -- arg ${arg}`);
|
|
134
|
-
printHelp();
|
|
135
|
-
}
|
|
136
|
-
return [...acc, arg];
|
|
137
|
-
}, []);
|
|
138
|
-
const [testToRun, filter, ...includeDirs] = args;
|
|
139
|
-
if (!testToRun || includeDirs.length === 0) {
|
|
140
|
-
printHelp();
|
|
141
|
-
}
|
|
13
|
+
const { testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
|
|
142
14
|
runContainer(testToRun, filter, includeDirs, runOptions);
|
|
143
15
|
function printHelp(exitCode = 1) {
|
|
144
16
|
console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
|
|
145
17
|
process.exit(exitCode);
|
|
146
18
|
}
|
|
147
|
-
function asYamlOptions(options) {
|
|
148
|
-
return options.map(o => ` - ${o}`).join('\n');
|
|
149
|
-
}
|
|
150
19
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/vcapture/index.ts"],"names":[],"mappings":";AAGA,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEpE,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,CAAC,GAAc,EAAE,EAAE;IACnD,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;IAC/C,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACP,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;AACF,CAAC,CAAC,CAAC;AAEH,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,iBAAiB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;AAE1F,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;AAEzD,SAAS,SAAS,CAAC,QAAQ,GAAG,CAAC;IAC9B,OAAO,CAAC,KAAK,CAAC,UAAU,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,6HAA6H,CAAC,CAAC;IACtK,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACxB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type TRunOptions = {
|
|
3
|
+
recreate: boolean;
|
|
4
|
+
tts: boolean;
|
|
5
|
+
capture: boolean;
|
|
6
|
+
res: string;
|
|
7
|
+
passEnv: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare const runContainer: (testToRun: any, filter: any, includeDirs: any[], thisRunOptions: TRunOptions) => void;
|
|
10
|
+
export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
|
|
11
|
+
runOptions: TRunOptions;
|
|
12
|
+
testToRun: string;
|
|
13
|
+
filter: string;
|
|
14
|
+
includeDirs: string[];
|
|
15
|
+
};
|
|
16
|
+
declare const TRunOptions: TRunOptions;
|
|
17
|
+
export {};
|
|
18
|
+
//# sourceMappingURL=run-vcapture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-vcapture.d.ts","sourceRoot":"","sources":["../../src/vcapture/run-vcapture.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,cAAS,EAAE,WAAM,EAAE,kBAAgB,EAAE,gBAAgB,WAAW,SAkF5F,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA8CvF;AAGD,QAAA,MAAoB,WAAW,aAAmF,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
|
|
8
|
+
process.on('unhandledRejection', (err) => {
|
|
9
|
+
console.error('cli Unhandled Rejection:', err);
|
|
10
|
+
if (err && err.stack) {
|
|
11
|
+
console.error(err.stack);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.error(err);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
export const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
|
|
18
|
+
try {
|
|
19
|
+
const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
|
|
20
|
+
const projectDir = process.cwd();
|
|
21
|
+
const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
|
|
22
|
+
const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
|
|
23
|
+
if (thisRunOptions.passEnv) {
|
|
24
|
+
envs.push(thisRunOptions.passEnv);
|
|
25
|
+
}
|
|
26
|
+
const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
|
|
27
|
+
if (thisRunOptions.passEnv) {
|
|
28
|
+
haibunEnvc;
|
|
29
|
+
}
|
|
30
|
+
const captureDir = resolve(projectDir, 'capture');
|
|
31
|
+
console.info('vcapture running with options:', thisRunOptions);
|
|
32
|
+
if (!existsSync(captureDir)) {
|
|
33
|
+
console.log('Creating capture directory');
|
|
34
|
+
mkdirSync(captureDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
|
|
37
|
+
mkdirSync(buildContextDir, { recursive: true });
|
|
38
|
+
execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
|
|
39
|
+
execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
|
|
40
|
+
const dirsToMount = [...includeDirs, 'capture'];
|
|
41
|
+
const composeVolumes = [
|
|
42
|
+
`${projectDir}/capture:/app/capture`,
|
|
43
|
+
`${projectDir}:/app/output`,
|
|
44
|
+
...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
|
|
45
|
+
];
|
|
46
|
+
const composeEnvironment = [
|
|
47
|
+
'DISPLAY=:99',
|
|
48
|
+
`RES=${thisRunOptions.res}`,
|
|
49
|
+
`${HOST_PROJECT_DIR}=${projectDir}`,
|
|
50
|
+
`COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
|
|
51
|
+
];
|
|
52
|
+
if (thisRunOptions.tts) {
|
|
53
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
|
|
54
|
+
}
|
|
55
|
+
if (thisRunOptions.capture) {
|
|
56
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
|
|
57
|
+
}
|
|
58
|
+
const composeFile = `
|
|
59
|
+
services:
|
|
60
|
+
haibun-recorder:
|
|
61
|
+
build:
|
|
62
|
+
context: ${buildContextDir}
|
|
63
|
+
dockerfile: ${utilDir}/Dockerfile
|
|
64
|
+
volumes:
|
|
65
|
+
${asYamlOptions(composeVolumes)}
|
|
66
|
+
environment:
|
|
67
|
+
${(asYamlOptions(composeEnvironment))}
|
|
68
|
+
`;
|
|
69
|
+
writeFileSync(tmpFile, composeFile);
|
|
70
|
+
console.log(`Building then starting vcapture container using ${utilDir}`);
|
|
71
|
+
console.log(`Mounting directories:\n${composeVolumes}`);
|
|
72
|
+
try {
|
|
73
|
+
const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
|
|
74
|
+
console.log('building with:', cmd);
|
|
75
|
+
execSync(cmd, {
|
|
76
|
+
cwd: utilDir,
|
|
77
|
+
stdio: 'inherit',
|
|
78
|
+
env: {
|
|
79
|
+
...process.env,
|
|
80
|
+
CURRENT_DIR: projectDir,
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
unlinkSync(tmpFile);
|
|
86
|
+
execSync(`rm -rf ${buildContextDir}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Error:', error.stderr?.toString() || error.message);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function asYamlOptions(options) {
|
|
95
|
+
return options.map(o => ` - ${o}`).join('\n');
|
|
96
|
+
}
|
|
97
|
+
export function parseVCaptureArgs(args, printHelp) {
|
|
98
|
+
const runOptions = {
|
|
99
|
+
recreate: false,
|
|
100
|
+
tts: false,
|
|
101
|
+
capture: true,
|
|
102
|
+
res: '1280x720',
|
|
103
|
+
passEnv: undefined
|
|
104
|
+
};
|
|
105
|
+
args.reduce((acc, arg) => {
|
|
106
|
+
if (arg.startsWith('--')) {
|
|
107
|
+
const [what, ...v] = arg.split('=');
|
|
108
|
+
const value = v.join('=');
|
|
109
|
+
if (what === '--recreate') {
|
|
110
|
+
runOptions.recreate = value !== 'false';
|
|
111
|
+
return acc;
|
|
112
|
+
}
|
|
113
|
+
else if (what === '--tts') {
|
|
114
|
+
runOptions.tts = value !== 'false';
|
|
115
|
+
return acc;
|
|
116
|
+
}
|
|
117
|
+
else if (what === '--no-capture') {
|
|
118
|
+
runOptions.capture = false;
|
|
119
|
+
return acc;
|
|
120
|
+
}
|
|
121
|
+
else if (what === '--pass-env') {
|
|
122
|
+
runOptions.passEnv = value || args.shift();
|
|
123
|
+
return acc;
|
|
124
|
+
}
|
|
125
|
+
else if (what === '--res') {
|
|
126
|
+
const res = value || args.shift();
|
|
127
|
+
if (res && res.match(/^\d+x\d+$/)) {
|
|
128
|
+
runOptions.res = res;
|
|
129
|
+
return acc;
|
|
130
|
+
}
|
|
131
|
+
console.error(`Missing or incorrect WxH value for --res: ${res}`);
|
|
132
|
+
printHelp();
|
|
133
|
+
}
|
|
134
|
+
else if (arg === '--help') {
|
|
135
|
+
printHelp(0);
|
|
136
|
+
}
|
|
137
|
+
console.error(`unknown -- arg ${arg}`);
|
|
138
|
+
printHelp();
|
|
139
|
+
}
|
|
140
|
+
return [...acc, arg];
|
|
141
|
+
}, []);
|
|
142
|
+
const [testToRun, filter, ...includeDirs] = args;
|
|
143
|
+
if (!testToRun || includeDirs.length === 0) {
|
|
144
|
+
printHelp();
|
|
145
|
+
}
|
|
146
|
+
return { runOptions, testToRun, filter, includeDirs };
|
|
147
|
+
}
|
|
148
|
+
const args = process.argv.slice(2);
|
|
149
|
+
const { runOptions: TRunOptions, testToRun, filter, includeDirs, runOptions } = parseVCaptureArgs(args, printHelp);
|
|
150
|
+
runContainer(testToRun, filter, includeDirs, runOptions);
|
|
151
|
+
function printHelp(exitCode = 1) {
|
|
152
|
+
console.error(`Usage: ${process.argv[1]} [--pass-env] [--recreate[=boolean]] [--tts[=boolean]] [--no-capture] [--help] [--res WxH] script filter features files ...`);
|
|
153
|
+
process.exit(exitCode);
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=run-vcapture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run-vcapture.js","sourceRoot":"","sources":["../../src/vcapture/run-vcapture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
type TRunOptions = {
|
|
3
|
+
recreate: boolean;
|
|
4
|
+
tts: boolean;
|
|
5
|
+
capture: boolean;
|
|
6
|
+
res: string;
|
|
7
|
+
passEnv: string | undefined;
|
|
8
|
+
};
|
|
9
|
+
export declare const runContainer: (testToRun: any, filter: any, includeDirs: any[], thisRunOptions: TRunOptions) => void;
|
|
10
|
+
export declare function parseVCaptureArgs(args: string[], printHelp: (exitCode?: number) => void): {
|
|
11
|
+
runOptions: TRunOptions;
|
|
12
|
+
testToRun: string;
|
|
13
|
+
filter: string;
|
|
14
|
+
includeDirs: string[];
|
|
15
|
+
};
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=vcapture-lib.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcapture-lib.d.ts","sourceRoot":"","sources":["../../src/vcapture/vcapture-lib.ts"],"names":[],"mappings":";AAmBA,KAAK,WAAW,GAAG;IAClB,QAAQ,EAAE,OAAO,CAAC;IAClB,GAAG,EAAE,OAAO,CAAC;IACb,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B,CAAA;AAGD,eAAO,MAAM,YAAY,GAAI,cAAS,EAAE,WAAM,EAAE,kBAAgB,EAAE,gBAAgB,WAAW,SAkF5F,CAAC;AAKF,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC,EAAE,MAAM,KAAK,IAAI;;;;;EA+DvF"}
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { getPackageLocation } from '@haibun/core/build/lib/util/workspace-lib.js';
|
|
3
|
+
import { execSync } from 'child_process';
|
|
4
|
+
import { resolve } from 'path';
|
|
5
|
+
import { writeFileSync, unlinkSync, readFileSync, mkdirSync, existsSync } from 'fs';
|
|
6
|
+
import { tmpdir } from 'os';
|
|
7
|
+
import { HOST_PROJECT_DIR } from '@haibun/core/build/lib/defs.js';
|
|
8
|
+
process.on('unhandledRejection', (err) => {
|
|
9
|
+
console.error('cli Unhandled Rejection:', err);
|
|
10
|
+
if (err && err.stack) {
|
|
11
|
+
console.error(err.stack);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
console.error(err);
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
export const runContainer = (testToRun, filter, includeDirs = [], thisRunOptions) => {
|
|
18
|
+
try {
|
|
19
|
+
const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'vcapture');
|
|
20
|
+
const projectDir = process.cwd();
|
|
21
|
+
const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
|
|
22
|
+
const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
|
|
23
|
+
if (thisRunOptions.passEnv) {
|
|
24
|
+
envs.push(thisRunOptions.passEnv);
|
|
25
|
+
}
|
|
26
|
+
const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
|
|
27
|
+
if (thisRunOptions.passEnv) {
|
|
28
|
+
haibunEnvc;
|
|
29
|
+
}
|
|
30
|
+
const captureDir = resolve(projectDir, 'capture');
|
|
31
|
+
console.info('vcapture running with options:', thisRunOptions);
|
|
32
|
+
if (!existsSync(captureDir)) {
|
|
33
|
+
console.log('Creating capture directory');
|
|
34
|
+
mkdirSync(captureDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
|
|
37
|
+
mkdirSync(buildContextDir, { recursive: true });
|
|
38
|
+
execSync(`cp ${projectDir}/*.json ${buildContextDir}/`);
|
|
39
|
+
execSync(`cp ${utilDir}/*.sh ${utilDir}/kokoro-speak.cjs ${buildContextDir}/`);
|
|
40
|
+
const dirsToMount = [...includeDirs, 'capture'];
|
|
41
|
+
const composeVolumes = [
|
|
42
|
+
`${projectDir}/capture:/app/capture`,
|
|
43
|
+
`${projectDir}:/app/output`,
|
|
44
|
+
...dirsToMount.map(dir => `${resolve(projectDir, dir)}:/app/${dir}`)
|
|
45
|
+
];
|
|
46
|
+
const composeEnvironment = [
|
|
47
|
+
'DISPLAY=:99',
|
|
48
|
+
`RES=${thisRunOptions.res}`,
|
|
49
|
+
`${HOST_PROJECT_DIR}=${projectDir}`,
|
|
50
|
+
`COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}`
|
|
51
|
+
];
|
|
52
|
+
if (thisRunOptions.tts) {
|
|
53
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@', 'HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@');
|
|
54
|
+
}
|
|
55
|
+
if (thisRunOptions.capture) {
|
|
56
|
+
composeEnvironment.push('HAIBUN_O_HAIBUN_CAPTURE_START=/app/capture-start.sh', 'HAIBUN_O_HAIBUN_CAPTURE_STOP=/app/capture-stop.sh');
|
|
57
|
+
}
|
|
58
|
+
const composeFile = `
|
|
59
|
+
services:
|
|
60
|
+
haibun-recorder:
|
|
61
|
+
build:
|
|
62
|
+
context: ${buildContextDir}
|
|
63
|
+
dockerfile: ${utilDir}/Dockerfile
|
|
64
|
+
volumes:
|
|
65
|
+
${asYamlOptions(composeVolumes)}
|
|
66
|
+
environment:
|
|
67
|
+
${(asYamlOptions(composeEnvironment))}
|
|
68
|
+
`;
|
|
69
|
+
writeFileSync(tmpFile, composeFile);
|
|
70
|
+
console.log(`Building then starting vcapture container using ${utilDir}`);
|
|
71
|
+
console.log(`Mounting directories:\n${composeVolumes}`);
|
|
72
|
+
try {
|
|
73
|
+
const cmd = `docker compose -f docker-compose.yml -f ${tmpFile} up ${thisRunOptions.recreate ? '--force-recreate --build' : ''}`;
|
|
74
|
+
console.log('building with:', cmd);
|
|
75
|
+
execSync(cmd, {
|
|
76
|
+
cwd: utilDir,
|
|
77
|
+
stdio: 'inherit',
|
|
78
|
+
env: {
|
|
79
|
+
...process.env,
|
|
80
|
+
CURRENT_DIR: projectDir,
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
finally {
|
|
85
|
+
unlinkSync(tmpFile);
|
|
86
|
+
execSync(`rm -rf ${buildContextDir}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
console.error('Error:', error.stderr?.toString() || error.message);
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
function asYamlOptions(options) {
|
|
95
|
+
return options.map(o => ` - ${o}`).join('\n');
|
|
96
|
+
}
|
|
97
|
+
export function parseVCaptureArgs(args, printHelp) {
|
|
98
|
+
const runOptions = {
|
|
99
|
+
recreate: false,
|
|
100
|
+
tts: false,
|
|
101
|
+
capture: true,
|
|
102
|
+
res: '1280x720',
|
|
103
|
+
passEnv: undefined
|
|
104
|
+
};
|
|
105
|
+
const parsedArgs = [];
|
|
106
|
+
for (let i = 0; i < args.length; i++) {
|
|
107
|
+
const arg = args[i];
|
|
108
|
+
if (arg.startsWith('--')) {
|
|
109
|
+
const [what, ...v] = arg.split('=');
|
|
110
|
+
const value = v.join('=');
|
|
111
|
+
const getValue = (defaultValue) => value || (i + 1 < args.length && !args[i + 1].startsWith('--') ? args[++i] : defaultValue);
|
|
112
|
+
switch (what) {
|
|
113
|
+
case '--recreate':
|
|
114
|
+
runOptions.recreate = getValue('true') !== 'false';
|
|
115
|
+
break;
|
|
116
|
+
case '--tts':
|
|
117
|
+
runOptions.tts = getValue('true') !== 'false';
|
|
118
|
+
break;
|
|
119
|
+
case '--no-capture':
|
|
120
|
+
runOptions.capture = false;
|
|
121
|
+
break;
|
|
122
|
+
case '--pass-env': {
|
|
123
|
+
const passEnvValue = getValue();
|
|
124
|
+
if (passEnvValue) {
|
|
125
|
+
runOptions.passEnv = passEnvValue;
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.error('Missing value for --pass-env');
|
|
129
|
+
printHelp();
|
|
130
|
+
}
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
case '--res': {
|
|
134
|
+
const resValue = getValue();
|
|
135
|
+
if (resValue && resValue.match(/^\d+x\d+$/)) {
|
|
136
|
+
runOptions.res = resValue;
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.error(`Missing or incorrect WxH value for --res: ${resValue}`);
|
|
140
|
+
printHelp();
|
|
141
|
+
}
|
|
142
|
+
break;
|
|
143
|
+
}
|
|
144
|
+
case '--help':
|
|
145
|
+
printHelp(0);
|
|
146
|
+
break;
|
|
147
|
+
default:
|
|
148
|
+
console.error(`unknown -- arg ${arg}`);
|
|
149
|
+
printHelp();
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
parsedArgs.push(arg);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
const [testToRun, filter, ...includeDirs] = parsedArgs;
|
|
157
|
+
if (!testToRun || includeDirs.length === 0) {
|
|
158
|
+
printHelp();
|
|
159
|
+
}
|
|
160
|
+
return { runOptions, testToRun, filter, includeDirs };
|
|
161
|
+
}
|
|
162
|
+
//# sourceMappingURL=vcapture-lib.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vcapture-lib.js","sourceRoot":"","sources":["../../src/vcapture/vcapture-lib.ts"],"names":[],"mappings":"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"}
|