@haibun/utils 1.59.0 → 1.59.1
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.
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/walkthrough-container/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,94 @@
|
|
|
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
|
+
const runContainer = (testToRun, filter, includeDirs = [], recreate) => {
|
|
9
|
+
try {
|
|
10
|
+
const utilDir = resolve(getPackageLocation(import.meta), '..', '..', 'walkthrough-container');
|
|
11
|
+
const projectDir = process.cwd();
|
|
12
|
+
const tmpFile = resolve(tmpdir(), `docker-compose.override-${Date.now()}.yml`);
|
|
13
|
+
const envs = existsSync(`${projectDir}/.env`) ? readFileSync(`${projectDir}/.env`, 'utf8').split('\n').filter(l => l.length > 0) : [];
|
|
14
|
+
const haibunEnvc = (envs.length > 0) ? `HAIBUN_ENV=${envs.join(',')} ` : '';
|
|
15
|
+
// Ensure capture directory exists
|
|
16
|
+
const captureDir = resolve(projectDir, 'capture');
|
|
17
|
+
if (!existsSync(captureDir)) {
|
|
18
|
+
console.log('Creating capture directory');
|
|
19
|
+
mkdirSync(captureDir, { recursive: true });
|
|
20
|
+
}
|
|
21
|
+
// Add capture to directories to mount
|
|
22
|
+
const dirsToMount = [...includeDirs, 'capture'];
|
|
23
|
+
// Create docker compose config file with volumes
|
|
24
|
+
const volumeConfig = dirsToMount.map(dir => {
|
|
25
|
+
const sourcePath = resolve(projectDir, dir);
|
|
26
|
+
return ` - ${sourcePath}:/app/${dir}`;
|
|
27
|
+
}).join('\n');
|
|
28
|
+
const buildContextDir = resolve(tmpdir(), `build-context-${Date.now()}`);
|
|
29
|
+
mkdirSync(buildContextDir, { recursive: true });
|
|
30
|
+
// Copy project's package files to build context
|
|
31
|
+
execSync(`cp ${projectDir}/package*.json ${buildContextDir}/`);
|
|
32
|
+
// Copy container files to build context
|
|
33
|
+
execSync(`cp ${utilDir}/speak-to-wav.sh ${utilDir}/kokoro-speak.cjs ${utilDir}/entrypoint.sh ${buildContextDir}/`);
|
|
34
|
+
const composeFile = `
|
|
35
|
+
services:
|
|
36
|
+
haibun-recorder:
|
|
37
|
+
build:
|
|
38
|
+
context: ${buildContextDir}
|
|
39
|
+
dockerfile: ${utilDir}/Dockerfile
|
|
40
|
+
volumes:
|
|
41
|
+
- ${projectDir}/capture:/app/capture
|
|
42
|
+
- ${projectDir}:/app/output
|
|
43
|
+
${volumeConfig}
|
|
44
|
+
environment:
|
|
45
|
+
- DISPLAY=:99
|
|
46
|
+
- HAIBUN_O_HAIBUN_TTS_CMD=/app/speak-to-wav.sh @WHAT@
|
|
47
|
+
- HAIBUN_O_HAIBUN_TTS_PLAY=aplay @WHAT@
|
|
48
|
+
- ${HOST_PROJECT_DIR}=${projectDir}
|
|
49
|
+
- COMMAND_TO_RECORD=${HOST_PROJECT_DIR}="${projectDir}" HAIBUN_LOG_LEVEL=log ${haibunEnvc} npm run ${testToRun} ${filter}
|
|
50
|
+
`;
|
|
51
|
+
writeFileSync(tmpFile, composeFile);
|
|
52
|
+
console.log(`Building then starting walkthrough container using ${utilDir}`);
|
|
53
|
+
console.log(`Mounting directories:\n${volumeConfig}`);
|
|
54
|
+
try {
|
|
55
|
+
execSync(`docker compose -f docker-compose.yml -f ${tmpFile} up --build ${recreate ? '--force-recreate' : ''}`, {
|
|
56
|
+
cwd: utilDir,
|
|
57
|
+
stdio: 'inherit',
|
|
58
|
+
env: {
|
|
59
|
+
...process.env,
|
|
60
|
+
CURRENT_DIR: projectDir,
|
|
61
|
+
}
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
unlinkSync(tmpFile);
|
|
66
|
+
execSync(`rm -rf ${buildContextDir}`);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
console.error('Error:', error.stderr?.toString() || error.message);
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
};
|
|
74
|
+
let recreate = false;
|
|
75
|
+
const args = process.argv.slice(2).reduce((acc, arg) => {
|
|
76
|
+
if (arg === '--recreate') {
|
|
77
|
+
recreate = true;
|
|
78
|
+
return acc;
|
|
79
|
+
}
|
|
80
|
+
else if (arg === '--help') {
|
|
81
|
+
printHelp();
|
|
82
|
+
}
|
|
83
|
+
return [...acc, arg];
|
|
84
|
+
}, []);
|
|
85
|
+
const [testToRun, filter, ...includeDirs] = args;
|
|
86
|
+
if (!testToRun || includeDirs.length === 0) {
|
|
87
|
+
printHelp();
|
|
88
|
+
}
|
|
89
|
+
runContainer(testToRun, filter, includeDirs, recreate);
|
|
90
|
+
function printHelp() {
|
|
91
|
+
console.error(`Usage: ${process.argv[1]} [--rebuild] script filter features files ...`);
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/walkthrough-container/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/vcapture/Dockerfile
CHANGED
|
@@ -27,6 +27,9 @@ RUN apt-get update && apt-get install -y \
|
|
|
27
27
|
pipewire-audio-client-libraries \
|
|
28
28
|
pulseaudio-utils \
|
|
29
29
|
libportaudio2 \
|
|
30
|
+
xfce4 \
|
|
31
|
+
xfce4-terminal \
|
|
32
|
+
xterm \
|
|
30
33
|
&& rm -rf /var/lib/apt/lists/*
|
|
31
34
|
|
|
32
35
|
RUN git clone https://github.com/novnc/noVNC.git /opt/noVNC && \
|
|
@@ -43,4 +46,11 @@ RUN npm i # && npm install kokoro-js # kokoro-js is installed on demand in captu
|
|
|
43
46
|
|
|
44
47
|
RUN mkdir -p /run/user/1000 && chmod 700 /run/user/1000
|
|
45
48
|
|
|
49
|
+
# Set xfce4 as the default desktop environment
|
|
50
|
+
ENV DISPLAY=:1
|
|
51
|
+
RUN echo "xfce4-session" > ~/.xsession
|
|
52
|
+
|
|
53
|
+
# Start xfce4 session in the background
|
|
54
|
+
RUN echo "xfce4-session &" >> /etc/profile
|
|
55
|
+
|
|
46
56
|
ENTRYPOINT ["./entrypoint.sh"]
|