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; process.exitCode = 0;
} catch (e) { } catch (e) {
console.error(e.stack || e.message); 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 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 * 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 * found in the LICENSE file at https://angular.io/license
*/ */
import {NGCC_TIMED_OUT_EXIT_CODE} from '../constants';
import {Logger} from '../logging/logger'; import {Logger} from '../logging/logger';
import {LockFile} from './lock_file'; 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, * AsyncLocker is used to prevent more than one instance of ngcc executing at the same time,
* when being called in an asynchronous context. * 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 // If we fall out of the loop then we ran out of rety attempts
throw new Error( throw new TimeoutError(
`Timed out waiting ${ `Timed out waiting ${
this.retryAttempts * this.retryDelay / this.retryAttempts * this.retryDelay /
1000}s for another ngcc process, with id ${pid}, to complete.\n` + 1000}s for another ngcc process, with id ${pid}, to complete.\n` +