Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Throw error when multiple versions specified #122

Merged
merged 6 commits into from
May 6, 2024
Merged
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 18 additions & 4 deletions src/install-pnpm/run.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,32 @@ async function readTarget(opts: {
readonly standalone: boolean
}) {
const { version, packageJsonFile, standalone } = opts
const { GITHUB_WORKSPACE } = process.env

if (version) return `${ standalone ? '@pnpm/exe' : 'pnpm' }@${version}`
let packageManager;
KSXGitHub marked this conversation as resolved.
Show resolved Hide resolved

if (GITHUB_WORKSPACE) {
({ packageManager } = JSON.parse(await readFile(path.join(GITHUB_WORKSPACE, packageJsonFile), 'utf8')))
}
Copy link
Collaborator

@KSXGitHub KSXGitHub Apr 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If there is no package.json at root, this will result in error. Please fix this.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, this error was also there before, wasn't it? Should that be a separate PR?

Happy to wrap it in a try/catch to swallow the error if you think it belongs in this PR

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hm, this error was also there before, wasn't it? Should that be a separate PR?

Before, if user already specifies version in the action, no error would actually happen.

Happy to wrap it in a try/catch to swallow the error if you think it belongs in this PR

If the file doesn't exist (error.code === 'ENOENT'), assign undefined.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

packageManager is already set to undefined

I added a condition to swallow the error if error.code === 'ENOENT':


if (version) {
if (typeof packageManager === 'string') {
throw new Error(`Multiple versions of pnpm specified:
- version ${version} in the GitHub Action config with the key "version"
- version ${packageManager} in the package.json with the key "packageManager"
Remove one of these versions to avoid version mismatch errors like ERR_PNPM_BAD_PM_VERSION`)
}
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

but why should it fail if the versions match?

Copy link
Contributor Author

@karlhorky karlhorky Apr 19, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added a condition to skip if versions match:


return `${ standalone ? '@pnpm/exe' : 'pnpm' }@${version}`
}

const { GITHUB_WORKSPACE } = process.env
if (!GITHUB_WORKSPACE) {
throw new Error(`No workspace is found.
If you're intended to let pnpm/action-setup read preferred pnpm version from the "packageManager" field in the package.json file,
please run the actions/checkout before pnpm/action-setup.
Otherwise, please specify the pnpm version in the action configuration.`)
}

const { packageManager } = JSON.parse(await readFile(path.join(GITHUB_WORKSPACE, packageJsonFile), 'utf8'))
if (typeof packageManager !== 'string') {
throw new Error(`No pnpm version is specified.
Please specify it by one of the following ways:
Expand All @@ -64,7 +78,7 @@ Please specify it by one of the following ways:
throw new Error('Invalid packageManager field in package.json')
}

if(standalone){
if (standalone) {
return packageManager.replace('pnpm@', '@pnpm/exe@')
}

Expand Down