@rage-against-the-pixel/unity-cli 1.0.13 → 1.1.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.
@@ -37,16 +37,15 @@ exports.UnityEditor = void 0;
37
37
  const fs = __importStar(require("fs"));
38
38
  const path = __importStar(require("path"));
39
39
  const logging_1 = require("./logging");
40
- const utilities_1 = require("./utilities");
41
- const child_process_1 = require("child_process");
42
40
  const unity_version_1 = require("./unity-version");
41
+ const child_process_1 = require("child_process");
42
+ const utilities_1 = require("./utilities");
43
43
  class UnityEditor {
44
44
  editorPath;
45
45
  version;
46
46
  editorRootPath;
47
47
  logger = logging_1.Logger.instance;
48
48
  autoAddNoGraphics;
49
- procInfo;
50
49
  /**
51
50
  * Initializes a new instance of the UnityEditor class.
52
51
  * @param editorPath The path to the Unity Editor installation.
@@ -127,26 +126,104 @@ class UnityEditor {
127
126
  }
128
127
  return path.normalize(templatePath);
129
128
  }
129
+ /**
130
+ * Run the Unity Editor with the specified command line arguments.
131
+ * @param command The command containing arguments and optional project path.
132
+ * @throws Will throw an error if the Unity Editor fails to start or exits with a non-zero code.
133
+ */
130
134
  async Run(command) {
131
135
  let isCancelled = false;
132
- const onCancel = async () => {
136
+ let exitCode = 1;
137
+ let procInfo = null;
138
+ let logTail = null;
139
+ let unityProcess;
140
+ async function tryKillEditorProcesses() {
141
+ try {
142
+ if (procInfo) {
143
+ await (0, utilities_1.KillProcess)(procInfo);
144
+ await (0, utilities_1.KillChildProcesses)(procInfo);
145
+ }
146
+ }
147
+ catch (error) {
148
+ logging_1.Logger.instance.error(`Failed to kill Unity process: ${error}`);
149
+ }
150
+ }
151
+ function onCancel() {
133
152
  isCancelled = true;
134
- await this.tryKillEditorProcess();
135
- };
136
- process.once('SIGINT', onCancel);
137
- process.once('SIGTERM', onCancel);
138
- let exitCode;
153
+ void tryKillEditorProcesses();
154
+ }
139
155
  try {
156
+ if (!command.args || command.args.length === 0) {
157
+ throw Error('No command arguments provided for Unity execution');
158
+ }
159
+ if (!command.args.includes(`-automated`)) {
160
+ command.args.push(`-automated`);
161
+ }
162
+ if (!command.args.includes(`-batchmode`)) {
163
+ command.args.push(`-batchmode`);
164
+ }
165
+ if (this.autoAddNoGraphics &&
166
+ !command.args.includes(`-nographics`) &&
167
+ !command.args.includes(`-force-graphics`)) {
168
+ command.args.push(`-nographics`);
169
+ }
170
+ if (!command.args.includes('-logFile')) {
171
+ command.args.push('-logFile', this.GenerateLogFilePath(command.projectPath));
172
+ }
173
+ const logPath = (0, utilities_1.GetArgumentValueAsString)('-logFile', command.args);
140
174
  const commandStr = `\x1b[34m${this.editorPath} ${command.args.join(' ')}\x1b[0m`;
141
175
  this.logger.startGroup(commandStr);
142
- exitCode = await this.exec(command, pInfo => { this.procInfo = pInfo; });
143
- }
144
- catch (error) {
145
- if (error instanceof Error) {
146
- this.logger.error(error.toString());
176
+ if (process.platform === 'linux' && !command.args.includes('-nographics')) {
177
+ unityProcess = (0, child_process_1.spawn)('xvfb-run', [this.editorPath, ...command.args], {
178
+ stdio: ['ignore', 'ignore', 'ignore'],
179
+ env: {
180
+ ...process.env,
181
+ DISPLAY: ':99',
182
+ UNITY_THISISABUILDMACHINE: '1'
183
+ }
184
+ });
147
185
  }
148
- if (!exitCode) {
149
- exitCode = 1;
186
+ else {
187
+ unityProcess = (0, child_process_1.spawn)(this.editorPath, command.args, {
188
+ stdio: ['ignore', 'ignore', 'ignore'],
189
+ env: {
190
+ ...process.env,
191
+ UNITY_THISISABUILDMACHINE: '1'
192
+ }
193
+ });
194
+ }
195
+ if (!unityProcess?.pid) {
196
+ throw new Error('Failed to start Unity process!');
197
+ }
198
+ process.once('SIGINT', onCancel);
199
+ process.once('SIGTERM', onCancel);
200
+ procInfo = { pid: unityProcess.pid, ppid: process.pid, name: this.editorPath };
201
+ this.logger.debug(`Unity process started with pid: ${procInfo.pid}`);
202
+ const timeout = 10000; // 10 seconds
203
+ await (0, utilities_1.WaitForFileToBeCreatedAndReadable)(logPath, timeout);
204
+ logTail = (0, utilities_1.TailLogFile)(logPath);
205
+ exitCode = await new Promise((resolve, reject) => {
206
+ unityProcess.on('close', (code) => {
207
+ setTimeout(() => {
208
+ logTail?.stopLogTail();
209
+ resolve(code === null ? 1 : code);
210
+ }, timeout);
211
+ });
212
+ unityProcess.on('error', (error) => {
213
+ setTimeout(() => {
214
+ logTail?.stopLogTail();
215
+ reject(error);
216
+ }, timeout);
217
+ });
218
+ });
219
+ // Wait for log tailing to finish writing remaining content
220
+ if (logTail && logTail.tailPromise) {
221
+ try {
222
+ await logTail.tailPromise;
223
+ }
224
+ catch (error) {
225
+ this.logger.error(`Error occurred while tailing log file: ${error}`);
226
+ }
150
227
  }
151
228
  }
152
229
  finally {
@@ -154,13 +231,18 @@ class UnityEditor {
154
231
  process.removeListener('SIGTERM', onCancel);
155
232
  this.logger.endGroup();
156
233
  if (!isCancelled) {
157
- await this.tryKillEditorProcess();
234
+ await tryKillEditorProcesses();
158
235
  if (exitCode !== 0) {
159
236
  throw Error(`Unity failed with exit code ${exitCode}`);
160
237
  }
161
238
  }
162
239
  }
163
240
  }
241
+ /**
242
+ * Get or create the Logs directory within the Unity project or current working directory.
243
+ * @param projectPath The path to the Unity project. If undefined, uses the current working directory.
244
+ * @returns The path to the Logs directory.
245
+ */
164
246
  GetLogsDirectory(projectPath) {
165
247
  const logsDir = projectPath !== undefined
166
248
  ? path.join(projectPath, 'Builds', 'Logs')
@@ -174,137 +256,22 @@ class UnityEditor {
174
256
  }
175
257
  return logsDir;
176
258
  }
259
+ /**
260
+ * Generate a log file path with an optional prefix in the Logs directory.
261
+ * @param projectPath The path to the Unity project. If undefined, uses the current working directory.
262
+ * @param prefix An optional prefix for the log file name.
263
+ * @returns The generated log file path.
264
+ */
177
265
  GenerateLogFilePath(projectPath, prefix = undefined) {
178
266
  const logsDir = this.GetLogsDirectory(projectPath);
179
267
  const timestamp = new Date().toISOString().replace(/[-:]/g, ``).replace(/\..+/, ``);
180
268
  return path.join(logsDir, `${prefix ? prefix + '-' : ''}Unity-${timestamp}.log`);
181
269
  }
182
- async exec(command, onPid) {
183
- if (!command.args || command.args.length === 0) {
184
- throw Error('No command arguments provided for Unity execution');
185
- }
186
- if (!command.args.includes(`-automated`)) {
187
- command.args.push(`-automated`);
188
- }
189
- if (!command.args.includes(`-batchmode`)) {
190
- command.args.push(`-batchmode`);
191
- }
192
- if (this.autoAddNoGraphics &&
193
- !command.args.includes(`-nographics`) &&
194
- !command.args.includes(`-force-graphics`)) {
195
- command.args.push(`-nographics`);
196
- }
197
- if (!command.args.includes('-logFile')) {
198
- command.args.push('-logFile', this.GenerateLogFilePath(command.projectPath));
199
- }
200
- const logPath = (0, utilities_1.GetArgumentValueAsString)('-logFile', command.args);
201
- let unityProcess;
202
- if (process.platform === 'linux' && !command.args.includes('-nographics')) {
203
- unityProcess = (0, child_process_1.spawn)('xvfb-run', [this.editorPath, ...command.args], {
204
- stdio: ['ignore', 'ignore', 'ignore'],
205
- detached: true,
206
- env: {
207
- ...process.env,
208
- DISPLAY: ':99',
209
- UNITY_THISISABUILDMACHINE: '1'
210
- }
211
- });
212
- }
213
- else {
214
- unityProcess = (0, child_process_1.spawn)(this.editorPath, command.args, {
215
- stdio: ['ignore', 'ignore', 'ignore'],
216
- detached: true,
217
- env: {
218
- ...process.env,
219
- UNITY_THISISABUILDMACHINE: '1'
220
- }
221
- });
222
- }
223
- const processId = unityProcess.pid;
224
- if (!processId) {
225
- throw new Error('Failed to start Unity process!');
226
- }
227
- onPid({ pid: processId, ppid: process.pid, name: this.editorPath });
228
- this.logger.debug(`Unity process started with pid: ${processId}`);
229
- const logPollingInterval = 100; // milliseconds
230
- // Wait for log file to appear
231
- while (!fs.existsSync(logPath)) {
232
- await new Promise(res => setTimeout(res, logPollingInterval));
233
- }
234
- // Start tailing the log file
235
- let lastSize = 0;
236
- let logEnded = false;
237
- const tailLog = async () => {
238
- while (!logEnded) {
239
- try {
240
- const stats = fs.statSync(logPath);
241
- if (stats.size > lastSize) {
242
- const fd = fs.openSync(logPath, 'r');
243
- const buffer = Buffer.alloc(stats.size - lastSize);
244
- fs.readSync(fd, buffer, 0, buffer.length, lastSize);
245
- process.stdout.write(buffer.toString('utf8'));
246
- fs.closeSync(fd);
247
- lastSize = stats.size;
248
- }
249
- }
250
- catch (error) {
251
- // ignore read errors
252
- }
253
- await new Promise(res => setTimeout(res, logPollingInterval));
254
- }
255
- // Write a newline at the end of the log tail
256
- // prevents appending logs from being printed on the same line
257
- process.stdout.write('\n');
258
- };
259
- const timeout = 10000; // 10 seconds
260
- // Start log tailing in background
261
- const tailPromise = tailLog();
262
- const exitCode = await new Promise((resolve, reject) => {
263
- unityProcess.on('exit', (code) => {
264
- setTimeout(() => {
265
- logEnded = true;
266
- resolve(code ?? 1);
267
- }, timeout);
268
- });
269
- unityProcess.on('error', (error) => {
270
- setTimeout(() => {
271
- logEnded = true;
272
- reject(error);
273
- }, timeout);
274
- });
275
- });
276
- // Wait for log tailing to finish
277
- await tailPromise;
278
- // Wait for log file to be unlocked
279
- const start = Date.now();
280
- let fileLocked = true;
281
- while (fileLocked && Date.now() - start < timeout) {
282
- try {
283
- if (fs.existsSync(logPath)) {
284
- const fd = fs.openSync(logPath, 'r+');
285
- fs.closeSync(fd);
286
- fileLocked = false;
287
- }
288
- else {
289
- fileLocked = false;
290
- }
291
- }
292
- catch {
293
- fileLocked = true;
294
- await new Promise(r => setTimeout(r, logPollingInterval));
295
- }
296
- }
297
- return exitCode;
298
- }
299
- async tryKillEditorProcess() {
300
- if (this.procInfo) {
301
- await (0, utilities_1.TryKillProcess)(this.procInfo);
302
- await (0, utilities_1.KillChildProcesses)(this.procInfo);
303
- }
304
- else {
305
- this.logger.debug('No Unity process info available to kill.');
306
- }
307
- }
270
+ /**
271
+ * Get the root path of the Unity Editor installation based on the provided editor path.
272
+ * @param editorPath The path to the Unity Editor executable.
273
+ * @returns The root path of the Unity Editor installation.
274
+ */
308
275
  static GetEditorRootPath(editorPath) {
309
276
  let editorRootPath = editorPath;
310
277
  switch (process.platform) {
@@ -1 +1 @@
1
- {"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../src/unity-editor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"unity-editor.js","sourceRoot":"","sources":["../src/unity-editor.ts"],"names":[],"mappings":"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"}
package/dist/unity-hub.js CHANGED
@@ -110,58 +110,70 @@ class UnityHub {
110
110
  ];
111
111
  try {
112
112
  exitCode = await new Promise((resolve, reject) => {
113
- let tasksComplete = false;
113
+ let isSettled = false; // Has the promise been settled (resolved or rejected)?
114
+ let isHubTaskComplete = false; // Has the Unity Hub tasks completed successfully?
115
+ let lineBuffer = ''; // Buffer for incomplete lines
114
116
  const tasksCompleteMessage = 'All Tasks Completed Successfully.';
115
117
  const child = (0, child_process_1.spawn)(executable, execArgs, {
116
- stdio: ['ignore', 'pipe', 'pipe'],
117
- detached: process.platform !== 'win32'
118
+ stdio: ['ignore', 'pipe', 'pipe']
118
119
  });
119
120
  const sigintHandler = () => child.kill('SIGINT');
120
121
  const sigtermHandler = () => child.kill('SIGTERM');
121
122
  process.once('SIGINT', sigintHandler);
122
123
  process.once('SIGTERM', sigtermHandler);
124
+ let hasCleanedUpListeners = false;
123
125
  function removeListeners() {
126
+ if (hasCleanedUpListeners) {
127
+ return;
128
+ }
129
+ hasCleanedUpListeners = true;
124
130
  process.removeListener('SIGINT', sigintHandler);
125
131
  process.removeListener('SIGTERM', sigtermHandler);
126
132
  }
127
- let forceCloseTimeout;
128
133
  function processOutput(data) {
129
134
  try {
130
135
  const chunk = data.toString();
131
- let outputLines = [];
132
- const lines = chunk.split('\n');
133
- for (const line of lines) {
134
- if (line.trim().length === 0 ||
135
- ignoredLines.some(ignored => line.includes(ignored))) {
136
- continue;
136
+ const fullChunk = lineBuffer + chunk;
137
+ const lines = fullChunk.split('\n') // split by newline
138
+ .map(line => line.replace(/\r$/, '')) // remove trailing carriage return
139
+ .filter(line => line.length > 0); // filter out empty lines
140
+ if (!chunk.endsWith('\n')) {
141
+ lineBuffer = lines.pop() || '';
142
+ }
143
+ else {
144
+ lineBuffer = '';
145
+ }
146
+ const outputLines = lines.filter(line => !ignoredLines.some(ignored => line.includes(ignored)));
147
+ if (outputLines.includes(tasksCompleteMessage)) {
148
+ isHubTaskComplete = true;
149
+ if (child?.pid) {
150
+ try {
151
+ child.kill('SIGTERM');
152
+ setTimeout(() => {
153
+ try {
154
+ if (child?.pid && !child.killed) {
155
+ child.kill('SIGKILL');
156
+ }
157
+ }
158
+ catch {
159
+ // Ignore, process may have already exited
160
+ }
161
+ }, 1000);
162
+ }
163
+ catch {
164
+ // Ignore, process may have already exited
165
+ }
166
+ finally {
167
+ settle(0);
168
+ }
137
169
  }
138
- outputLines.push(line);
170
+ }
171
+ for (const line of outputLines) {
172
+ output += `${line}\n`;
139
173
  if (!options.silent) {
140
174
  process.stdout.write(`${line}\n`);
141
175
  }
142
176
  }
143
- const outputLine = outputLines.join('\n');
144
- output += `${outputLine}\n`;
145
- if (outputLine.includes(tasksCompleteMessage)) {
146
- tasksComplete = true;
147
- if (child?.pid) {
148
- logging_1.Logger.instance.debug(`Unity Hub reported all tasks completed, terminating process...`);
149
- const childProcInfo = { pid: child.pid, name: child.spawnfile, ppid: process.pid };
150
- (0, utilities_1.KillChildProcesses)(childProcInfo).then(async () => {
151
- const killedPid = await (0, utilities_1.TryKillProcess)(childProcInfo, 'SIGTERM');
152
- if (!killedPid) {
153
- logging_1.Logger.instance.error(`Failed to terminate Unity Hub process!`);
154
- }
155
- // In case the process doesn't close itself, force kill after 5 seconds
156
- forceCloseTimeout = setTimeout(() => {
157
- logging_1.Logger.instance.info(`Force closing Unity Hub process after timeout...`);
158
- (0, utilities_1.TryKillProcess)(childProcInfo, 'SIGKILL');
159
- removeListeners();
160
- resolve(0);
161
- }, 5000);
162
- });
163
- }
164
- }
165
177
  }
166
178
  catch (error) {
167
179
  if (error.code !== 'EPIPE') {
@@ -169,27 +181,54 @@ class UnityHub {
169
181
  }
170
182
  }
171
183
  }
172
- child.stdout.on('data', processOutput);
173
- child.stderr.on('data', processOutput);
174
- child.on('error', (error) => {
175
- if (forceCloseTimeout) {
176
- clearTimeout(forceCloseTimeout);
184
+ function flushOutput() {
185
+ try {
186
+ if (lineBuffer.length > 0) {
187
+ const lines = lineBuffer.split('\n') // split by newline
188
+ .map(line => line.replace(/\r$/, '')) // remove trailing carriage return
189
+ .filter(line => line.length > 0); // filter out empty lines
190
+ lineBuffer = '';
191
+ const outputLines = lines.filter(line => !ignoredLines.some(ignored => line.includes(ignored)));
192
+ if (outputLines.includes(tasksCompleteMessage)) {
193
+ isHubTaskComplete = true;
194
+ }
195
+ for (const line of outputLines) {
196
+ output += `${line}\n`;
197
+ if (!options.silent) {
198
+ process.stdout.write(`${line}\n`);
199
+ }
200
+ }
201
+ }
177
202
  }
178
- removeListeners();
179
- reject(error);
180
- });
181
- child.on('close', (code) => {
182
- if (forceCloseTimeout) {
183
- clearTimeout(forceCloseTimeout);
203
+ catch (error) {
204
+ if (error.code !== 'EPIPE') {
205
+ logging_1.Logger.instance.error(`Failed to process buffered output: ${error}`);
206
+ }
184
207
  }
208
+ }
209
+ function settle(code) {
210
+ if (isSettled) {
211
+ return;
212
+ }
213
+ isSettled = true;
185
214
  removeListeners();
186
- if (tasksComplete) {
215
+ flushOutput();
216
+ if (isHubTaskComplete) {
187
217
  resolve(0);
188
218
  }
189
219
  else {
190
220
  resolve(code === null ? 0 : code);
191
221
  }
222
+ }
223
+ child.stdout.on('data', processOutput);
224
+ child.stderr.on('data', processOutput);
225
+ child.on('error', (error) => {
226
+ isSettled = true;
227
+ removeListeners();
228
+ flushOutput();
229
+ reject(error);
192
230
  });
231
+ child.on('close', settle);
193
232
  });
194
233
  }
195
234
  finally {
@@ -706,6 +745,7 @@ done
706
745
  }
707
746
  }
708
747
  const request = {
748
+ url: '/unity/editor/release/v1/releases',
709
749
  query: {
710
750
  version: version,
711
751
  architecture: [unityVersion.architecture],
@@ -714,7 +754,7 @@ done
714
754
  }
715
755
  };
716
756
  this.logger.debug(`Get Unity Release: ${JSON.stringify(request, null, 2)}`);
717
- const { data, error } = await releasesClient.api.ReleaseService.getUnityReleases(request);
757
+ const { data, error } = await releasesClient.api.Release.getUnityReleases(request);
718
758
  if (error) {
719
759
  throw new Error(`Failed to get Unity releases: ${JSON.stringify(error, null, 2)}`);
720
760
  }