@rage-against-the-pixel/unity-cli 3.0.1 → 4.0.0

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.
Files changed (60) hide show
  1. package/README.md +89 -223
  2. package/dist/android-sdk.js +8 -1
  3. package/dist/android-sdk.js.map +1 -1
  4. package/dist/cli.js +195 -506
  5. package/dist/cli.js.map +1 -1
  6. package/dist/failure-markers.d.ts +17 -0
  7. package/dist/failure-markers.js +46 -0
  8. package/dist/failure-markers.js.map +1 -0
  9. package/dist/github-actions-ci.d.ts +1 -0
  10. package/dist/github-actions-ci.js +17 -3
  11. package/dist/github-actions-ci.js.map +1 -1
  12. package/dist/index.d.ts +2 -2
  13. package/dist/index.js +2 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/license-client.d.ts +113 -2
  16. package/dist/license-client.js +715 -54
  17. package/dist/license-client.js.map +1 -1
  18. package/dist/logger-provider.d.ts +2 -0
  19. package/dist/logger-provider.js +3 -0
  20. package/dist/logger-provider.js.map +1 -1
  21. package/dist/logging.d.ts +6 -1
  22. package/dist/logging.js +66 -5
  23. package/dist/logging.js.map +1 -1
  24. package/dist/process-tracker.d.ts +71 -0
  25. package/dist/process-tracker.js +213 -0
  26. package/dist/process-tracker.js.map +1 -0
  27. package/dist/unity-cli.d.ts +97 -0
  28. package/dist/unity-cli.js +587 -0
  29. package/dist/unity-cli.js.map +1 -0
  30. package/dist/unity-editor.d.ts +25 -16
  31. package/dist/unity-editor.js +204 -107
  32. package/dist/unity-editor.js.map +1 -1
  33. package/dist/unity-installer.d.ts +134 -0
  34. package/dist/unity-installer.js +963 -0
  35. package/dist/unity-installer.js.map +1 -0
  36. package/dist/unity-logging.d.ts +16 -1
  37. package/dist/unity-logging.js +79 -40
  38. package/dist/unity-logging.js.map +1 -1
  39. package/dist/unity-project.d.ts +15 -0
  40. package/dist/unity-project.js +80 -0
  41. package/dist/unity-project.js.map +1 -1
  42. package/dist/unity-version.d.ts +4 -0
  43. package/dist/unity-version.js +40 -2
  44. package/dist/unity-version.js.map +1 -1
  45. package/dist/upm-cli.d.ts +8 -8
  46. package/dist/upm-cli.js +8 -8
  47. package/dist/upm-cli.js.map +1 -1
  48. package/dist/utilities.d.ts +27 -7
  49. package/dist/utilities.js +119 -63
  50. package/dist/utilities.js.map +1 -1
  51. package/dist/utp-benign.d.ts +13 -0
  52. package/dist/utp-benign.js +41 -0
  53. package/dist/utp-benign.js.map +1 -0
  54. package/dist/utp.d.ts +11 -2
  55. package/dist/utp.js +40 -3
  56. package/dist/utp.js.map +1 -1
  57. package/package.json +14 -15
  58. package/dist/unity-hub.d.ts +0 -127
  59. package/dist/unity-hub.js +0 -1327
  60. package/dist/unity-hub.js.map +0 -1
@@ -0,0 +1,587 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.UnityCli = void 0;
37
+ exports.FindAbsolutePath = FindAbsolutePath;
38
+ const fs = __importStar(require("fs"));
39
+ const os = __importStar(require("os"));
40
+ const path = __importStar(require("path"));
41
+ const child_process_1 = require("child_process");
42
+ const logging_1 = require("./logging");
43
+ const utilities_1 = require("./utilities");
44
+ const process_tracker_1 = require("./process-tracker");
45
+ const semver_1 = require("semver");
46
+ const CDN_BASE = 'https://public-cdn.cloud.unity3d.com/hub/prod/cli/';
47
+ const TOOL_NAME = 'unity-cli';
48
+ const EXE_NAME = process.platform === 'win32' ? 'unity.exe' : 'unity';
49
+ const VERSION_PATTERN = /^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/;
50
+ /**
51
+ * A thin wrapper over Unity's official CLI (`unity`).
52
+ * @see https://docs.unity.com/en-us/cli
53
+ */
54
+ class UnityCli {
55
+ executable;
56
+ version;
57
+ logger = logging_1.Logger.instance;
58
+ constructor(executable, version) {
59
+ this.executable = executable;
60
+ this.version = version;
61
+ }
62
+ /**
63
+ * Returns the official Unity CLI, installing it when it is missing or is not the requested version.
64
+ * @param version An exact version such as 1.0.0-beta.14, or `latest`. Defaults to UNITY_CLI_VERSION, then `latest`.
65
+ * Every install exports UNITY_CLI_VERSION, so later steps in the same job reuse the version the first one resolved.
66
+ */
67
+ static async Get(version = undefined) {
68
+ configureEnvironment();
69
+ const requested = normalizeVersion(version || process.env.UNITY_CLI_VERSION || 'latest');
70
+ // latest resolves the manifest first, so an outdated CLI is not reused
71
+ if (requested === 'latest') {
72
+ return await UnityCli.Install('latest');
73
+ }
74
+ const existing = await UnityCli.Find();
75
+ if (existing && existing.version === requested) {
76
+ logging_1.Logger.instance.debug(`Using Unity CLI ${existing.version} at ${existing.executable}`);
77
+ return exportCli(existing);
78
+ }
79
+ if (existing) {
80
+ logging_1.Logger.instance.info(`Found Unity CLI ${existing.version} at ${existing.executable}, but ${requested} was requested`);
81
+ }
82
+ return await UnityCli.Install(requested);
83
+ }
84
+ /**
85
+ * Finds an installed official Unity CLI from UNITY_CLI_PATH, the tool cache, the install script's default location, or the PATH.
86
+ * The PATH comes last, since other programs named unity live there, such as the Unity7 shell on Ubuntu desktops.
87
+ */
88
+ static async Find() {
89
+ const candidates = [];
90
+ if (process.env.UNITY_CLI_PATH) {
91
+ candidates.push(process.env.UNITY_CLI_PATH);
92
+ }
93
+ candidates.push(...findCachedExecutables());
94
+ candidates.push(...defaultInstallLocations());
95
+ for (const dir of (process.env.PATH ?? '').split(path.delimiter)) {
96
+ if (dir && dir.length > 0) {
97
+ candidates.push(path.join(dir, EXE_NAME));
98
+ }
99
+ }
100
+ for (const candidate of candidates) {
101
+ // only ever run a binary named unity(.exe), even when UNITY_CLI_PATH points elsewhere
102
+ if (path.basename(candidate).toLowerCase() !== EXE_NAME || !isExecutableFile(candidate)) {
103
+ continue;
104
+ }
105
+ try {
106
+ const version = await getCliVersion(candidate);
107
+ return new UnityCli(candidate, version);
108
+ }
109
+ catch (error) {
110
+ logging_1.Logger.instance.debug(`Skipping ${candidate}: ${error}`);
111
+ }
112
+ }
113
+ return undefined;
114
+ }
115
+ /**
116
+ * Downloads an exact official Unity CLI release from Unity's CDN, verifies its SHA-256 and caches it.
117
+ * @param version An exact version such as 1.0.0-beta.14, or `latest`.
118
+ */
119
+ static async Install(version = 'latest') {
120
+ configureEnvironment();
121
+ const requested = normalizeVersion(version);
122
+ let manifest;
123
+ try {
124
+ manifest = await fetchManifest(requested);
125
+ }
126
+ catch (error) {
127
+ // with no network, the newest CLI already in the tool cache still does for latest
128
+ const cachedCli = requested === 'latest' ? await findNewestCachedCli() : undefined;
129
+ if (!cachedCli) {
130
+ throw error;
131
+ }
132
+ logging_1.Logger.instance.warn(`Could not resolve the latest Unity CLI, using the cached ${cachedCli.version}.\n${error}`);
133
+ return exportCli(cachedCli);
134
+ }
135
+ const platformKey = `${process.platform}-${process.arch}`;
136
+ const binary = manifest.binaries[platformKey];
137
+ if (!binary) {
138
+ throw new Error(`Unity CLI ${manifest.version} has no binary for ${platformKey}. Available: ${Object.keys(manifest.binaries).join(', ')}`);
139
+ }
140
+ if (!/^[\w.-]+$/.test(binary.filename) || !/^[0-9a-f]{64}$/i.test(binary.sha256)) {
141
+ throw new Error(`Invalid binary entry for ${platformKey} in the Unity CLI ${manifest.version} manifest`);
142
+ }
143
+ const cached = getToolCachePath(manifest.version);
144
+ const cachedExecutable = path.join(cached, EXE_NAME);
145
+ if (isExecutableFile(cachedExecutable) && fs.existsSync(`${cached}.complete`)) {
146
+ const cachedVersion = await getCliVersion(cachedExecutable);
147
+ if (cachedVersion === manifest.version) {
148
+ logging_1.Logger.instance.info(`Using cached Unity CLI ${cachedVersion}`);
149
+ return exportCli(new UnityCli(cachedExecutable, cachedVersion));
150
+ }
151
+ }
152
+ logging_1.Logger.instance.ci(`Installing Unity CLI ${manifest.version}...`);
153
+ const downloadPath = path.join((0, utilities_1.GetTempDir)(), `${TOOL_NAME}-${Date.now()}`, binary.filename);
154
+ await (0, utilities_1.DownloadFile)(`${CDN_BASE}${manifest.version}/${binary.filename}`, downloadPath);
155
+ try {
156
+ const actualHash = await (0, utilities_1.Sha256FileHex)(downloadPath);
157
+ if (actualHash.toLowerCase() !== binary.sha256.toLowerCase()) {
158
+ throw new Error(`SHA-256 mismatch for ${binary.filename}: expected ${binary.sha256}, got ${actualHash}`);
159
+ }
160
+ await fs.promises.rm(cached, { recursive: true, force: true });
161
+ await fs.promises.rm(`${cached}.complete`, { force: true });
162
+ await fs.promises.mkdir(cached, { recursive: true });
163
+ await fs.promises.copyFile(downloadPath, cachedExecutable);
164
+ if (process.platform !== 'win32') {
165
+ await fs.promises.chmod(cachedExecutable, 0o755);
166
+ }
167
+ await fs.promises.writeFile(`${cached}.complete`, '');
168
+ }
169
+ finally {
170
+ await fs.promises.rm(path.dirname(downloadPath), { recursive: true, force: true });
171
+ }
172
+ const installedVersion = await getCliVersion(cachedExecutable);
173
+ if (requested !== 'latest' && installedVersion !== requested) {
174
+ throw new Error(`Failed to install Unity CLI ${requested}, found ${installedVersion}`);
175
+ }
176
+ logging_1.Logger.instance.info(`Installed Unity CLI ${installedVersion} to ${cachedExecutable}`);
177
+ return exportCli(new UnityCli(cachedExecutable, installedVersion));
178
+ }
179
+ /**
180
+ * Runs the CLI and returns its exit code and output without throwing on a non-zero exit code.
181
+ * @param args The arguments to pass to `unity`.
182
+ * @param options Run options.
183
+ */
184
+ async Run(args, options = {}) {
185
+ const redact = (text) => (0, utilities_1.redactSensitiveLiterals)(text, options.redactLiterals);
186
+ const commandStr = redact(`\x1b[34m${this.executable} ${args.join(' ')}\x1b[0m`);
187
+ if (options.stream) {
188
+ this.logger.startGroup(commandStr);
189
+ }
190
+ else {
191
+ this.logger.debug(commandStr);
192
+ }
193
+ try {
194
+ return await new Promise((resolve, reject) => {
195
+ let stdout = '';
196
+ let stderr = '';
197
+ let timedOut = false;
198
+ const startedAt = Date.now();
199
+ const child = (0, child_process_1.spawn)(this.executable, args, {
200
+ shell: false,
201
+ stdio: ['ignore', 'pipe', 'pipe'],
202
+ env: process.env,
203
+ ...(0, process_tracker_1.OwnedSpawnOptions)(),
204
+ });
205
+ // helpers the CLI leaves running, such as its licensing client, stay reachable through this record
206
+ (0, process_tracker_1.TrackOwnedProcess)(child, startedAt);
207
+ const timer = options.timeoutMs
208
+ ? setTimeout(() => {
209
+ timedOut = true;
210
+ child.kill('SIGTERM');
211
+ }, options.timeoutMs)
212
+ : undefined;
213
+ const onSignal = () => child.kill('SIGTERM');
214
+ process.once('SIGINT', onSignal);
215
+ process.once('SIGTERM', onSignal);
216
+ // a chunk can end mid-line, so each stream keeps its unfinished line until the rest arrives
217
+ const pending = { stdout: '', stderr: '' };
218
+ const writeLine = (line) => {
219
+ // the CLI prints a plugin hint to stderr on every run
220
+ if (line.length > 0 && !line.includes('<claude-code-hint')) {
221
+ process.stdout.write(`${redact(line)}\n`);
222
+ }
223
+ };
224
+ const writeLines = (stream, chunk) => {
225
+ if (!options.stream) {
226
+ return;
227
+ }
228
+ const lines = (pending[stream] + chunk).split(/\r?\n/);
229
+ pending[stream] = lines.pop() ?? '';
230
+ lines.forEach(writeLine);
231
+ };
232
+ const flushLines = () => {
233
+ if (!options.stream) {
234
+ return;
235
+ }
236
+ writeLine(pending.stdout);
237
+ writeLine(pending.stderr);
238
+ pending.stdout = pending.stderr = '';
239
+ };
240
+ child.stdout.on('data', (data) => {
241
+ const chunk = data.toString();
242
+ stdout += chunk;
243
+ writeLines('stdout', chunk);
244
+ });
245
+ child.stderr.on('data', (data) => {
246
+ const chunk = data.toString();
247
+ stderr += chunk;
248
+ writeLines('stderr', chunk);
249
+ });
250
+ const cleanup = () => {
251
+ if (timer) {
252
+ clearTimeout(timer);
253
+ }
254
+ process.removeListener('SIGINT', onSignal);
255
+ process.removeListener('SIGTERM', onSignal);
256
+ };
257
+ child.on('error', (error) => {
258
+ cleanup();
259
+ reject(error);
260
+ });
261
+ child.on('close', (code) => {
262
+ cleanup();
263
+ flushLines();
264
+ const exitCode = timedOut ? 14 : (code ?? 1);
265
+ this.logger.debug(`unity exited with code ${exitCode}`);
266
+ resolve({ exitCode, stdout: redact(stdout), stderr: redact(stderr) });
267
+ });
268
+ });
269
+ }
270
+ finally {
271
+ if (options.stream) {
272
+ this.logger.endGroup();
273
+ }
274
+ }
275
+ }
276
+ /**
277
+ * Runs the CLI and throws when it exits with a non-zero exit code.
278
+ * @param args The arguments to pass to `unity`.
279
+ * @param options Run options. Output streams to the console unless `stream` is false.
280
+ */
281
+ async Exec(args, options = {}) {
282
+ const result = await this.Run(args, { stream: true, ...options });
283
+ if (result.exitCode !== 0) {
284
+ const tail = options.stream === false ? `\n${result.stdout}${stripHint(result.stderr)}` : '';
285
+ throw new Error(`unity ${(0, utilities_1.redactSensitiveLiterals)(args.join(' '), options.redactLiterals)} failed with exit code ${result.exitCode}${tail}`);
286
+ }
287
+ return result.stdout;
288
+ }
289
+ /**
290
+ * Runs the CLI with `--format json` and parses the result envelope from stdout.
291
+ * @param args The arguments to pass to `unity`.
292
+ * @param options Run options.
293
+ * @returns The exit code and the parsed envelope, if stdout held one.
294
+ */
295
+ async RunJson(args, options = {}) {
296
+ const result = await this.Run([...args, '--format', 'json'], { ...options, stream: false });
297
+ const envelope = parseEnvelope(result.stdout);
298
+ // JSON results can carry account details and tokens (license activate, status), so the debug copy is sanitized
299
+ this.logger.debug(`unity ${(0, utilities_1.redactSensitiveLiterals)(args.join(' '), options.redactLiterals)} [${result.exitCode}]:\n${(0, utilities_1.SanitizeLogText)(`${result.stdout}${stripHint(result.stderr)}`, options.redactLiterals)}`);
300
+ return { exitCode: result.exitCode, envelope, stdout: result.stdout, stderr: result.stderr };
301
+ }
302
+ /**
303
+ * Runs the CLI with `--format json` and returns `data`, throwing when the command fails.
304
+ * @param args The arguments to pass to `unity`.
305
+ * @param options Run options.
306
+ */
307
+ async ExecJson(args, options = {}) {
308
+ const { exitCode, envelope, stdout, stderr } = await this.RunJson(args, options);
309
+ if (exitCode !== 0 || !envelope || envelope.success === false) {
310
+ const errors = envelope?.errors?.map(e => `${e.code}: ${e.message}`).join('\n') || `${stdout}${stripHint(stderr)}`.trim();
311
+ throw new Error(`unity ${(0, utilities_1.redactSensitiveLiterals)(args.join(' '), options.redactLiterals)} failed with exit code ${exitCode}\n${errors}`);
312
+ }
313
+ return envelope.data;
314
+ }
315
+ /** Gets the directory the CLI installs editors to. */
316
+ async GetInstallPath() {
317
+ const data = await this.ExecJson(['install-path', '--get']);
318
+ const installPath = FindAbsolutePath(data);
319
+ if (!installPath) {
320
+ throw new Error(`Unable to read the editor install path from: ${JSON.stringify(data)}`);
321
+ }
322
+ return installPath;
323
+ }
324
+ /**
325
+ * Sets the directory the CLI installs editors to.
326
+ * @param installPath The directory to install editors to.
327
+ */
328
+ async SetInstallPath(installPath) {
329
+ await fs.promises.mkdir(installPath, { recursive: true });
330
+ await this.Exec(['install-path', '--set', installPath]);
331
+ }
332
+ /**
333
+ * Gets the path to the Unity.Licensing.Client the CLI manages, downloading it first if needed.
334
+ * @returns The licensing client executable, or undefined when the CLI does not report one.
335
+ */
336
+ async GetLicensingClientPath() {
337
+ // the first license command makes the CLI download the licensing client
338
+ await this.RunJson(['license', 'list']);
339
+ const { envelope } = await this.RunJson(['doctor']);
340
+ const components = envelope?.data?.externalComponents;
341
+ const executableName = process.platform === 'win32' ? 'Unity.Licensing.Client.exe' : 'Unity.Licensing.Client';
342
+ const candidates = [];
343
+ collectStrings(components, candidates);
344
+ for (const candidate of candidates) {
345
+ if (!path.isAbsolute(candidate) || !candidate.toLowerCase().includes('licensing')) {
346
+ continue;
347
+ }
348
+ const resolved = resolveLicensingClient(candidate, executableName);
349
+ if (resolved) {
350
+ return resolved;
351
+ }
352
+ }
353
+ return undefined;
354
+ }
355
+ }
356
+ exports.UnityCli = UnityCli;
357
+ /**
358
+ * Finds the first absolute path in a CLI result, preferring well-known keys.
359
+ * @param value A parsed CLI JSON value.
360
+ */
361
+ function FindAbsolutePath(value) {
362
+ const pathKeys = ['path', 'editorPath', 'installPath', 'location', 'directory', 'value'];
363
+ if (typeof value === 'string') {
364
+ return path.isAbsolute(value) ? value : undefined;
365
+ }
366
+ if (Array.isArray(value)) {
367
+ for (const item of value) {
368
+ const found = FindAbsolutePath(item);
369
+ if (found) {
370
+ return found;
371
+ }
372
+ }
373
+ return undefined;
374
+ }
375
+ if (value && typeof value === 'object') {
376
+ const record = value;
377
+ for (const key of pathKeys) {
378
+ const found = FindAbsolutePath(record[key]);
379
+ if (found) {
380
+ return found;
381
+ }
382
+ }
383
+ for (const [key, item] of Object.entries(record)) {
384
+ if (key === 'errors' || key === 'warnings') {
385
+ continue;
386
+ }
387
+ const found = FindAbsolutePath(item);
388
+ if (found) {
389
+ return found;
390
+ }
391
+ }
392
+ }
393
+ return undefined;
394
+ }
395
+ function parseEnvelope(stdout) {
396
+ const trimmed = stdout.trim();
397
+ if (trimmed.length === 0) {
398
+ return undefined;
399
+ }
400
+ try {
401
+ return JSON.parse(trimmed);
402
+ }
403
+ catch {
404
+ // fall back to the last line that parses, in case anything else was printed first
405
+ const lines = trimmed.split(/\r?\n/).reverse();
406
+ for (const line of lines) {
407
+ try {
408
+ const parsed = JSON.parse(line);
409
+ if (parsed && typeof parsed === 'object' && 'success' in parsed) {
410
+ return parsed;
411
+ }
412
+ }
413
+ catch {
414
+ // keep looking
415
+ }
416
+ }
417
+ }
418
+ return undefined;
419
+ }
420
+ function stripHint(text) {
421
+ return text.split(/\r?\n/).filter(line => !line.includes('<claude-code-hint')).join('\n');
422
+ }
423
+ function collectStrings(value, results) {
424
+ if (typeof value === 'string') {
425
+ results.push(value);
426
+ }
427
+ else if (Array.isArray(value)) {
428
+ value.forEach(item => collectStrings(item, results));
429
+ }
430
+ else if (value && typeof value === 'object') {
431
+ Object.values(value).forEach(item => collectStrings(item, results));
432
+ }
433
+ }
434
+ function resolveLicensingClient(candidate, executableName) {
435
+ if (!fs.existsSync(candidate)) {
436
+ return undefined;
437
+ }
438
+ if (fs.statSync(candidate).isFile()) {
439
+ return path.basename(candidate) === executableName ? candidate : undefined;
440
+ }
441
+ const queue = [candidate];
442
+ // the client sits a few folders down, e.g. licensingClient/<platform>/Unity.Licensing.Client
443
+ for (let depth = 0; depth < 4 && queue.length > 0; depth++) {
444
+ const next = [];
445
+ for (const dir of queue) {
446
+ const direct = path.join(dir, executableName);
447
+ if (isExecutableFile(direct)) {
448
+ return direct;
449
+ }
450
+ for (const entry of fs.readdirSync(dir, { withFileTypes: true })) {
451
+ if (entry.isDirectory()) {
452
+ next.push(path.join(dir, entry.name));
453
+ }
454
+ }
455
+ }
456
+ queue.splice(0, queue.length, ...next);
457
+ }
458
+ return undefined;
459
+ }
460
+ async function getCliVersion(cliPath) {
461
+ const cli = new UnityCli(cliPath, '');
462
+ const { exitCode, stdout, stderr } = await cli.Run(['--version'], { timeoutMs: 60_000 });
463
+ if (exitCode !== 0) {
464
+ throw new Error(`${cliPath} --version failed with exit code ${exitCode}: ${stripHint(stderr).trim()}`);
465
+ }
466
+ // the official CLI prints only its version; another program named unity prints more, such as "unity 7.7.0"
467
+ const lastLine = stdout.split(/\r?\n/).map(line => line.trim()).filter(line => line.length > 0).pop() ?? '';
468
+ const match = /^v?(\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?)$/.exec(lastLine);
469
+ if (!match || !match[1]) {
470
+ throw new Error(`Unable to parse Unity CLI version from: ${stdout.trim()}`);
471
+ }
472
+ return match[1];
473
+ }
474
+ async function fetchManifest(version) {
475
+ const urls = version === 'latest'
476
+ ? [`${CDN_BASE}latest.json`, `${CDN_BASE}latest-beta.json`]
477
+ : [`${CDN_BASE}${version}/latest.json`];
478
+ let lastError;
479
+ for (const url of urls) {
480
+ try {
481
+ const manifest = JSON.parse(await (0, utilities_1.HttpsGetText)(url));
482
+ // the version becomes part of a cache path and a download URL
483
+ if (typeof manifest.version !== 'string' || !VERSION_PATTERN.test(manifest.version)) {
484
+ throw new Error(`Invalid version in ${url}: ${JSON.stringify(manifest.version)}`);
485
+ }
486
+ if (version !== 'latest' && manifest.version !== version) {
487
+ throw new Error(`Manifest mismatch: requested ${version} but ${url} reports ${manifest.version}`);
488
+ }
489
+ return manifest;
490
+ }
491
+ catch (error) {
492
+ lastError = error;
493
+ logging_1.Logger.instance.debug(`Failed to read ${url}: ${error}`);
494
+ }
495
+ }
496
+ throw new Error(`Failed to find Unity CLI ${version}: ${lastError}`);
497
+ }
498
+ function normalizeVersion(version) {
499
+ const trimmed = version.trim();
500
+ if (trimmed.toLowerCase() === 'latest') {
501
+ return 'latest';
502
+ }
503
+ const normalized = trimmed.replace(/^v/i, '');
504
+ if (!VERSION_PATTERN.test(normalized)) {
505
+ throw new Error(`Invalid Unity CLI version: ${version}. Use an exact version such as 1.0.0-beta.14, or latest.`);
506
+ }
507
+ return normalized;
508
+ }
509
+ function getToolCacheRoot() {
510
+ return process.env.RUNNER_TOOL_CACHE || path.join(os.homedir(), '.unity-cli', 'tools');
511
+ }
512
+ /** Same layout as @actions/tool-cache, so actions can find the CLI with tc.find('unity-cli', version). */
513
+ function getToolCachePath(version) {
514
+ return path.join(getToolCacheRoot(), TOOL_NAME, version, os.arch());
515
+ }
516
+ function findCachedExecutables() {
517
+ const toolDir = path.join(getToolCacheRoot(), TOOL_NAME);
518
+ if (!fs.existsSync(toolDir)) {
519
+ return [];
520
+ }
521
+ // newest first by semver, so 1.0.0-beta.14 sorts ahead of 1.0.0-beta.9
522
+ return fs.readdirSync(toolDir)
523
+ .filter(version => (0, semver_1.valid)(version) !== null && fs.existsSync(path.join(toolDir, version, `${os.arch()}.complete`)))
524
+ .sort((a, b) => (0, semver_1.compare)(b, a))
525
+ .map(version => path.join(toolDir, version, os.arch(), EXE_NAME));
526
+ }
527
+ /** The newest complete CLI in the tool cache that still runs, if any. */
528
+ async function findNewestCachedCli() {
529
+ for (const candidate of findCachedExecutables()) {
530
+ if (!isExecutableFile(candidate)) {
531
+ continue;
532
+ }
533
+ try {
534
+ return new UnityCli(candidate, await getCliVersion(candidate));
535
+ }
536
+ catch (error) {
537
+ logging_1.Logger.instance.debug(`Skipping ${candidate}: ${error}`);
538
+ }
539
+ }
540
+ return undefined;
541
+ }
542
+ function defaultInstallLocations() {
543
+ if (process.platform === 'win32') {
544
+ return [path.join(process.env.LOCALAPPDATA || path.join(os.homedir(), 'AppData', 'Local'), 'Unity', 'bin', EXE_NAME)];
545
+ }
546
+ return [
547
+ path.join(os.homedir(), '.local', 'bin', EXE_NAME),
548
+ path.join(os.homedir(), '.unity', 'bin', EXE_NAME),
549
+ ];
550
+ }
551
+ function isExecutableFile(filePath) {
552
+ try {
553
+ if (!fs.statSync(filePath).isFile()) {
554
+ return false;
555
+ }
556
+ fs.accessSync(filePath, fs.constants.X_OK);
557
+ return true;
558
+ }
559
+ catch {
560
+ return false;
561
+ }
562
+ }
563
+ /** Keeps the CLI from prompting or updating itself mid-job. */
564
+ function configureEnvironment() {
565
+ const vars = {
566
+ UNITY_NON_INTERACTIVE: '1',
567
+ UNITY_NO_UPDATE_CHECK: '1',
568
+ UNITY_NO_CONSENT_PROMPT: '1',
569
+ UNITY_NO_BANNER: '1',
570
+ UNITY_NO_PAGER: '1',
571
+ };
572
+ for (const [name, value] of Object.entries(vars)) {
573
+ if (!process.env[name]) {
574
+ process.env[name] = value;
575
+ logging_1.Logger.instance.CI_setEnvironmentVariable(name, value);
576
+ }
577
+ }
578
+ }
579
+ function exportCli(cli) {
580
+ process.env.UNITY_CLI_PATH = cli.executable;
581
+ process.env.UNITY_CLI_VERSION = cli.version;
582
+ logging_1.Logger.instance.CI_setEnvironmentVariable('UNITY_CLI_PATH', cli.executable);
583
+ logging_1.Logger.instance.CI_setEnvironmentVariable('UNITY_CLI_VERSION', cli.version);
584
+ logging_1.Logger.instance.CI_addPath(path.dirname(cli.executable));
585
+ return cli;
586
+ }
587
+ //# sourceMappingURL=unity-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"unity-cli.js","sourceRoot":"","sources":["../src/unity-cli.ts"],"names":[],"mappings":"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"}