diff --git a/.github/workflows/lint_on_push_or_pull.yml b/.github/workflows/lint_on_push_or_pull.yml
index 67e3168827b2ae1679afb3305a90243b5838e7ab..576725646009a403f4dfccdd651a2378f17f7667 100644
--- a/.github/workflows/lint_on_push_or_pull.yml
+++ b/.github/workflows/lint_on_push_or_pull.yml
@@ -12,14 +12,14 @@ jobs:
   lint:
     runs-on: ubuntu-latest
     steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-
-      - name: Install pnpm
-        run: npm install -g pnpm
-
+      - uses: actions/checkout@v4
+      - uses: pnpm/action-setup@v2
+      - name: Setup Node.js
+        uses: actions/setup-node@v4
+        with:
+          node-version-file: '.nvmrc'
+          cache: "pnpm"
       - name: Install dependencies
         run: pnpm install
-
       - name: Run lint
         run: pnpm run lint
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 868670f1516326c92cdbc4d061c1749234a14170..4436b635736d0e77f05882ae0189d0a56e3567bd 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -7,18 +7,14 @@ jobs:
     runs-on: ubuntu-latest
 
     steps:
-      - name: Checkout code
-        uses: actions/checkout@v2
-
+      - uses: actions/checkout@v4
+      - uses: pnpm/action-setup@v2
       - name: Setup Node.js
-        uses: actions/setup-node@v2
+        uses: actions/setup-node@v4
         with:
-          node-version: "18"
-
+          node-version-file: '.nvmrc'
+          cache: "pnpm"
       - name: Install dependencies
-        run: |
-          npm i -g pnpm
-          pnpm install
-
+        run: pnpm install
       - name: Run tests
         run: pnpm run test
diff --git a/.nvmrc b/.nvmrc
new file mode 100644
index 0000000000000000000000000000000000000000..3c032078a4a21c5c51d3c93d91717c1dabbb8cd0
--- /dev/null
+++ b/.nvmrc
@@ -0,0 +1 @@
+18