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 b5724875..6af32ec0 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -35,6 +35,8 @@ describe('main tests', () => { let setupNodeJsSpy: jest.SpyInstance; + let processExitSpy: jest.SpyInstance; + beforeEach(() => { inputs = {}; @@ -72,6 +74,10 @@ describe('main tests', () => { setupNodeJsSpy = jest.spyOn(OfficialBuilds.prototype, 'setupNodeJs'); setupNodeJsSpy.mockImplementation(() => {}); + + processExitSpy = jest + .spyOn(process, 'exit') + .mockImplementation((() => {}) as () => never); }); afterEach(() => { @@ -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', () => { 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 2d36c19c..4f6bf414 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 0512f3a7..6a837fae 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -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; diff --git a/src/main.ts b/src/main.ts index ac051766..e4594092 100644 --- a/src/main.ts +++ b/src/main.ts @@ -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 {