buildhive-agent 1.0.0-beta.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.
- package/README.md +166 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts +115 -0
- package/dist/__tests__/fakes/FakeDockerManager.d.ts.map +1 -0
- package/dist/__tests__/fakes/FakeDockerManager.js +203 -0
- package/dist/__tests__/fakes/FakeDockerManager.js.map +1 -0
- package/dist/acceptanceChecker.d.ts +26 -0
- package/dist/acceptanceChecker.d.ts.map +1 -0
- package/dist/acceptanceChecker.js +64 -0
- package/dist/acceptanceChecker.js.map +1 -0
- package/dist/advancedAgent.d.ts +161 -0
- package/dist/advancedAgent.d.ts.map +1 -0
- package/dist/advancedAgent.js +604 -0
- package/dist/advancedAgent.js.map +1 -0
- package/dist/agent.d.ts +101 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +490 -0
- package/dist/agent.js.map +1 -0
- package/dist/api/jobStatusApi.d.ts +88 -0
- package/dist/api/jobStatusApi.d.ts.map +1 -0
- package/dist/api/jobStatusApi.js +240 -0
- package/dist/api/jobStatusApi.js.map +1 -0
- package/dist/autoUpdater.d.ts +135 -0
- package/dist/autoUpdater.d.ts.map +1 -0
- package/dist/autoUpdater.js +494 -0
- package/dist/autoUpdater.js.map +1 -0
- package/dist/cacheManager.d.ts +108 -0
- package/dist/cacheManager.d.ts.map +1 -0
- package/dist/cacheManager.js +300 -0
- package/dist/cacheManager.js.map +1 -0
- package/dist/cli.d.ts +11 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/index.d.ts +30 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +35 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +45 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +269 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/types.d.ts +193 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +90 -0
- package/dist/config/types.js.map +1 -0
- package/dist/config/validation.d.ts +28 -0
- package/dist/config/validation.d.ts.map +1 -0
- package/dist/config/validation.js +397 -0
- package/dist/config/validation.js.map +1 -0
- package/dist/docker.d.ts +96 -0
- package/dist/docker.d.ts.map +1 -0
- package/dist/docker.js +411 -0
- package/dist/docker.js.map +1 -0
- package/dist/enhancedJobExecutor.d.ts +81 -0
- package/dist/enhancedJobExecutor.d.ts.map +1 -0
- package/dist/enhancedJobExecutor.js +223 -0
- package/dist/enhancedJobExecutor.js.map +1 -0
- package/dist/executors/executorFactory.d.ts +46 -0
- package/dist/executors/executorFactory.d.ts.map +1 -0
- package/dist/executors/executorFactory.js +80 -0
- package/dist/executors/executorFactory.js.map +1 -0
- package/dist/executors/index.d.ts +7 -0
- package/dist/executors/index.d.ts.map +1 -0
- package/dist/executors/index.js +6 -0
- package/dist/executors/index.js.map +1 -0
- package/dist/executors/nativeExecutor.d.ts +60 -0
- package/dist/executors/nativeExecutor.d.ts.map +1 -0
- package/dist/executors/nativeExecutor.js +311 -0
- package/dist/executors/nativeExecutor.js.map +1 -0
- package/dist/executors/types.d.ts +38 -0
- package/dist/executors/types.d.ts.map +1 -0
- package/dist/executors/types.js +9 -0
- package/dist/executors/types.js.map +1 -0
- package/dist/healthMonitor.d.ts +213 -0
- package/dist/healthMonitor.d.ts.map +1 -0
- package/dist/healthMonitor.js +547 -0
- package/dist/healthMonitor.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +16 -0
- package/dist/index.js.map +1 -0
- package/dist/jobExecutor.d.ts +117 -0
- package/dist/jobExecutor.d.ts.map +1 -0
- package/dist/jobExecutor.js +458 -0
- package/dist/jobExecutor.js.map +1 -0
- package/dist/lifecycleExecutor.d.ts +54 -0
- package/dist/lifecycleExecutor.d.ts.map +1 -0
- package/dist/lifecycleExecutor.js +230 -0
- package/dist/lifecycleExecutor.js.map +1 -0
- package/dist/main.d.ts +15 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +77 -0
- package/dist/main.js.map +1 -0
- package/dist/metrics.d.ts +103 -0
- package/dist/metrics.d.ts.map +1 -0
- package/dist/metrics.js +360 -0
- package/dist/metrics.js.map +1 -0
- package/dist/recipes/builtinRecipes.d.ts +11 -0
- package/dist/recipes/builtinRecipes.d.ts.map +1 -0
- package/dist/recipes/builtinRecipes.js +688 -0
- package/dist/recipes/builtinRecipes.js.map +1 -0
- package/dist/recipes/index.d.ts +18 -0
- package/dist/recipes/index.d.ts.map +1 -0
- package/dist/recipes/index.js +17 -0
- package/dist/recipes/index.js.map +1 -0
- package/dist/recipes/recipeRegistry.d.ts +49 -0
- package/dist/recipes/recipeRegistry.d.ts.map +1 -0
- package/dist/recipes/recipeRegistry.js +264 -0
- package/dist/recipes/recipeRegistry.js.map +1 -0
- package/dist/recipes/types.d.ts +116 -0
- package/dist/recipes/types.d.ts.map +1 -0
- package/dist/recipes/types.js +10 -0
- package/dist/recipes/types.js.map +1 -0
- package/dist/recovery.d.ts +133 -0
- package/dist/recovery.d.ts.map +1 -0
- package/dist/recovery.js +299 -0
- package/dist/recovery.js.map +1 -0
- package/dist/registration/apiClient.d.ts +44 -0
- package/dist/registration/apiClient.d.ts.map +1 -0
- package/dist/registration/apiClient.js +149 -0
- package/dist/registration/apiClient.js.map +1 -0
- package/dist/registration/index.d.ts +41 -0
- package/dist/registration/index.d.ts.map +1 -0
- package/dist/registration/index.js +141 -0
- package/dist/registration/index.js.map +1 -0
- package/dist/registration/machineId.d.ts +30 -0
- package/dist/registration/machineId.d.ts.map +1 -0
- package/dist/registration/machineId.js +89 -0
- package/dist/registration/machineId.js.map +1 -0
- package/dist/registration/types.d.ts +32 -0
- package/dist/registration/types.d.ts.map +1 -0
- package/dist/registration/types.js +9 -0
- package/dist/registration/types.js.map +1 -0
- package/dist/resourceGovernor.d.ts +57 -0
- package/dist/resourceGovernor.d.ts.map +1 -0
- package/dist/resourceGovernor.js +125 -0
- package/dist/resourceGovernor.js.map +1 -0
- package/dist/security/secretManager.d.ts +107 -0
- package/dist/security/secretManager.d.ts.map +1 -0
- package/dist/security/secretManager.js +361 -0
- package/dist/security/secretManager.js.map +1 -0
- package/dist/security.d.ts +134 -0
- package/dist/security.d.ts.map +1 -0
- package/dist/security.js +470 -0
- package/dist/security.js.map +1 -0
- package/dist/storage/artifactUploader.d.ts +155 -0
- package/dist/storage/artifactUploader.d.ts.map +1 -0
- package/dist/storage/artifactUploader.js +554 -0
- package/dist/storage/artifactUploader.js.map +1 -0
- package/dist/types.d.ts +49 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +7 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/capabilities.d.ts +23 -0
- package/dist/utils/capabilities.d.ts.map +1 -0
- package/dist/utils/capabilities.js +200 -0
- package/dist/utils/capabilities.js.map +1 -0
- package/dist/utils/logger.d.ts +20 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +188 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/sdkScanner.d.ts +105 -0
- package/dist/utils/sdkScanner.d.ts.map +1 -0
- package/dist/utils/sdkScanner.js +459 -0
- package/dist/utils/sdkScanner.js.map +1 -0
- package/dist/websocketClient.d.ts +154 -0
- package/dist/websocketClient.d.ts.map +1 -0
- package/dist/websocketClient.js +422 -0
- package/dist/websocketClient.js.map +1 -0
- package/package.json +64 -0
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SDK & Toolchain Scanner
|
|
3
|
+
*
|
|
4
|
+
* Detects installed SDKs, compilers, and developer toolchains on the host
|
|
5
|
+
* machine. Results feed into capability tags so the server can match jobs
|
|
6
|
+
* to agents that have the right tools.
|
|
7
|
+
*
|
|
8
|
+
* Design notes:
|
|
9
|
+
* - Every detection is wrapped in try/catch so a missing tool never crashes
|
|
10
|
+
* the scanner.
|
|
11
|
+
* - Commands have a 5-second timeout to avoid blocking on hung processes.
|
|
12
|
+
* - Works on macOS, Linux, and Windows (adjusts commands per platform).
|
|
13
|
+
*
|
|
14
|
+
* Requirements: MVP.4.1.2 (enhanced)
|
|
15
|
+
*/
|
|
16
|
+
import { execSync } from 'child_process';
|
|
17
|
+
import os from 'os';
|
|
18
|
+
import { createLogger } from './logger.js';
|
|
19
|
+
const logger = createLogger('sdkScanner');
|
|
20
|
+
/** Timeout for each detection command in milliseconds. */
|
|
21
|
+
const CMD_TIMEOUT_MS = 5_000;
|
|
22
|
+
// ---------------------------------------------------------------------------
|
|
23
|
+
// Helpers
|
|
24
|
+
// ---------------------------------------------------------------------------
|
|
25
|
+
/**
|
|
26
|
+
* Run a shell command synchronously, returning trimmed stdout or `null` on
|
|
27
|
+
* failure. Stderr is included in the output because some tools (notably
|
|
28
|
+
* `java -version`) print to stderr.
|
|
29
|
+
*/
|
|
30
|
+
export function runCmd(cmd, timeoutMs = CMD_TIMEOUT_MS) {
|
|
31
|
+
try {
|
|
32
|
+
const isWindows = os.platform() === 'win32';
|
|
33
|
+
const result = execSync(cmd, {
|
|
34
|
+
timeout: timeoutMs,
|
|
35
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
36
|
+
encoding: 'utf-8',
|
|
37
|
+
shell: isWindows ? 'cmd.exe' : '/bin/sh',
|
|
38
|
+
env: { ...process.env },
|
|
39
|
+
});
|
|
40
|
+
return result?.trim() ?? null;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
// Some commands write version info to stderr. If the process exited
|
|
44
|
+
// with code 0 but threw because of the stderr capture, try stderr.
|
|
45
|
+
if (err && typeof err === 'object' && 'stderr' in err) {
|
|
46
|
+
const stderr = err.stderr;
|
|
47
|
+
if (stderr && typeof stderr === 'string' && stderr.trim().length > 0) {
|
|
48
|
+
return stderr.trim();
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Extract major version number from a semver-ish string.
|
|
56
|
+
* e.g. "17.0.9" -> 17, "1.8.0_392" -> 8 (Java-specific handled externally).
|
|
57
|
+
*/
|
|
58
|
+
export function majorVersion(version) {
|
|
59
|
+
const match = version.match(/^(\d+)/);
|
|
60
|
+
return match ? parseInt(match[1], 10) : 0;
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Extract major.minor from a version string.
|
|
64
|
+
* e.g. "15.4.1" -> "15.4"
|
|
65
|
+
*/
|
|
66
|
+
export function majorMinor(version) {
|
|
67
|
+
const match = version.match(/^(\d+\.\d+)/);
|
|
68
|
+
return match ? match[1] : version;
|
|
69
|
+
}
|
|
70
|
+
// ---------------------------------------------------------------------------
|
|
71
|
+
// Individual SDK detectors
|
|
72
|
+
// ---------------------------------------------------------------------------
|
|
73
|
+
function detectJava() {
|
|
74
|
+
// `java -version` prints to stderr
|
|
75
|
+
const raw = runCmd('java -version 2>&1');
|
|
76
|
+
if (!raw)
|
|
77
|
+
return undefined;
|
|
78
|
+
// Matches: openjdk version "17.0.9" or java version "1.8.0_392"
|
|
79
|
+
const versionMatch = raw.match(/(?:openjdk|java) version "([^"]+)"/i);
|
|
80
|
+
if (!versionMatch)
|
|
81
|
+
return undefined;
|
|
82
|
+
let version = versionMatch[1];
|
|
83
|
+
// Normalise legacy Java 1.x naming: "1.8.0_392" -> "8.0.392"
|
|
84
|
+
const legacyMatch = version.match(/^1\.(\d+)\.0(?:_(\d+))?/);
|
|
85
|
+
if (legacyMatch) {
|
|
86
|
+
version = legacyMatch[2] ? `${legacyMatch[1]}.0.${legacyMatch[2]}` : `${legacyMatch[1]}.0`;
|
|
87
|
+
}
|
|
88
|
+
const javaHome = process.env.JAVA_HOME ?? runCmd('echo $JAVA_HOME') ?? '';
|
|
89
|
+
return { name: 'java', version, javaHome };
|
|
90
|
+
}
|
|
91
|
+
function detectKotlin() {
|
|
92
|
+
const raw = runCmd('kotlin -version 2>&1');
|
|
93
|
+
if (!raw)
|
|
94
|
+
return undefined;
|
|
95
|
+
// "Kotlin version 2.0.0-release-341 (JRE ...)" or "Kotlin version 1.9.22 ..."
|
|
96
|
+
const match = raw.match(/Kotlin version ([\d.]+)/i);
|
|
97
|
+
if (!match)
|
|
98
|
+
return undefined;
|
|
99
|
+
return { name: 'kotlin', version: match[1] };
|
|
100
|
+
}
|
|
101
|
+
function detectGradle() {
|
|
102
|
+
const raw = runCmd('gradle --version 2>&1');
|
|
103
|
+
if (!raw)
|
|
104
|
+
return undefined;
|
|
105
|
+
const match = raw.match(/Gradle ([\d.]+)/);
|
|
106
|
+
if (!match)
|
|
107
|
+
return undefined;
|
|
108
|
+
return { name: 'gradle', version: match[1] };
|
|
109
|
+
}
|
|
110
|
+
function detectMaven() {
|
|
111
|
+
const raw = runCmd('mvn --version 2>&1');
|
|
112
|
+
if (!raw)
|
|
113
|
+
return undefined;
|
|
114
|
+
const match = raw.match(/Apache Maven ([\d.]+)/);
|
|
115
|
+
if (!match)
|
|
116
|
+
return undefined;
|
|
117
|
+
return { name: 'maven', version: match[1] };
|
|
118
|
+
}
|
|
119
|
+
function detectXcode() {
|
|
120
|
+
if (os.platform() !== 'darwin')
|
|
121
|
+
return undefined;
|
|
122
|
+
const raw = runCmd('xcodebuild -version 2>&1');
|
|
123
|
+
if (!raw)
|
|
124
|
+
return undefined;
|
|
125
|
+
const versionMatch = raw.match(/Xcode ([\d.]+)/);
|
|
126
|
+
if (!versionMatch)
|
|
127
|
+
return undefined;
|
|
128
|
+
const xcodeSelectPath = runCmd('xcode-select -p 2>&1') ?? '';
|
|
129
|
+
// Gather available SDKs
|
|
130
|
+
const sdksRaw = runCmd('xcodebuild -showsdks 2>&1');
|
|
131
|
+
const sdks = [];
|
|
132
|
+
if (sdksRaw) {
|
|
133
|
+
const sdkMatches = sdksRaw.matchAll(/-sdk\s+(\S+)/g);
|
|
134
|
+
for (const m of sdkMatches) {
|
|
135
|
+
sdks.push(m[1]);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
return { name: 'xcode', version: versionMatch[1], xcodeSelectPath, sdks };
|
|
139
|
+
}
|
|
140
|
+
function detectAndroidSdk() {
|
|
141
|
+
const androidHome = process.env.ANDROID_HOME ?? process.env.ANDROID_SDK_ROOT ?? '';
|
|
142
|
+
if (!androidHome)
|
|
143
|
+
return undefined;
|
|
144
|
+
// Try to get installed API levels and build-tools versions
|
|
145
|
+
const apiLevels = [];
|
|
146
|
+
const buildToolsVersions = [];
|
|
147
|
+
const listRaw = runCmd(`"${androidHome}/cmdline-tools/latest/bin/sdkmanager" --list 2>&1`)
|
|
148
|
+
?? runCmd(`"${androidHome}/tools/bin/sdkmanager" --list 2>&1`);
|
|
149
|
+
if (listRaw) {
|
|
150
|
+
// Match "platforms;android-34"
|
|
151
|
+
const platformMatches = listRaw.matchAll(/platforms;android-(\d+)/g);
|
|
152
|
+
for (const m of platformMatches) {
|
|
153
|
+
const level = parseInt(m[1], 10);
|
|
154
|
+
if (!apiLevels.includes(level))
|
|
155
|
+
apiLevels.push(level);
|
|
156
|
+
}
|
|
157
|
+
// Match "build-tools;34.0.0"
|
|
158
|
+
const btMatches = listRaw.matchAll(/build-tools;([\d.]+)/g);
|
|
159
|
+
for (const m of btMatches) {
|
|
160
|
+
if (!buildToolsVersions.includes(m[1]))
|
|
161
|
+
buildToolsVersions.push(m[1]);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
apiLevels.sort((a, b) => b - a);
|
|
165
|
+
buildToolsVersions.sort().reverse();
|
|
166
|
+
const version = apiLevels.length > 0 ? String(apiLevels[0]) : 'unknown';
|
|
167
|
+
return { name: 'android-sdk', version, androidHome, apiLevels, buildToolsVersions };
|
|
168
|
+
}
|
|
169
|
+
function detectFlutter() {
|
|
170
|
+
const raw = runCmd('flutter --version 2>&1');
|
|
171
|
+
if (!raw)
|
|
172
|
+
return undefined;
|
|
173
|
+
const versionMatch = raw.match(/Flutter ([\d.]+)/);
|
|
174
|
+
if (!versionMatch)
|
|
175
|
+
return undefined;
|
|
176
|
+
const dartMatch = raw.match(/Dart ([\d.]+)/);
|
|
177
|
+
const dartVersion = dartMatch ? dartMatch[1] : 'unknown';
|
|
178
|
+
return { name: 'flutter', version: versionMatch[1], dartVersion };
|
|
179
|
+
}
|
|
180
|
+
function detectCocoapods() {
|
|
181
|
+
const raw = runCmd('pod --version 2>&1');
|
|
182
|
+
if (!raw)
|
|
183
|
+
return undefined;
|
|
184
|
+
const match = raw.match(/([\d.]+)/);
|
|
185
|
+
if (!match)
|
|
186
|
+
return undefined;
|
|
187
|
+
return { name: 'cocoapods', version: match[1] };
|
|
188
|
+
}
|
|
189
|
+
function detectNode() {
|
|
190
|
+
const raw = runCmd('node --version 2>&1');
|
|
191
|
+
if (!raw)
|
|
192
|
+
return undefined;
|
|
193
|
+
// "v20.11.0" -> "20.11.0"
|
|
194
|
+
const match = raw.match(/v?([\d.]+)/);
|
|
195
|
+
if (!match)
|
|
196
|
+
return undefined;
|
|
197
|
+
const npmRaw = runCmd('npm --version 2>&1');
|
|
198
|
+
const npmMatch = npmRaw?.match(/([\d.]+)/);
|
|
199
|
+
return { name: 'node', version: match[1], npmVersion: npmMatch?.[1] };
|
|
200
|
+
}
|
|
201
|
+
function detectYarn() {
|
|
202
|
+
const raw = runCmd('yarn --version 2>&1');
|
|
203
|
+
if (!raw)
|
|
204
|
+
return undefined;
|
|
205
|
+
const match = raw.match(/([\d.]+)/);
|
|
206
|
+
if (!match)
|
|
207
|
+
return undefined;
|
|
208
|
+
return { name: 'yarn', version: match[1] };
|
|
209
|
+
}
|
|
210
|
+
function detectPnpm() {
|
|
211
|
+
const raw = runCmd('pnpm --version 2>&1');
|
|
212
|
+
if (!raw)
|
|
213
|
+
return undefined;
|
|
214
|
+
const match = raw.match(/([\d.]+)/);
|
|
215
|
+
if (!match)
|
|
216
|
+
return undefined;
|
|
217
|
+
return { name: 'pnpm', version: match[1] };
|
|
218
|
+
}
|
|
219
|
+
function detectPython() {
|
|
220
|
+
const raw = runCmd('python3 --version 2>&1') ?? runCmd('python --version 2>&1');
|
|
221
|
+
if (!raw)
|
|
222
|
+
return undefined;
|
|
223
|
+
const match = raw.match(/Python ([\d.]+)/i);
|
|
224
|
+
if (!match)
|
|
225
|
+
return undefined;
|
|
226
|
+
const pipRaw = runCmd('pip3 --version 2>&1') ?? runCmd('pip --version 2>&1');
|
|
227
|
+
const pipMatch = pipRaw?.match(/pip ([\d.]+)/);
|
|
228
|
+
return { name: 'python', version: match[1], pipVersion: pipMatch?.[1] };
|
|
229
|
+
}
|
|
230
|
+
function detectGo() {
|
|
231
|
+
const raw = runCmd('go version 2>&1');
|
|
232
|
+
if (!raw)
|
|
233
|
+
return undefined;
|
|
234
|
+
// "go version go1.22.0 darwin/arm64"
|
|
235
|
+
const match = raw.match(/go([\d.]+)/);
|
|
236
|
+
if (!match)
|
|
237
|
+
return undefined;
|
|
238
|
+
const gopath = process.env.GOPATH ?? runCmd('go env GOPATH 2>&1') ?? undefined;
|
|
239
|
+
return { name: 'go', version: match[1], gopath };
|
|
240
|
+
}
|
|
241
|
+
function detectRust() {
|
|
242
|
+
const raw = runCmd('rustc --version 2>&1');
|
|
243
|
+
if (!raw)
|
|
244
|
+
return undefined;
|
|
245
|
+
// "rustc 1.75.0 (82e1608df 2023-12-21)"
|
|
246
|
+
const match = raw.match(/rustc ([\d.]+)/);
|
|
247
|
+
if (!match)
|
|
248
|
+
return undefined;
|
|
249
|
+
const cargoRaw = runCmd('cargo --version 2>&1');
|
|
250
|
+
const cargoMatch = cargoRaw?.match(/cargo ([\d.]+)/);
|
|
251
|
+
return { name: 'rust', version: match[1], cargoVersion: cargoMatch?.[1] };
|
|
252
|
+
}
|
|
253
|
+
function detectRuby() {
|
|
254
|
+
const raw = runCmd('ruby --version 2>&1');
|
|
255
|
+
if (!raw)
|
|
256
|
+
return undefined;
|
|
257
|
+
// "ruby 3.2.2 (2023-03-30 revision e51014f9c0) [arm64-darwin22]"
|
|
258
|
+
const match = raw.match(/ruby ([\d.]+)/);
|
|
259
|
+
if (!match)
|
|
260
|
+
return undefined;
|
|
261
|
+
const bundlerRaw = runCmd('bundler --version 2>&1');
|
|
262
|
+
const bundlerMatch = bundlerRaw?.match(/Bundler version ([\d.]+)/);
|
|
263
|
+
return { name: 'ruby', version: match[1], bundlerVersion: bundlerMatch?.[1] };
|
|
264
|
+
}
|
|
265
|
+
function detectDotnet() {
|
|
266
|
+
const raw = runCmd('dotnet --version 2>&1');
|
|
267
|
+
if (!raw)
|
|
268
|
+
return undefined;
|
|
269
|
+
const match = raw.match(/([\d.]+)/);
|
|
270
|
+
if (!match)
|
|
271
|
+
return undefined;
|
|
272
|
+
return { name: 'dotnet', version: match[1] };
|
|
273
|
+
}
|
|
274
|
+
function detectDocker() {
|
|
275
|
+
const raw = runCmd('docker --version 2>&1');
|
|
276
|
+
if (!raw)
|
|
277
|
+
return undefined;
|
|
278
|
+
// "Docker version 24.0.7, build afdd53b"
|
|
279
|
+
const match = raw.match(/Docker version ([\d.]+)/i);
|
|
280
|
+
if (!match)
|
|
281
|
+
return undefined;
|
|
282
|
+
const composeRaw = runCmd('docker compose version 2>&1');
|
|
283
|
+
const composeMatch = composeRaw?.match(/v?([\d.]+)/);
|
|
284
|
+
return { name: 'docker', version: match[1], composeVersion: composeMatch?.[1] };
|
|
285
|
+
}
|
|
286
|
+
function detectTerraform() {
|
|
287
|
+
const raw = runCmd('terraform --version 2>&1');
|
|
288
|
+
if (!raw)
|
|
289
|
+
return undefined;
|
|
290
|
+
const match = raw.match(/Terraform v?([\d.]+)/i);
|
|
291
|
+
if (!match)
|
|
292
|
+
return undefined;
|
|
293
|
+
return { name: 'terraform', version: match[1] };
|
|
294
|
+
}
|
|
295
|
+
function detectKubectl() {
|
|
296
|
+
const raw = runCmd('kubectl version --client --short 2>&1')
|
|
297
|
+
?? runCmd('kubectl version --client 2>&1');
|
|
298
|
+
if (!raw)
|
|
299
|
+
return undefined;
|
|
300
|
+
const match = raw.match(/v?([\d.]+)/);
|
|
301
|
+
if (!match)
|
|
302
|
+
return undefined;
|
|
303
|
+
return { name: 'kubectl', version: match[1] };
|
|
304
|
+
}
|
|
305
|
+
function detectGit() {
|
|
306
|
+
const raw = runCmd('git --version 2>&1');
|
|
307
|
+
if (!raw)
|
|
308
|
+
return undefined;
|
|
309
|
+
// "git version 2.43.0"
|
|
310
|
+
const match = raw.match(/git version ([\d.]+)/);
|
|
311
|
+
if (!match)
|
|
312
|
+
return undefined;
|
|
313
|
+
return { name: 'git', version: match[1] };
|
|
314
|
+
}
|
|
315
|
+
function detectCmake() {
|
|
316
|
+
const raw = runCmd('cmake --version 2>&1');
|
|
317
|
+
if (!raw)
|
|
318
|
+
return undefined;
|
|
319
|
+
const match = raw.match(/cmake version ([\d.]+)/i);
|
|
320
|
+
if (!match)
|
|
321
|
+
return undefined;
|
|
322
|
+
return { name: 'cmake', version: match[1] };
|
|
323
|
+
}
|
|
324
|
+
function detectMake() {
|
|
325
|
+
const raw = runCmd('make --version 2>&1');
|
|
326
|
+
if (!raw)
|
|
327
|
+
return undefined;
|
|
328
|
+
const match = raw.match(/(?:GNU Make|Make) ([\d.]+)/i);
|
|
329
|
+
if (!match)
|
|
330
|
+
return undefined;
|
|
331
|
+
return { name: 'make', version: match[1] };
|
|
332
|
+
}
|
|
333
|
+
// ---------------------------------------------------------------------------
|
|
334
|
+
// Public API
|
|
335
|
+
// ---------------------------------------------------------------------------
|
|
336
|
+
/**
|
|
337
|
+
* Scan the host for all known SDKs and toolchains.
|
|
338
|
+
*
|
|
339
|
+
* Each detector is independent and wrapped in try/catch so a failure in one
|
|
340
|
+
* tool never blocks detection of the others.
|
|
341
|
+
*/
|
|
342
|
+
export async function scanInstalledSDKs() {
|
|
343
|
+
logger.info('Scanning installed SDKs and toolchains...');
|
|
344
|
+
const result = {};
|
|
345
|
+
// Run detectors sequentially to avoid spawning too many child processes at
|
|
346
|
+
// once on resource-constrained machines. Each has its own timeout guard.
|
|
347
|
+
const detectors = [
|
|
348
|
+
['java', detectJava],
|
|
349
|
+
['kotlin', detectKotlin],
|
|
350
|
+
['gradle', detectGradle],
|
|
351
|
+
['maven', detectMaven],
|
|
352
|
+
['xcode', detectXcode],
|
|
353
|
+
['androidSdk', detectAndroidSdk],
|
|
354
|
+
['flutter', detectFlutter],
|
|
355
|
+
['cocoapods', detectCocoapods],
|
|
356
|
+
['node', detectNode],
|
|
357
|
+
['yarn', detectYarn],
|
|
358
|
+
['pnpm', detectPnpm],
|
|
359
|
+
['python', detectPython],
|
|
360
|
+
['go', detectGo],
|
|
361
|
+
['rust', detectRust],
|
|
362
|
+
['ruby', detectRuby],
|
|
363
|
+
['dotnet', detectDotnet],
|
|
364
|
+
['docker', detectDocker],
|
|
365
|
+
['terraform', detectTerraform],
|
|
366
|
+
['kubectl', detectKubectl],
|
|
367
|
+
['git', detectGit],
|
|
368
|
+
['cmake', detectCmake],
|
|
369
|
+
['make', detectMake],
|
|
370
|
+
];
|
|
371
|
+
for (const [key, detector] of detectors) {
|
|
372
|
+
try {
|
|
373
|
+
const info = detector();
|
|
374
|
+
if (info) {
|
|
375
|
+
result[key] = info;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
catch (err) {
|
|
379
|
+
logger.warn(`SDK detector for '${key}' threw unexpectedly:`, err);
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
const detected = Object.keys(result);
|
|
383
|
+
logger.info(`Detected ${detected.length} SDK(s): ${detected.join(', ')}`);
|
|
384
|
+
return result;
|
|
385
|
+
}
|
|
386
|
+
/**
|
|
387
|
+
* Generate capability tags from an SDK scan result.
|
|
388
|
+
*
|
|
389
|
+
* Tag conventions:
|
|
390
|
+
* - Generic tag without version: `java`, `docker`, `xcode`
|
|
391
|
+
* - Major-version tag: `java-17`, `node-20`, `go-1`
|
|
392
|
+
* - For Xcode, major.minor: `xcode-15.4`
|
|
393
|
+
* - For Android SDK, highest API level: `android-sdk-34`
|
|
394
|
+
* - Special: `docker` (Docker available), `dind` (Docker-in-Docker capable)
|
|
395
|
+
*/
|
|
396
|
+
export function generateTagsFromSDKs(sdks) {
|
|
397
|
+
const tags = [];
|
|
398
|
+
const addVersionedTag = (info, tagName) => {
|
|
399
|
+
if (!info)
|
|
400
|
+
return;
|
|
401
|
+
const name = tagName ?? info.name;
|
|
402
|
+
tags.push(name);
|
|
403
|
+
const major = majorVersion(info.version);
|
|
404
|
+
if (major > 0) {
|
|
405
|
+
tags.push(`${name}-${major}`);
|
|
406
|
+
}
|
|
407
|
+
};
|
|
408
|
+
// Development toolchains
|
|
409
|
+
addVersionedTag(sdks.java);
|
|
410
|
+
addVersionedTag(sdks.kotlin);
|
|
411
|
+
addVersionedTag(sdks.gradle);
|
|
412
|
+
addVersionedTag(sdks.maven);
|
|
413
|
+
// Mobile - Xcode uses major.minor
|
|
414
|
+
if (sdks.xcode) {
|
|
415
|
+
tags.push('xcode');
|
|
416
|
+
tags.push(`xcode-${majorMinor(sdks.xcode.version)}`);
|
|
417
|
+
}
|
|
418
|
+
// Android SDK - tag with highest API level
|
|
419
|
+
if (sdks.androidSdk) {
|
|
420
|
+
tags.push('android-sdk');
|
|
421
|
+
if (sdks.androidSdk.apiLevels.length > 0) {
|
|
422
|
+
tags.push(`android-sdk-${sdks.androidSdk.apiLevels[0]}`);
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
addVersionedTag(sdks.flutter);
|
|
426
|
+
addVersionedTag(sdks.cocoapods);
|
|
427
|
+
// Web / Backend
|
|
428
|
+
addVersionedTag(sdks.node);
|
|
429
|
+
addVersionedTag(sdks.yarn);
|
|
430
|
+
addVersionedTag(sdks.pnpm);
|
|
431
|
+
addVersionedTag(sdks.python);
|
|
432
|
+
addVersionedTag(sdks.go);
|
|
433
|
+
addVersionedTag(sdks.rust);
|
|
434
|
+
addVersionedTag(sdks.ruby);
|
|
435
|
+
addVersionedTag(sdks.dotnet);
|
|
436
|
+
// DevOps
|
|
437
|
+
if (sdks.docker) {
|
|
438
|
+
tags.push('docker');
|
|
439
|
+
// Check if Docker-in-Docker is plausible (Docker socket exists)
|
|
440
|
+
try {
|
|
441
|
+
const socketCheck = runCmd('ls /var/run/docker.sock 2>&1');
|
|
442
|
+
if (socketCheck && !socketCheck.includes('No such file')) {
|
|
443
|
+
tags.push('dind');
|
|
444
|
+
}
|
|
445
|
+
}
|
|
446
|
+
catch {
|
|
447
|
+
// ignore
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
addVersionedTag(sdks.terraform);
|
|
451
|
+
addVersionedTag(sdks.kubectl);
|
|
452
|
+
// General
|
|
453
|
+
addVersionedTag(sdks.git);
|
|
454
|
+
addVersionedTag(sdks.cmake);
|
|
455
|
+
addVersionedTag(sdks.make);
|
|
456
|
+
// De-duplicate (preserving order)
|
|
457
|
+
return [...new Set(tags)];
|
|
458
|
+
}
|
|
459
|
+
//# sourceMappingURL=sdkScanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sdkScanner.js","sourceRoot":"","sources":["../../src/utils/sdkScanner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* WebSocket Client - Agent communication with BuildHive platform
|
|
3
|
+
*
|
|
4
|
+
* Handles real-time communication between agent and platform,
|
|
5
|
+
* including registration, heartbeats, job assignments, and status updates.
|
|
6
|
+
*
|
|
7
|
+
* Requirements: 1.5, 1.6, 5.1, 5.2, 5.3
|
|
8
|
+
*/
|
|
9
|
+
import { AgentConfig } from './config/types.js';
|
|
10
|
+
import { AgentCapabilities, JobSubmissionRequest } from './types.js';
|
|
11
|
+
import { JobResult } from './agent.js';
|
|
12
|
+
export interface HeartbeatData {
|
|
13
|
+
currentLoad: number;
|
|
14
|
+
activeJobs: number;
|
|
15
|
+
metrics?: {
|
|
16
|
+
cpuUsage: number;
|
|
17
|
+
memoryUsage: number;
|
|
18
|
+
diskUsage: number;
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export interface JobProgress {
|
|
22
|
+
percentage: number;
|
|
23
|
+
currentStep: string;
|
|
24
|
+
totalSteps?: number;
|
|
25
|
+
currentStepIndex?: number;
|
|
26
|
+
estimatedTimeRemaining?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface MetricsData {
|
|
29
|
+
cpuUsage: number;
|
|
30
|
+
memoryUsage: number;
|
|
31
|
+
diskUsage: number;
|
|
32
|
+
networkIn: number;
|
|
33
|
+
networkOut: number;
|
|
34
|
+
activeJobs: number;
|
|
35
|
+
queuedJobs: number;
|
|
36
|
+
completedJobs: number;
|
|
37
|
+
failedJobs: number;
|
|
38
|
+
}
|
|
39
|
+
export declare class WebSocketClient {
|
|
40
|
+
private config;
|
|
41
|
+
private capabilities;
|
|
42
|
+
private ws;
|
|
43
|
+
private connectionId;
|
|
44
|
+
private reconnectAttempts;
|
|
45
|
+
private maxReconnectAttempts;
|
|
46
|
+
private reconnectDelay;
|
|
47
|
+
private maxReconnectDelay;
|
|
48
|
+
private pingInterval;
|
|
49
|
+
private isConnecting;
|
|
50
|
+
private eventHandlers;
|
|
51
|
+
private isRegistered;
|
|
52
|
+
constructor(config: AgentConfig, capabilities: AgentCapabilities);
|
|
53
|
+
/**
|
|
54
|
+
* Connect to the BuildHive platform WebSocket server
|
|
55
|
+
*/
|
|
56
|
+
connect(): Promise<void>;
|
|
57
|
+
/**
|
|
58
|
+
* Disconnect from the platform
|
|
59
|
+
*/
|
|
60
|
+
disconnect(): Promise<void>;
|
|
61
|
+
/**
|
|
62
|
+
* Register agent with the platform
|
|
63
|
+
*/
|
|
64
|
+
registerAgent(): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Send heartbeat to platform
|
|
67
|
+
*/
|
|
68
|
+
sendHeartbeat(data: HeartbeatData): Promise<void>;
|
|
69
|
+
/**
|
|
70
|
+
* Send metrics to platform
|
|
71
|
+
*/
|
|
72
|
+
sendMetrics(metrics: MetricsData): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Update agent status
|
|
75
|
+
*/
|
|
76
|
+
updateStatus(status: 'ONLINE' | 'OFFLINE' | 'BUSY' | 'MAINTENANCE'): Promise<void>;
|
|
77
|
+
/**
|
|
78
|
+
* Send job progress update
|
|
79
|
+
*/
|
|
80
|
+
sendJobProgress(jobId: string, progress: JobProgress): void;
|
|
81
|
+
/**
|
|
82
|
+
* Send job logs
|
|
83
|
+
*/
|
|
84
|
+
sendJobLogs(jobId: string, logs: string, level?: 'info' | 'warn' | 'error' | 'debug'): void;
|
|
85
|
+
/**
|
|
86
|
+
* Send job result
|
|
87
|
+
*/
|
|
88
|
+
sendJobResult(result: JobResult): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Add event handler
|
|
91
|
+
*/
|
|
92
|
+
onJobAssigned(handler: (job: JobSubmissionRequest) => void): void;
|
|
93
|
+
onConnectionChange(handler: (connected: boolean) => void): void;
|
|
94
|
+
onReconnected(handler: () => void): void;
|
|
95
|
+
/**
|
|
96
|
+
* Generic event handler registration
|
|
97
|
+
*/
|
|
98
|
+
on(eventType: string, handler: Function): void;
|
|
99
|
+
/**
|
|
100
|
+
* Remove event handler
|
|
101
|
+
*/
|
|
102
|
+
off(eventType: string, handler: Function): void;
|
|
103
|
+
/**
|
|
104
|
+
* Check if WebSocket is connected
|
|
105
|
+
*/
|
|
106
|
+
isConnected(): boolean;
|
|
107
|
+
/**
|
|
108
|
+
* Get connection status
|
|
109
|
+
*/
|
|
110
|
+
getConnectionStatus(): {
|
|
111
|
+
connected: boolean;
|
|
112
|
+
connecting: boolean;
|
|
113
|
+
registered: boolean;
|
|
114
|
+
connectionId: string | null;
|
|
115
|
+
reconnectAttempts: number;
|
|
116
|
+
};
|
|
117
|
+
/**
|
|
118
|
+
* Build WebSocket URL with authentication
|
|
119
|
+
*/
|
|
120
|
+
private buildWebSocketUrl;
|
|
121
|
+
/**
|
|
122
|
+
* Send message to server
|
|
123
|
+
*/
|
|
124
|
+
private send;
|
|
125
|
+
/**
|
|
126
|
+
* Handle WebSocket open event
|
|
127
|
+
*/
|
|
128
|
+
private handleOpen;
|
|
129
|
+
/**
|
|
130
|
+
* Handle WebSocket message event
|
|
131
|
+
*/
|
|
132
|
+
private handleMessage;
|
|
133
|
+
/**
|
|
134
|
+
* Handle WebSocket close event
|
|
135
|
+
*/
|
|
136
|
+
private handleClose;
|
|
137
|
+
/**
|
|
138
|
+
* Handle WebSocket error event
|
|
139
|
+
*/
|
|
140
|
+
private handleError;
|
|
141
|
+
/**
|
|
142
|
+
* Schedule reconnection attempt
|
|
143
|
+
*/
|
|
144
|
+
private scheduleReconnect;
|
|
145
|
+
/**
|
|
146
|
+
* Start ping interval to keep connection alive
|
|
147
|
+
*/
|
|
148
|
+
private startPingInterval;
|
|
149
|
+
/**
|
|
150
|
+
* Emit event to registered handlers
|
|
151
|
+
*/
|
|
152
|
+
private emitEvent;
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=websocketClient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"websocketClient.d.ts","sourceRoot":"","sources":["../src/websocketClient.ts"],"names":[],"mappings":"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"}
|