Skip to content

docs: reference v2 in examples; update pnpm to v12.0.0-beta.4 (#16) #42

docs: reference v2 in examples; update pnpm to v12.0.0-beta.4 (#16)

docs: reference v2 in examples; update pnpm to v12.0.0-beta.4 (#16) #42

Workflow file for this run

name: Test Action
on:
pull_request:
push:
branches:
- main
workflow_dispatch:
permissions:
contents: read
jobs:
smoke:
# Direct binary download + pnpm on PATH across OSes and architectures.
name: 'Smoke (${{ matrix.os }} / pnpm ${{ matrix.version }})'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
version: '12.0.0-beta.4'
- os: ubuntu-24.04-arm
version: '12.0.0-beta.4'
- os: macos-latest
version: '12.0.0-beta.4'
- os: windows-latest
version: '12.0.0-beta.4'
steps:
- uses: actions/checkout@v6
- id: pnpm
uses: ./
with:
version: ${{ matrix.version }}
- name: 'Test: pnpm version on PATH matches request'
env:
BIN_DEST: ${{ steps.pnpm.outputs.bin-dest }}
REQUIRED: ${{ matrix.version }}
run: |
set -e
which pnpm
actual="$(pnpm --version)"
echo "pnpm --version: ${actual}"
if [ "${actual}" != "${REQUIRED}" ]; then
echo "Expected pnpm ${REQUIRED}, got ${actual}"
exit 1
fi
bin_dest_version="$("$BIN_DEST/pnpm" --version)"
if [ "${bin_dest_version}" != "${REQUIRED}" ]; then
echo "Expected ${REQUIRED} via bin_dest, got ${bin_dest_version}"
exit 1
fi
shell: bash
smoke-v11:
# v11's release archive bundles a Node-SEA launcher plus a sibling `dist/`,
# unlike v12's single self-contained binary. Verify the action downloads and
# lays it out correctly and puts pnpm on PATH across OSes/arches. (macos-latest
# is arm64; pnpm v11 ships no Intel-macOS binary, so no macos-13 entry here.)
name: 'Smoke pnpm 11 (${{ matrix.os }})'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm, macos-latest, windows-latest]
steps:
- uses: actions/checkout@v6
- id: pnpm
uses: ./
with:
version: '11.17.0'
install: false
- name: 'Test: pnpm 11 on PATH matches request'
env:
BIN_DEST: ${{ steps.pnpm.outputs.bin-dest }}
run: |
set -e
which pnpm
actual="$(pnpm --version)"
echo "pnpm --version: ${actual}"
if [ "${actual}" != "11.17.0" ]; then
echo "Expected pnpm 11.17.0, got ${actual}"
exit 1
fi
bin_dest_version="$("$BIN_DEST/pnpm" --version)"
if [ "${bin_dest_version}" != "11.17.0" ]; then
echo "Expected 11.17.0 via bin_dest, got ${bin_dest_version}"
exit 1
fi
shell: bash
runtime-node-pnpm11:
# The whole premise of supporting v11 is that `pnpm runtime` works there.
# Install pnpm v11, install a runtime through it, and run `pnpm install`.
name: 'Runtime node + install on pnpm 11'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up a synthetic package.json
# Use a fresh manifest (and drop the repo lockfile) so `pnpm install`
# under v11 resolves cleanly rather than against a v12-authored lockfile.
run: |
rm -f pnpm-lock.yaml
cat > package.json <<'EOF'
{
"dependencies": {
"is-odd": "3.0.1"
}
}
EOF
shell: bash
- id: pnpm
uses: ./
with:
version: '11.17.0'
runtime: node@22
- name: 'Test: pnpm 11, node 22, and install all worked'
env:
OUT_NAME: ${{ steps.pnpm.outputs.runtime-name }}
OUT_VERSION: ${{ steps.pnpm.outputs.runtime-version }}
run: |
set -e
pnpm_version="$(pnpm --version)"
echo "pnpm --version: ${pnpm_version}"
case "${pnpm_version}" in
11.*) ;;
*) echo "Expected pnpm 11.x, got ${pnpm_version}"; exit 1 ;;
esac
which node
node_version="$(node --version)"
echo "node --version: ${node_version}"
case "${node_version}" in
v22.*) ;;
*) echo "Expected node v22.x, got ${node_version}"; exit 1 ;;
esac
if [ "${OUT_NAME}" != "node" ]; then
echo "Expected outputs.runtime-name=node, got ${OUT_NAME}"; exit 1
fi
if [ "${OUT_VERSION}" != "22" ]; then
echo "Expected outputs.runtime-version=22, got ${OUT_VERSION}"; exit 1
fi
if [ ! -d node_modules/is-odd ]; then
echo "Expected pnpm install to populate node_modules/is-odd"; exit 1
fi
shell: bash
version-from-dist-tag:
# `version` may be an npm dist-tag; it is resolved against the main
# `pnpm` package's dist-tags.
name: 'Version from dist-tag (next-12)'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./
with:
version: next-12
install: false
- name: 'Test: dist-tag resolves to a 12.x version'
run: |
set -e
which pnpm
actual="$(pnpm --version)"
echo "pnpm --version: ${actual}"
case "${actual}" in
12.*) echo "ok" ;;
*) echo "Expected pnpm 12.x, got ${actual}"; exit 1 ;;
esac
shell: bash
version-range:
# `version` may be a semver range. While v12 only has prereleases the
# range resolution falls back to prerelease versions.
name: 'Version from semver range (^12.0.0-0)'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./
with:
version: '^12.0.0-0'
install: false
- name: 'Test: range resolves to a 12.x version'
run: |
set -e
actual="$(pnpm --version)"
echo "pnpm --version: ${actual}"
case "${actual}" in
12.*) echo "ok" ;;
*) echo "Expected pnpm 12.x, got ${actual}"; exit 1 ;;
esac
shell: bash
runtime-node:
# Explicit runtime input across OSes. Asserts node binary is on PATH and
# the action's outputs reflect what was installed.
name: 'Runtime node@${{ matrix.major }} (${{ matrix.os }})'
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- os: ubuntu-latest
major: '22'
- os: macos-latest
major: '22'
- os: windows-latest
major: '22'
steps:
- uses: actions/checkout@v6
- id: pnpm
uses: ./
with:
version: '12.0.0-beta.4'
runtime: node@${{ matrix.major }}
- name: 'Test: node binary on PATH'
env:
MAJOR: ${{ matrix.major }}
run: |
set -e
which node
actual="$(node --version)"
echo "node --version: ${actual}"
case "${actual}" in
v${MAJOR}.*) echo "ok" ;;
*) echo "Expected node v${MAJOR}.x, got ${actual}"; exit 1 ;;
esac
shell: bash
- name: 'Test: outputs.runtime-name and outputs.runtime-version'
env:
OUT_NAME: ${{ steps.pnpm.outputs.runtime-name }}
OUT_VERSION: ${{ steps.pnpm.outputs.runtime-version }}
EXPECTED_VERSION: ${{ matrix.major }}
run: |
set -e
if [ "${OUT_NAME}" != "node" ]; then
echo "Expected outputs.runtime-name=node, got ${OUT_NAME}"
exit 1
fi
if [ "${OUT_VERSION}" != "${EXPECTED_VERSION}" ]; then
echo "Expected outputs.runtime-version=${EXPECTED_VERSION}, got ${OUT_VERSION}"
exit 1
fi
shell: bash
runtime-bun:
name: Runtime bun
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./
with:
version: '12.0.0-beta.4'
runtime: bun@latest
- name: 'Test: bun on PATH'
run: |
set -e
which bun
bun --version
shell: bash
runtime-deno:
name: Runtime deno
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- uses: ./
with:
version: '12.0.0-beta.4'
runtime: deno@2
- name: 'Test: deno on PATH'
run: |
set -e
which deno
deno --version
shell: bash
runtime-from-devengines:
# No `runtime` input — the action should pick up devEngines.runtime from
# package.json and install it. Also asserts that `pnpm install` runs by
# default when a manifest is present.
name: 'Runtime from devEngines.runtime'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up package.json with devEngines.runtime
# Remove the action's own pnpm-lock.yaml so `pnpm install` doesn't
# hit a frozen-lockfile mismatch against the synthetic manifest.
run: |
rm -f pnpm-lock.yaml
cat > package.json <<'EOF'
{
"packageManager": "pnpm@12.0.0-beta.4",
"devEngines": {
"runtime": { "name": "node", "version": "^22.0.0", "onFail": "download" }
},
"dependencies": {
"is-odd": "3.0.1"
}
}
EOF
shell: bash
- id: pnpm
uses: ./
- name: 'Test: node 22 is installed and dependencies are resolved'
env:
OUT_NAME: ${{ steps.pnpm.outputs.runtime-name }}
OUT_VERSION: ${{ steps.pnpm.outputs.runtime-version }}
run: |
set -e
which node
actual="$(node --version)"
echo "node --version: ${actual}"
case "${actual}" in
v22.*) ;;
*) echo "Expected node v22.x, got ${actual}"; exit 1 ;;
esac
if [ "${OUT_NAME}" != "node" ]; then
echo "Expected outputs.runtime-name=node, got ${OUT_NAME}"
exit 1
fi
if [ "${OUT_VERSION}" != "^22.0.0" ]; then
echo "Expected outputs.runtime-version=^22.0.0, got ${OUT_VERSION}"
exit 1
fi
# `pnpm install` should have run automatically — node_modules must exist.
if [ ! -d node_modules/is-odd ]; then
echo "Expected pnpm install to have populated node_modules/is-odd"
exit 1
fi
shell: bash
runtime-overrides-devengines:
# Explicit `runtime` input conflicts with `devEngines.runtime` in
# package.json. The action should install the explicit version AND pass
# `--no-runtime` to pnpm install so the devEngines runtime doesn't shadow
# the matrix one.
name: 'Explicit runtime overrides devEngines.runtime'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up package.json with conflicting devEngines.runtime
run: |
rm -f pnpm-lock.yaml
cat > package.json <<'EOF'
{
"packageManager": "pnpm@12.0.0-beta.4",
"devEngines": {
"runtime": { "name": "node", "version": "^20.0.0", "onFail": "download" }
},
"dependencies": {
"is-odd": "3.0.1"
}
}
EOF
shell: bash
- id: pnpm
uses: ./
with:
runtime: node@22
- name: 'Test: node 22 stays active after pnpm install'
run: |
set -e
actual="$(node --version)"
echo "node --version: ${actual}"
case "${actual}" in
v22.*) ;;
*) echo "Expected node v22.x after install (--no-runtime should have suppressed the devEngines runtime fetch), got ${actual}"; exit 1 ;;
esac
# pnpm install should still have run.
if [ ! -d node_modules/is-odd ]; then
echo "Expected pnpm install to have populated node_modules/is-odd"
exit 1
fi
shell: bash
runtime-version-fallback:
# `runtime: node` without an `@<version>` suffix should fall back to the
# version declared in devEngines.runtime.
name: 'runtime version falls back to devEngines'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up package.json with devEngines.runtime version
run: |
rm -f pnpm-lock.yaml
cat > package.json <<'EOF'
{
"packageManager": "pnpm@12.0.0-beta.4",
"devEngines": {
"runtime": { "name": "node", "version": "^20.0.0", "onFail": "download" }
}
}
EOF
shell: bash
- id: pnpm
uses: ./
with:
runtime: node
- name: 'Test: node 20 via fallback'
run: |
set -e
actual="$(node --version)"
echo "node --version: ${actual}"
case "${actual}" in
v20.*) ;;
*) echo "Expected node v20.x, got ${actual}"; exit 1 ;;
esac
shell: bash
install-false:
# `install: false` skips the auto-install step even though a manifest is
# present.
name: 'install: false skips pnpm install'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Set up package.json with a dependency
run: |
rm -f pnpm-lock.yaml
cat > package.json <<'EOF'
{
"packageManager": "pnpm@12.0.0-beta.4",
"dependencies": {
"is-odd": "3.0.1"
}
}
EOF
shell: bash
- uses: ./
with:
version: '12.0.0-beta.4'
install: false
- name: 'Test: node_modules was not populated'
run: |
set -e
if [ -d node_modules/is-odd ]; then
echo "Expected install: false to skip pnpm install, but node_modules/is-odd exists"
exit 1
fi
# pnpm itself should still be on PATH.
which pnpm
pnpm --version
shell: bash
no-runtime:
# No runtime input, no devEngines.runtime. Action installs pnpm only and
# leaves the runtime outputs empty. With no package.json, `pnpm install`
# is also skipped.
name: 'No runtime, no manifest'
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- id: pnpm
uses: ./
with:
version: '12.0.0-beta.4'
- name: 'Test: pnpm works, runtime outputs are empty'
env:
OUT_NAME: ${{ steps.pnpm.outputs.runtime-name }}
OUT_VERSION: ${{ steps.pnpm.outputs.runtime-version }}
run: |
set -e
which pnpm
pnpm --version
if [ -n "${OUT_NAME}" ]; then
echo "Expected outputs.runtime-name to be empty, got '${OUT_NAME}'"
exit 1
fi
if [ -n "${OUT_VERSION}" ]; then
echo "Expected outputs.runtime-version to be empty, got '${OUT_VERSION}'"
exit 1
fi
shell: bash