name: Setup
description: Setup Node.js and install dependencies

runs:
  using: composite
  steps:
    - name: Setup Node.js
      uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0
      with:
        node-version-file: .nvmrc

    - name: Restore dependencies
      id: yarn-cache
      uses: actions/cache/restore@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
      with:
        path: |
          **/node_modules
          .yarn/install-state.gz
        key: ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}-${{ hashFiles('**/package.json', '!node_modules/**') }}
        restore-keys: |
          ${{ runner.os }}-yarn-${{ hashFiles('yarn.lock') }}
          ${{ runner.os }}-yarn-

    - name: Install dependencies
      if: steps.yarn-cache.outputs.cache-hit != 'true'
      run: yarn install --immutable
      shell: bash

    - name: Cache dependencies
      if: steps.yarn-cache.outputs.cache-hit != 'true'
      uses: actions/cache/save@5a3ec84eff668545956fd18022155c47e93e2684 # v4.2.3
      with:
        path: |
          **/node_modules
          .yarn/install-state.gz
        key: ${{ steps.yarn-cache.outputs.cache-primary-key }}
