fix: bin_dest output points to self-updated pnpm, not bootstrap (#249) #541
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: Test Action | |
| on: | |
| - push | |
| - pull_request | |
| - workflow_dispatch | |
| jobs: | |
| test_default_inputs: | |
| name: Test with default inputs | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| pnpm: | |
| - 9.15.5 | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Run the action | |
| uses: ./ | |
| with: | |
| version: 9.15.5 | |
| - name: 'Test: which' | |
| run: which pnpm; which pnpx | |
| - name: 'Test: version' | |
| run: | | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [[ ! "${actual}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
| echo "ERROR: pnpm --version did not produce valid output" | |
| exit 1 | |
| fi | |
| shell: bash | |
| - name: 'Test: install in a fresh project' | |
| run: | | |
| mkdir /tmp/test-project | |
| cd /tmp/test-project | |
| pnpm init | |
| pnpm add is-odd | |
| shell: bash | |
| test_dest: | |
| name: Test with dest | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| pnpm: | |
| - 9.15.5 | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Run the action | |
| uses: ./ | |
| with: | |
| version: 9.15.5 | |
| dest: ~/test/pnpm | |
| - name: 'Test: which' | |
| run: which pnpm && which pnpx | |
| - name: 'Test: version' | |
| run: | | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [[ ! "${actual}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
| echo "ERROR: pnpm --version did not produce valid output" | |
| exit 1 | |
| fi | |
| shell: bash | |
| test_standalone: | |
| name: Test with standalone | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - windows-latest | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Run the action | |
| uses: ./ | |
| with: | |
| version: 9.15.0 | |
| standalone: true | |
| - name: 'Test: which' | |
| run: which pnpm | |
| - name: 'Test: version' | |
| run: | | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [[ ! "${actual}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
| echo "ERROR: pnpm --version did not produce valid output" | |
| exit 1 | |
| fi | |
| shell: bash | |
| - name: 'Test: install in a fresh project' | |
| run: | | |
| mkdir /tmp/test-standalone | |
| cd /tmp/test-standalone | |
| pnpm init | |
| pnpm add is-odd | |
| shell: bash | |
| test_version_respects_request: | |
| name: 'Test version input is actually installed (${{ matrix.version }}, ${{ matrix.os }})' | |
| # Regression test for #225 / #230: the bootstrap pnpm on PATH was shadowing the self-updated binary, | |
| # so a user requesting e.g. `version: 9.15.5` would silently get the bootstrap version. | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| version: | |
| - '9.15.5' | |
| - '10.33.0' | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Run the action | |
| uses: ./ | |
| with: | |
| version: ${{ matrix.version }} | |
| - name: 'Test: exact version installed' | |
| run: | | |
| required='${{ matrix.version }}' | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [ "${actual}" != "${required}" ]; then | |
| echo "Expected pnpm version ${required}, but got ${actual}" | |
| exit 1 | |
| fi | |
| shell: bash | |
| test_bin_dest_output: | |
| name: 'Test bin_dest output points to requested version (${{ matrix.version }}, ${{ matrix.os }})' | |
| # Regression test for #247: invoking pnpm via the `bin_dest` output returned the | |
| # bootstrap version because self-update writes the target to `${bin_dest}/bin/`, | |
| # not directly into `${bin_dest}/`. | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| version: | |
| - '9.15.5' | |
| - '10.33.2' | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - id: pnpm | |
| name: Run the action | |
| uses: ./ | |
| with: | |
| version: ${{ matrix.version }} | |
| - name: 'Test: bin_dest/pnpm reports requested version' | |
| # Pass paths via env, not template interpolation, so Windows | |
| # backslashes in `bin_dest` aren't eaten by bash's escape handling. | |
| env: | |
| BIN_DEST: ${{ steps.pnpm.outputs.bin_dest }} | |
| REQUIRED: ${{ matrix.version }} | |
| run: | | |
| actual="$("$BIN_DEST/pnpm" --version)" | |
| echo "pnpm version via bin_dest: ${actual}" | |
| if [ "${actual}" != "${REQUIRED}" ]; then | |
| echo "Expected pnpm version ${REQUIRED}, but got ${actual}" | |
| exit 1 | |
| fi | |
| shell: bash | |
| test_package_manager_field: | |
| name: 'Test packageManager field is respected (${{ matrix.version }}, ${{ matrix.os }})' | |
| # Reproduces #227: when `packageManager` is set in package.json and no `version:` input is given, | |
| # the action should install the version specified there. | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| version: | |
| - '9.15.5' | |
| - '10.33.0' | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Set up package.json with packageManager field | |
| run: echo '{"packageManager":"pnpm@${{ matrix.version }}"}' > package.json | |
| shell: bash | |
| - name: Run the action | |
| uses: ./ | |
| - name: 'Test: exact version installed' | |
| run: | | |
| required='${{ matrix.version }}' | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [ "${actual}" != "${required}" ]; then | |
| echo "Expected pnpm version ${required}, but got ${actual}" | |
| exit 1 | |
| fi | |
| shell: bash | |
| test_dev_engines: | |
| name: Test with devEngines.packageManager | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| version: | |
| - '9.15.5' | |
| - '>=9.15.0' | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Set up package.json with devEngines.packageManager | |
| run: echo '{"devEngines":{"packageManager":{"name":"pnpm","version":"${{ matrix.version }}","onFail":"download"}}}' > package.json | |
| shell: bash | |
| - name: Run the action | |
| uses: ./ | |
| - name: 'Test: which' | |
| run: which pnpm; which pnpx | |
| - name: 'Test: version' | |
| run: | | |
| set -e | |
| required='${{ matrix.version }}' | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [ "${required}" = ">=9.15.0" ]; then | |
| min="9.15.0" | |
| if [ "$(printf '%s\n' "${min}" "${actual}" | sort -V | head -n1)" != "${min}" ]; then | |
| echo "Expected pnpm version >= ${min}, but got ${actual}" | |
| exit 1 | |
| fi | |
| else | |
| if [ "${actual}" != "${required}" ]; then | |
| echo "Expected pnpm version ${required}, but got ${actual}" | |
| exit 1 | |
| fi | |
| fi | |
| shell: bash | |
| test_run_install: | |
| name: 'Test with run_install (${{ matrix.run_install.name }}, ${{ matrix.os }})' | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| pnpm: | |
| - 9.15.5 | |
| os: | |
| - ubuntu-latest | |
| - macos-latest | |
| - windows-latest | |
| run_install: | |
| - name: 'null' | |
| value: 'null' | |
| - name: 'global' | |
| value: | | |
| args: | |
| - --global | |
| - --global-dir=./pnpm-global | |
| - npm | |
| - yarn | |
| steps: | |
| - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 | |
| - name: Run the action | |
| uses: ./ | |
| with: | |
| version: 9.15.5 | |
| run_install: ${{ matrix.run_install.value }} | |
| - name: 'Test: which' | |
| run: which pnpm; which pnpx | |
| - name: 'Test: version' | |
| run: | | |
| actual="$(pnpm --version)" | |
| echo "pnpm version: ${actual}" | |
| if [[ ! "${actual}" =~ ^[0-9]+\.[0-9]+\.[0-9]+(-.+)?$ ]]; then | |
| echo "ERROR: pnpm --version did not produce valid output" | |
| exit 1 | |
| fi | |
| shell: bash |