1
0
mirror of https://github.com/pnpm/action-setup.git synced 2026-03-07 08:21:45 +08:00
This commit is contained in:
Oscar Busk 2025-12-05 16:51:05 +01:00 committed by GitHub
commit 8a1f0929f7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 30 additions and 9 deletions

View File

@ -121,7 +121,7 @@ jobs:
fi
test_run_install:
name: 'Test with run_install (${{ matrix.run_install.name }}, ${{ matrix.os }})'
name: 'Test with run_install (${{ matrix.run_install.name }}, prune=${{matrix.store_prune}}, ${{ matrix.os }})'
runs-on: ${{ matrix.os }}
@ -158,6 +158,9 @@ jobs:
- --global-dir=./pnpm-global
- npm
- yarn
store_prune:
- 'true'
- 'false'
steps:
- uses: actions/checkout@v4
@ -167,6 +170,7 @@ jobs:
with:
version: 9.15.5
run_install: ${{ matrix.run_install.value }}
store_prune: ${{ matrix.store_prune }}
- name: 'Test: which'
run: which pnpm; which pnpx

View File

@ -30,6 +30,8 @@ If `run_install` is `true`, pnpm will install dependencies recursively.
If `run_install` is a YAML string representation of either an object or an array, pnpm will execute every install commands.
If any `run_install` is not falsy, and `store_prune` is not set to `false`, `pnpm store prune` will be executed after all install commands have been executed. This is to ensure the pnpm store is pruned before caching.
#### `run_install.recursive`
**Optional** (_type:_ `boolean`, _default:_ `false`) Whether to use `pnpm recursive install`.
@ -42,6 +44,10 @@ If `run_install` is a YAML string representation of either an object or an array
**Optional** (_type:_ `string[]`) Additional arguments after `pnpm [recursive] install`, e.g. `[--ignore-scripts, --strict-peer-dependencies]`.
#### `store_prune`
**Optional** (_type:_ `boolean`, _default:_ `true`) Whether to run `pnpm store prune` after installation. If `run_install` is falsy, this option will be ignored. If you run `pnpm install` on your own, and intend to cache the pnpm store, it's recommended to run `pnpm store prune` yourself to make sure the store that will be cached is pruned.
### `package_json_file`
**Optional** (_type:_ `string`, _default:_ `package.json`) File path to the `package.json`/[`package.yaml`](https://github.com/pnpm/pnpm/pull/1799) to read "packageManager" configuration.
@ -152,9 +158,12 @@ jobs:
- name: Install dependencies
run: pnpm install
- name: Prune pnpm store
run: pnpm store prune
```
**Note:** You don't need to run `pnpm store prune` at the end; post-action has already taken care of that.
**Note:** If you you opt to run install on your own (`run_install: false`), it's recommended to run [`pnpm store prune`](https://pnpm.io/cli/store#prune) after installation to make sure the store that will be cached is pruned.
## Notes

View File

@ -15,6 +15,10 @@ inputs:
description: If specified, run `pnpm install`
required: false
default: 'null'
store_prune:
description: Enable store pruning after installation. Set to false to disable.
required: false
default: 'true'
package_json_file:
description: File path to the package.json to read "packageManager" configuration
required: false
@ -31,4 +35,3 @@ outputs:
runs:
using: node20
main: dist/index.js
post: dist/index.js

2
dist/index.js vendored

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
import { setFailed, saveState, getState } from '@actions/core'
import { setFailed } from '@actions/core'
import getInputs from './inputs'
import installPnpm from './install-pnpm'
import setOutputs from './outputs'
@ -7,13 +7,11 @@ import pruneStore from './pnpm-store-prune'
async function main() {
const inputs = getInputs()
const isPost = getState('is_post')
if (isPost === 'true') return pruneStore(inputs)
saveState('is_post', 'true')
await installPnpm(inputs)
console.log('Installation Completed!')
setOutputs(inputs)
pnpmInstall(inputs)
pruneStore(inputs)
}
main().catch(error => {

View File

@ -6,6 +6,7 @@ export interface Inputs {
readonly version?: string
readonly dest: string
readonly runInstall: RunInstall[]
readonly storePrune: boolean
readonly packageJsonFile: string
readonly standalone: boolean
}
@ -20,6 +21,7 @@ export const getInputs = (): Inputs => ({
version: getInput('version'),
dest: parseInputPath('dest'),
runInstall: parseRunInstall('run_install'),
storePrune: getBooleanInput('store_prune'),
packageJsonFile: parseInputPath('package_json_file'),
standalone: getBooleanInput('standalone'),
})

View File

@ -5,7 +5,12 @@ import { patchPnpmEnv } from '../utils'
export function pruneStore(inputs: Inputs) {
if (inputs.runInstall.length === 0) {
console.log('Pruning is unnecessary.')
console.log('No install commands were run, skipping pnpm store prune, remember to run it after pnpm install if caching the store.')
return
}
if (!inputs.storePrune) {
console.log('Store pruning is disabled, skipping pnpm store prune.')
return
}