🐱

GitHub Actionsでpnpmを使う

2023/04/13に公開

この記事を書くきっかけ

Playwrightは、pnpmによるインストール方法も公開しています。

試しに下記を実行すると、.github/workflows/playwright.ymlも自動で作成してくれました。初心者には優しくて、とてもありがたいです。

pnpm dlx create-playwright

ところが、この状態で出来上がったものをそのまま使おうとしたら、Error: Process completed with exit code 127.が出て失敗してしまいました。

エラーの原因を調べてみて、対策が分かったので、記録として残すことにしました。

問題となったファイル

playwright.yml
name: Playwright Tests
on:
  push:
    branches: [ main, master ]
  pull_request:
    branches: [ main, master ]
jobs:
  test:
    timeout-minutes: 60
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-node@v3
      with:
        node-version: 16
    - name: Install dependencies
      run: pnpm install
    - name: Install Playwright Browsers
      run: pnpm exec playwright install --with-deps
    - name: Run Playwright tests
      run: pnpm exec playwright test
    - uses: actions/upload-artifact@v3
      if: always()
      with:
        name: playwright-report
        path: playwright-report/
        retention-days: 30

問題点

実行ログを確認してみると、pnpm: command not foundが確認できました。

つまり、コマンドとして認識されていない状態で、pnpm installを実行していたようです。

解決

https://github.com/pnpm/action-setup

こちらのUsage exampleからコピペしてみたところ、無事に動きました。

playwright.yml
 name: Playwright Tests
 on:
   push:
     branches: [ main, master ]
   pull_request:
     branches: [ main, master ]
 jobs:
   test:
     timeout-minutes: 60
     runs-on: ubuntu-latest
     steps:
     - name: Checkout
       uses: actions/checkout@v3
     - name: Install Node.js
       uses: actions/setup-node@v3
       with:
         node-version: 16
+    - uses: pnpm/action-setup@v2
+      name: Install pnpm
+      id: pnpm-install
+      with:
+        version: 7
+        run_install: false
+    - name: Get pnpm store directory
+      id: pnpm-cache
+      shell: bash
+      run: |
+        echo "STORE_PATH=$(pnpm store path)" >> $GITHUB_OUTPUT
+    - uses: actions/cache@v3
+      name: Setup pnpm cache
+      with:
+        path: ${{ steps.pnpm-cache.outputs.STORE_PATH }}
+        key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+        restore-keys: |
+          ${{ runner.os }}-pnpm-store-
     - name: Install dependencies
       run: pnpm install
     - name: Install Playwright Browsers
       run: pnpm exec playwright install --with-deps
     - name: Run Playwright tests
       run: pnpm exec playwright test
     - uses: actions/upload-artifact@v3
       if: always()
       with:
         name: playwright-report
         path: playwright-report/
         retention-days: 30

まとめ

pnpmを使いたいときは、pnpm/action-setup@v2を忘れずに!

Discussion