name: Test Action on: pull_request: push: branches: - master workflow_dispatch: jobs: smoke: # Cross-OS coverage. Exercises the bootstrap install + PATH on each platform, # the version-respects-request regression (#225 / #230 — Windows PATH shadow), # and the bin_dest output regression (#247). Multi-version coverage on Linux # so we don't pay 3x for major-version differences. name: 'Smoke (${{ matrix.name }})' runs-on: ${{ matrix.os }} strategy: fail-fast: false matrix: include: - name: 'ubuntu / v9.15.5' os: ubuntu-latest version: '9.15.5' - name: 'ubuntu / v10.33.0' os: ubuntu-latest version: '10.33.0' - name: 'ubuntu / v9.15.5 / custom-dest' os: ubuntu-latest version: '9.15.5' dest: '~/test/pnpm' - name: 'macos / v9.15.5' os: macos-latest version: '9.15.5' - name: 'windows / v9.15.5' os: windows-latest version: '9.15.5' steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - id: pnpm name: Run the action uses: ./ with: version: ${{ matrix.version }} dest: ${{ matrix.dest || '~/setup-pnpm' }} - name: 'Test: pnpm/pnpx on PATH report the requested version (incl. via bin_dest)' # 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: | set -e which pnpm which pnpx actual="$(pnpm --version)" echo "pnpm --version: ${actual}" if [ "${actual}" != "${REQUIRED}" ]; then echo "Expected pnpm version ${REQUIRED}, but got ${actual}" exit 1 fi bin_dest_version="$("$BIN_DEST/pnpm" --version)" echo "bin_dest pnpm --version: ${bin_dest_version}" if [ "${bin_dest_version}" != "${REQUIRED}" ]; then echo "Expected ${REQUIRED} via bin_dest, but got ${bin_dest_version}" 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 manifest_pin: # Folds the old test_package_manager_field, test_dev_engines, and # test_dev_engines_on_fail_error jobs. The action's manifest handling is # OS-independent, so ubuntu-only is sufficient. name: 'Manifest pin: ${{ matrix.label }}' runs-on: ubuntu-latest strategy: fail-fast: false matrix: include: - label: 'packageManager pnpm@9.15.5 (#227)' manifest: '{"packageManager":"pnpm@9.15.5"}' version: '9.15.5' - label: 'packageManager pnpm@10.33.0' manifest: '{"packageManager":"pnpm@10.33.0"}' version: '10.33.0' - label: 'devEngines onFail=download, exact' manifest: '{"devEngines":{"packageManager":{"name":"pnpm","version":"9.15.5","onFail":"download"}}}' version: '9.15.5' - label: 'devEngines onFail=download, range' manifest: '{"devEngines":{"packageManager":{"name":"pnpm","version":">=9.15.0","onFail":"download"}}}' version: '>=9.15.0' - label: 'devEngines onFail=error, exact (#252)' manifest: '{"devEngines":{"packageManager":{"name":"pnpm","version":"9.15.5","onFail":"error"}}}' version: '9.15.5' - label: 'devEngines onFail=error, range (#252)' manifest: '{"devEngines":{"packageManager":{"name":"pnpm","version":">=9.15.0","onFail":"error"}}}' version: '>=9.15.0' steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - name: Set up package.json run: echo '${{ matrix.manifest }}' > package.json shell: bash - name: Run the action uses: ./ - name: 'Test: pnpm reports the pinned version' env: REQUIRED: ${{ matrix.version }} run: | set -e 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 standalone: name: Standalone mode runs-on: ubuntu-latest steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - name: Run the action uses: ./ with: version: 9.15.0 standalone: true - name: 'Test: pnpm works' run: | set -e which pnpm actual="$(pnpm --version)" if [ "${actual}" != "9.15.0" ]; then echo "Expected 9.15.0, got ${actual}" exit 1 fi mkdir /tmp/test-standalone cd /tmp/test-standalone pnpm init pnpm add is-odd shell: bash run_install: name: 'run_install (${{ matrix.run_install.name }})' runs-on: ubuntu-latest strategy: fail-fast: false matrix: 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: pnpm works' run: | set -e which pnpm which pnpx actual="$(pnpm --version)" if [ "${actual}" != "9.15.5" ]; then echo "Expected 9.15.5, got ${actual}" exit 1 fi shell: bash