diff --git a/.github/workflows/e2e-cache.yml b/.github/workflows/e2e-cache.yml
index 7de3a1bd..a0f20639 100644
--- a/.github/workflows/e2e-cache.yml
+++ b/.github/workflows/e2e-cache.yml
@@ -93,7 +93,7 @@ jobs:
           node-version: ${{ matrix.node-version }}
           cache: 'yarn'
       - name: Install dependencies
-        run: yarn install
+        run: yarn install --ignore-engines
       - name: Verify node and yarn
         run: __tests__/verify-node.sh "${{ matrix.node-version }}"
         shell: bash
diff --git a/README.md b/README.md
index 79376144..20d23405 100644
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ See [action.yml](action.yml)
 
 <!-- start usage -->
 ```yaml
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     # Version Spec of the version to use in SemVer notation.
     # It also emits such aliases as lts, latest, nightly and canary builds
@@ -84,7 +84,7 @@ See [action.yml](action.yml)
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: 18
 - run: npm ci
@@ -133,7 +133,7 @@ See the examples of using cache for `yarn`/`pnpm` and `cache-dependency-path` in
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: 16
     cache: 'npm'
@@ -146,7 +146,7 @@ steps:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: 16
     cache: 'npm'
@@ -168,7 +168,7 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Setup node
-        uses: actions/setup-node@v3
+        uses: actions/setup-node@v4
         with:
           node-version: ${{ matrix.node }}
       - run: npm ci
@@ -182,7 +182,7 @@ jobs:
 To get a higher rate limit, you can [generate a personal access token on github.com](https://github.com/settings/tokens/new) and pass it as the `token` input for the action:
 
 ```yaml
-uses: actions/setup-node@v3
+uses: actions/setup-node@v4
 with:
   token: ${{ secrets.GH_DOTCOM_TOKEN }}
   node-version: 16
diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md
index bd22bc41..079b8bfa 100644
--- a/docs/advanced-usage.md
+++ b/docs/advanced-usage.md
@@ -46,7 +46,7 @@ If `check-latest` is set to `true`, the action first checks if the cached versio
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '16'
     check-latest: true
@@ -64,7 +64,7 @@ See [supported version syntax](https://github.com/actions/setup-node#supported-v
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version-file: '.nvmrc'
 - run: npm ci
@@ -96,7 +96,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '14'
           architecture: 'x64' # optional, x64 or x86. If not specified, x64 will be used by default
@@ -117,7 +117,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '20.0.0-v8-canary' # it will install the latest v8 canary release for node 20.0.0
       - run: npm ci
@@ -132,7 +132,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '20-v8-canary' # it will install the latest v8 canary release for node 20
       - run: npm ci
@@ -148,7 +148,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: 'v20.1.1-v8-canary20221103f7e2421e91'
       - run: npm ci
@@ -168,7 +168,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '16-nightly' # it will install the latest nightly release for node 16
       - run: npm ci
@@ -184,7 +184,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '16.0.0-nightly' # it will install the latest nightly release for node 16.0.0
       - run: npm ci
@@ -200,7 +200,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '16.0.0-nightly20210420a0261d231c'
       - run: npm ci
@@ -218,7 +218,7 @@ jobs:
     name: Node sample
     steps:
       - uses: actions/checkout@v4
-      - uses: actions/setup-node@v3
+      - uses: actions/setup-node@v4
         with:
           node-version: '16.0.0-rc.1'
       - run: npm ci
@@ -235,7 +235,7 @@ Yarn caching handles both yarn versions: 1 or 2.
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14'
     cache: 'yarn'
@@ -257,7 +257,7 @@ steps:
 - uses: pnpm/action-setup@v2
   with:
     version: 6.32.9
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14'
     cache: 'pnpm'
@@ -273,7 +273,7 @@ steps:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14'
     cache: 'npm'
@@ -286,7 +286,7 @@ steps:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14'
     cache: 'npm'
@@ -324,7 +324,7 @@ jobs:
     steps:
       - uses: actions/checkout@v4
       - name: Setup node
-        uses: actions/setup-node@v3
+        uses: actions/setup-node@v4
         with:
           node-version: ${{ matrix.node_version }}
           architecture: ${{ matrix.architecture }}
@@ -336,7 +336,7 @@ jobs:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14.x'
     registry-url: 'https://registry.npmjs.org'
@@ -344,7 +344,7 @@ steps:
 - run: npm publish
   env:
     NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     registry-url: 'https://npm.pkg.github.com'
 - run: npm publish
@@ -356,7 +356,7 @@ steps:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14.x'
     registry-url: <registry url>
@@ -364,7 +364,7 @@ steps:
 - run: yarn publish
   env:
     NODE_AUTH_TOKEN: ${{ secrets.YARN_TOKEN }}
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     registry-url: 'https://npm.pkg.github.com'
 - run: yarn publish
@@ -376,7 +376,7 @@ steps:
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14.x'
     registry-url: 'https://registry.npmjs.org'
@@ -396,7 +396,7 @@ Below you can find a sample "Setup .yarnrc.yml" step, that is going to allow you
 ```yaml
 steps:
 - uses: actions/checkout@v4
-- uses: actions/setup-node@v3
+- uses: actions/setup-node@v4
   with:
     node-version: '14.x'
 - name: Setup .yarnrc.yml