Skip to content

Commit

Permalink
Explicitly exit the process to not wait for hanging promises
Browse files Browse the repository at this point in the history
  • Loading branch information
xiniria committed Nov 27, 2023
1 parent 5ef044f commit 4d55c51
Show file tree
Hide file tree
Showing 7 changed files with 35 additions and 0 deletions.
4 changes: 4 additions & 0 deletions __tests__/canary-installer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ describe('setup-node', () => {
let isCacheActionAvailable: jest.SpyInstance;
let getExecOutputSpy: jest.SpyInstance;
let getJsonSpy: jest.SpyInstance;
let processExitSpy: jest.SpyInstance;

beforeEach(() => {
// @actions/core
Expand All @@ -63,6 +64,9 @@ describe('setup-node', () => {
archSpy = jest.spyOn(osm, 'arch');
archSpy.mockImplementation(() => os['arch']);
execSpy = jest.spyOn(cp, 'execSync');
processExitSpy = jest
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);

// @actions/tool-cache
findSpy = jest.spyOn(tc, 'find');
Expand Down
12 changes: 12 additions & 0 deletions __tests__/main.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,8 @@ describe('main tests', () => {

let setupNodeJsSpy: jest.SpyInstance;

let processExitSpy: jest.SpyInstance;

beforeEach(() => {
inputs = {};

Expand Down Expand Up @@ -72,6 +74,10 @@ describe('main tests', () => {

setupNodeJsSpy = jest.spyOn(OfficialBuilds.prototype, 'setupNodeJs');
setupNodeJsSpy.mockImplementation(() => {});

processExitSpy = jest
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);
});

afterEach(() => {
Expand Down Expand Up @@ -257,6 +263,12 @@ describe('main tests', () => {
`::error::The specified node version file at: ${versionFilePath} does not exist${osm.EOL}`
);
});

it('should call process.exit() explicitly after running', async () => {
await main.run();

expect(processExitSpy).toHaveBeenCalled();
});
});

describe('cache on GHES', () => {
Expand Down
4 changes: 4 additions & 0 deletions __tests__/nightly-installer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ describe('setup-node', () => {
let isCacheActionAvailable: jest.SpyInstance;
let getExecOutputSpy: jest.SpyInstance;
let getJsonSpy: jest.SpyInstance;
let processExitSpy: jest.SpyInstance;

beforeEach(() => {
// @actions/core
Expand All @@ -64,6 +65,9 @@ describe('setup-node', () => {
archSpy = jest.spyOn(osm, 'arch');
archSpy.mockImplementation(() => os['arch']);
execSpy = jest.spyOn(cp, 'execSync');
processExitSpy = jest
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);

// @actions/tool-cache
findSpy = jest.spyOn(tc, 'find');
Expand Down
4 changes: 4 additions & 0 deletions __tests__/official-installer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ describe('setup-node', () => {
let isCacheActionAvailable: jest.SpyInstance;
let getExecOutputSpy: jest.SpyInstance;
let getJsonSpy: jest.SpyInstance;
let processExitSpy: jest.SpyInstance;

beforeEach(() => {
// @actions/core
Expand All @@ -63,6 +64,9 @@ describe('setup-node', () => {
archSpy = jest.spyOn(osm, 'arch');
archSpy.mockImplementation(() => os['arch']);
execSpy = jest.spyOn(cp, 'execSync');
processExitSpy = jest
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);

// @actions/tool-cache
findSpy = jest.spyOn(tc, 'find');
Expand Down
4 changes: 4 additions & 0 deletions __tests__/rc-installer.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ describe('setup-node', () => {
let isCacheActionAvailable: jest.SpyInstance;
let getExecOutputSpy: jest.SpyInstance;
let getJsonSpy: jest.SpyInstance;
let processExitSpy: jest.SpyInstance;

beforeEach(() => {
// @actions/core
Expand All @@ -58,6 +59,9 @@ describe('setup-node', () => {
archSpy = jest.spyOn(osm, 'arch');
archSpy.mockImplementation(() => os['arch']);
execSpy = jest.spyOn(cp, 'execSync');
processExitSpy = jest
.spyOn(process, 'exit')
.mockImplementation((() => {}) as () => never);

// @actions/tool-cache
findSpy = jest.spyOn(tc, 'find');
Expand Down
3 changes: 3 additions & 0 deletions dist/setup/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -93711,6 +93711,9 @@ function run() {
catch (err) {
core.setFailed(err.message);
}
// Explicit process.exit() to not wait for hanging promises,
// see https://github.com/actions/setup-node/issues/878
process.exit();
});
}
exports.run = run;
Expand Down
4 changes: 4 additions & 0 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,10 @@ export async function run() {
} catch (err) {
core.setFailed((err as Error).message);
}

// Explicit process.exit() to not wait for hanging promises,
// see https://github.com/actions/setup-node/issues/878
process.exit();
}

function resolveVersionInput(): string {
Expand Down

0 comments on commit 4d55c51

Please sign in to comment.