@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,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -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
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@haibun/utils",
3
3
  "type": "module",
4
- "version": "1.59.0",
4
+ "version": "1.59.1",
5
5
  "description": "",
6
6
  "main": "index.js",
7
7
  "files": ["ref.package.json", "build/**", "scaffold/**", "vcapture/**"],
@@ -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"]