Migrate from Yarn Classic to pnpm #4949
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: JS unit tests for Renderer package | |
| on: | |
| push: | |
| branches: | |
| - 'master' | |
| # Always trigger on master; docs-only detection handles skipping heavy jobs | |
| pull_request: | |
| paths-ignore: | |
| - '**.md' | |
| - 'docs/**' | |
| - 'react_on_rails/lib/**' | |
| - 'react_on_rails/spec/react_on_rails/**' | |
| - 'react_on_rails_pro/**' | |
| workflow_dispatch: | |
| inputs: | |
| force_run: | |
| description: 'Force run all jobs (bypass detect-changes)' | |
| required: false | |
| type: boolean | |
| default: false | |
| jobs: | |
| detect-changes: | |
| permissions: | |
| contents: read | |
| actions: read | |
| runs-on: ubuntu-22.04 | |
| outputs: | |
| docs_only: ${{ steps.detect.outputs.docs_only }} | |
| run_lint: ${{ steps.detect.outputs.run_lint }} | |
| run_js_tests: ${{ steps.detect.outputs.run_js_tests }} | |
| run_ruby_tests: ${{ steps.detect.outputs.run_ruby_tests }} | |
| run_dummy_tests: ${{ steps.detect.outputs.run_dummy_tests }} | |
| run_generators: ${{ steps.detect.outputs.run_generators }} | |
| has_full_ci_label: ${{ steps.check-label.outputs.result }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| # Fetch enough history for change detection (50 commits is usually sufficient for PRs) | |
| fetch-depth: 50 | |
| persist-credentials: false | |
| - name: Check for full-ci label | |
| id: check-label | |
| uses: ./.github/actions/check-full-ci-label | |
| - name: Detect relevant changes | |
| id: detect | |
| run: | | |
| # If force_run is true OR full-ci label is present, run everything | |
| if [ "${{ inputs.force_run }}" = "true" ] || [ "${{ steps.check-label.outputs.result }}" = "true" ]; then | |
| echo "run_lint=true" >> "$GITHUB_OUTPUT" | |
| echo "run_js_tests=true" >> "$GITHUB_OUTPUT" | |
| echo "run_ruby_tests=true" >> "$GITHUB_OUTPUT" | |
| echo "run_dummy_tests=true" >> "$GITHUB_OUTPUT" | |
| echo "run_generators=true" >> "$GITHUB_OUTPUT" | |
| echo "docs_only=false" >> "$GITHUB_OUTPUT" | |
| exit 0 | |
| fi | |
| BASE_REF="${{ github.event.pull_request.base.sha || github.event.before || 'origin/master' }}" | |
| script/ci-changes-detector "$BASE_REF" | |
| shell: bash | |
| - name: Guard docs-only master pushes | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/master' | |
| uses: ./.github/actions/ensure-master-docs-safety | |
| with: | |
| docs-only: ${{ steps.detect.outputs.docs_only }} | |
| previous-sha: ${{ github.event.before }} | |
| build: | |
| needs: detect-changes | |
| # Run on master OR when JS tests needed on PR | |
| if: | | |
| !( | |
| github.event_name == 'push' && | |
| github.ref == 'refs/heads/master' && | |
| needs.detect-changes.outputs.docs_only == 'true' | |
| ) && ( | |
| github.ref == 'refs/heads/master' || | |
| needs.detect-changes.outputs.run_js_tests == 'true' | |
| ) | |
| strategy: | |
| matrix: | |
| include: | |
| # Always run: Latest Node version (fast feedback on PRs) | |
| - node-version: '22' | |
| # Master and full-ci label: Minimum supported Node version (full coverage) | |
| - node-version: '20' | |
| exclude: | |
| # Skip minimum dependency matrix on regular PRs (run only on master or with full-ci label) | |
| - node-version: ${{ github.event_name == 'pull_request' && github.ref != 'refs/heads/master' && needs.detect-changes.outputs.has_full_ci_label != 'true' && '20' || '' }} | |
| runs-on: ubuntu-22.04 | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| persist-credentials: false | |
| - name: Setup Node | |
| uses: ./.github/actions/setup-node-with-retry | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| - name: Setup pnpm | |
| uses: pnpm/action-setup@v4 | |
| - name: Get pnpm store directory | |
| shell: bash | |
| run: echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV | |
| - name: Setup pnpm cache | |
| uses: actions/cache@v4 | |
| with: | |
| path: ${{ env.STORE_PATH }} | |
| key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-pnpm-store- | |
| - name: Print system information | |
| run: | | |
| echo "Linux release: "; cat /etc/issue | |
| echo "Current user: "; whoami | |
| echo "Current directory: "; pwd | |
| echo "Node version: "; node -v | |
| echo "pnpm version: "; pnpm --version | |
| - name: run conversion script | |
| if: matrix.node-version == '20' | |
| run: script/convert | |
| - name: Install Node modules with pnpm for renderer package | |
| run: | | |
| pnpm install ${{ matrix.node-version == '22' && '--frozen-lockfile' || '' }} | |
| pnpm add -g yalc | |
| - name: Build Renderer package | |
| run: pnpm build | |
| - name: Run JS unit tests for Renderer package | |
| run: pnpm test |