@haibun/utils 1.59.0 → 1.59.2

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.2",
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,5 @@ 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
46
50
  ENTRYPOINT ["./entrypoint.sh"]
@@ -52,6 +52,8 @@ echo "entrypoint is setting up the environment (logfile is $LOGFILE)"
52
52
 
53
53
  } >"$LOGFILE" 2>&1
54
54
 
55
+ xfce4-session &
56
+
55
57
  echo $COMMAND_TO_RECORD > output/command_to_record.txt
56
58
  echo "Command recorded in output/command_to_record.txt"
57
59
  eval "$COMMAND_TO_RECORD"