fix(ngcc): provide a unique exit code for timeouts (#36838)

When ngcc fails due to a timeout waiting for another process
to complete, it was not failing with a unique exit code, so that it
was not possible to know if the process can be restarted; compared to
ngcc failing for some more fatal reason.

Now if ngcc exits because of a timeout, the exit code will be 177.

PR Close #36838
This commit is contained in:
Pete Bacon Darwin 2020-04-28 12:11:18 +01:00 committed by Alex Rickabaugh
parent ee435761fd
commit d805526659
3 changed files with 9 additions and 2 deletions

View File

@ -24,7 +24,7 @@ if (require.main === module) {
process.exitCode = 0;
} catch (e) {
console.error(e.stack || e.message);
process.exit(1);
process.exit(typeof e.code === 'number' ? e.code : 1);
}
})();
}

View File

@ -7,3 +7,4 @@
*/
export const IMPORT_PREFIX = 'ɵngcc';
export const NGCC_TIMED_OUT_EXIT_CODE = 177;

View File

@ -5,9 +5,15 @@
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
import {NGCC_TIMED_OUT_EXIT_CODE} from '../constants';
import {Logger} from '../logging/logger';
import {LockFile} from './lock_file';
class TimeoutError extends Error {
code = NGCC_TIMED_OUT_EXIT_CODE;
}
/**
* AsyncLocker is used to prevent more than one instance of ngcc executing at the same time,
* when being called in an asynchronous context.
@ -61,7 +67,7 @@ export class AsyncLocker {
}
}
// If we fall out of the loop then we ran out of rety attempts
throw new Error(
throw new TimeoutError(
`Timed out waiting ${
this.retryAttempts * this.retryDelay /
1000}s for another ngcc process, with id ${pid}, to complete.\n` +