mirror of
https://github.com/actions/setup-node.git
synced 2026-03-07 06:51:46 +08:00
Compare commits
3 Commits
7153eca1f6
...
88452a41d0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
88452a41d0 | ||
|
|
dda4788290 | ||
|
|
7d1c5630d8 |
@ -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');
|
||||
|
||||
@ -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', () => {
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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');
|
||||
|
||||
@ -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');
|
||||
|
||||
3
dist/setup/index.js
vendored
3
dist/setup/index.js
vendored
@ -99812,6 +99812,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;
|
||||
|
||||
@ -300,6 +300,35 @@ steps:
|
||||
- run: npm test
|
||||
```
|
||||
|
||||
**Restore-Only Cache**
|
||||
|
||||
```yaml
|
||||
## In some workflows, you may want to restore a cache without saving it. This can help reduce cache writes and storage usage in workflows that only need to read from cache
|
||||
jobs:
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
# Restore Node.js modules cache (restore-only)
|
||||
- name: Restore Node modules cache
|
||||
uses: actions/cache@v4
|
||||
id: cache-node-modules
|
||||
with:
|
||||
path: ~/.npm
|
||||
key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
|
||||
restore-keys: |
|
||||
${{ runner.os }}-node-
|
||||
# Setup Node.js
|
||||
- name: Setup Node.js
|
||||
uses: actions/setup-node@v6
|
||||
with:
|
||||
node-version: '24'
|
||||
# Install dependencies
|
||||
- run: npm install
|
||||
```
|
||||
|
||||
> For more details related to cache scenarios, please refer [Node – npm](https://github.com/actions/cache/blob/main/examples.md#node---npm).
|
||||
|
||||
## Multiple Operating Systems and Architectures
|
||||
|
||||
```yaml
|
||||
|
||||
@ -99,6 +99,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 {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user