diff --git a/__tests__/canary-installer.test.ts b/__tests__/canary-installer.test.ts index 93daf17c..18c4bc7e 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 ba26e64b..5cd8d801 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -39,6 +39,8 @@ describe('main tests', () => { let setupNodeJsSpy: jest.SpyInstance; + let processExitSpy: jest.SpyInstance; + beforeEach(() => { inputs = {}; @@ -79,6 +81,10 @@ describe('main tests', () => { setupNodeJsSpy = jest.spyOn(OfficialBuilds.prototype, 'setupNodeJs'); setupNodeJsSpy.mockImplementation(() => {}); + + processExitSpy = jest + .spyOn(process, 'exit') + .mockImplementation((() => {}) as () => never); }); afterEach(() => { @@ -240,6 +246,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 b95a42d2..6d09567d 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 fa46c35e..954de42f 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 e159044b..5f51f85b 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 48d93766..08931f3f 100644 --- a/dist/setup/index.js +++ b/dist/setup/index.js @@ -99885,6 +99885,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 4afbd293..99a27213 100644 --- a/src/main.ts +++ b/src/main.ts @@ -98,6 +98,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 {