diff --git a/__tests__/canary-installer.test.ts b/__tests__/canary-installer.test.ts index 6d141fc3..5d811236 100644 --- a/__tests__/canary-installer.test.ts +++ b/__tests__/canary-installer.test.ts @@ -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 @@ -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'); diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 501741a6..fc16aee5 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -38,6 +38,8 @@ describe('main tests', () => { let setupNodeJsSpy: jest.SpyInstance; + let processExitSpy: jest.SpyInstance; + beforeEach(() => { inputs = {}; @@ -76,6 +78,10 @@ describe('main tests', () => { setupNodeJsSpy = jest.spyOn(OfficialBuilds.prototype, 'setupNodeJs'); setupNodeJsSpy.mockImplementation(() => {}); + + processExitSpy = jest + .spyOn(process, 'exit') + .mockImplementation((() => {}) as () => never); }); afterEach(() => { @@ -237,6 +243,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', () => { diff --git a/__tests__/nightly-installer.test.ts b/__tests__/nightly-installer.test.ts index 87c43795..debd7e86 100644 --- a/__tests__/nightly-installer.test.ts +++ b/__tests__/nightly-installer.test.ts @@ -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 @@ -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'); diff --git a/__tests__/official-installer.test.ts b/__tests__/official-installer.test.ts index 2d8f17cf..7dc530b3 100644 --- a/__tests__/official-installer.test.ts +++ b/__tests__/official-installer.test.ts @@ -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 @@ -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'); diff --git a/__tests__/rc-installer.test.ts b/__tests__/rc-installer.test.ts index 736260a4..58b0a5ea 100644 --- a/__tests__/rc-installer.test.ts +++ b/__tests__/rc-installer.test.ts @@ -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 @@ -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'); diff --git a/dist/setup/index.js b/dist/setup/index.js index 832d1db3..4061d36f 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -94480,6 +94480,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; diff --git a/src/main.ts b/src/main.ts index c55c3b00..24db60ba 100644 --- a/src/main.ts +++ b/src/main.ts @@ -76,6 +76,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 {