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

Error Installing Wrangler with pnpm #181

Open
saviski opened this issue Oct 5, 2023 · 19 comments
Open

Error Installing Wrangler with pnpm #181

saviski opened this issue Oct 5, 2023 · 19 comments
Labels

Comments

@saviski
Copy link

saviski commented Oct 5, 2023

This error started happening in the latest version

📥 Installing Wrangler
  Running command: pnpm add wrangler@3.5.1
  Error: Command failed: pnpm add wrangler@3.5.1
  Error: 🚨 Action failed
@1000hz
Copy link
Contributor

1000hz commented Oct 11, 2023

It seems like this could be a result of pnpm not being available in the runner environment. Are you including https://github.com/pnpm/action-setup in an earlier step of your workflow before wrangler-action?

@1000hz 1000hz added the needs clarification Additional context or information needed label Oct 11, 2023
@AdiRishi
Copy link
Contributor

AdiRishi commented Oct 14, 2023

I just ran into this myself. For me I think the special case was that I'm using the workingDirectory property

- name: Deploy apex-gateway
  uses: cloudflare/wrangler-action@v3
  with:
    accountId: ${{ secrets.CF_ACCOUNT_ID || secrets.CLOUDFLARE_ACCOUNT_ID }}
    apiToken: ${{ secrets.CF_API_TOKEN || secrets.CLOUDFLARE_API_TOKEN }}
    workingDirectory: 'workers/apex-gateway'
    command: 'deploy'

My suspicion is that it is looking for pnpm-lock.yaml which doesn't exist when running in the subdirectory.
To be clear, this is running in a monorepo setup (using turborepo).
The exact error message is

Run cloudflare/wrangler-action@v3.3.1
  with:
    accountId: ***
    apiToken: ***
    workingDirectory: workers/apex-gateway
    command: deploy
    quiet: false
  env:
    TURBO_TOKEN: ***
    TURBO_REMOTE_CACHE_SIGNATURE_KEY: ***
    TURBO_TEAM: team_tiptop
    TURBO_API: ***
    GITHUB_SHA: ***
    CLOUDFLARE_ACCOUNT_ID: ***
    CLOUDFLARE_API_TOKEN: ***
    NODE_ENV: production
    PNPM_HOME: /home/runner/setup-pnpm/node_modules/.bin
📥 Installing Wrangler
  Running command: npm i wrangler@3.5.1
  npm ERR! code EUNSUPPORTEDPROTOCOL
  Error: Command failed: npm i wrangler@3.5.1
  npm ERR! code EUNSUPPORTEDPROTOCOL
  npm ERR! Unsupported URL Type "workspace:": workspace:*
  
  npm ERR! A complete log of this run can be found in: /home/runner/.npm/_logs/2023-10-14T09_39_26_137Z-debug-0.log
  
  npm ERR! Unsupported URL Type "workspace:": workspace:*

  npm ERR! A complete log of this run can be found in: /home/runner/.npm/_logs/2023-10-14T09_39_26_137Z-debug-0.log
  Error: 🚨 Action failed

@AdiRishi
Copy link
Contributor

AdiRishi commented Oct 14, 2023

Actually I'm now 100% sure that it's a bug because it's searching in the workingDirectory. We can see this in the wrangler-action codebase

function detectPackageManager(
	workingDirectory = ".",
): PackageManagerValue | null {
	if (existsSync(path.join(workingDirectory, "package-lock.json"))) {
		return "npm";
	}
	if (existsSync(path.join(workingDirectory, "yarn.lock"))) {
		return "yarn";
	}
	if (existsSync(path.join(workingDirectory, "pnpm-lock.yaml"))) {
		return "pnpm";
	}
	if (existsSync(path.join(workingDirectory, "bun.lockb"))) {
		return "bun";
	}
	return null;
}

This is likely a seperate issue to the one being reported, should I create a new issue report?

@1000hz
Copy link
Contributor

1000hz commented Oct 14, 2023

@AdiRishi yes, please open a new issue for that

@AdiRishi
Copy link
Contributor

@AdiRishi yes, please open a new issue for that

Done - #198

@thantos
Copy link

thantos commented Oct 17, 2023

It seems like this could be a result of pnpm not being available in the runner environment. Are you including https://github.com/pnpm/action-setup in an earlier step of your workflow before wrangler-action?

Ran into the same error and I am 100% installing pnpm

      - name: Set up pnpm
        uses: pnpm/action-setup@v2
        with:
          version: 8.6.2

      - name: do a bunch of things with pnpm

      - name: Deploy
        uses: cloudflare/wrangler-action@v3
        with:
          apiToken: ${{ secrets.CF_API_TOKEN }}
          accountId: ${{ secrets.CF_ACCOUNT_ID }}
          command: pages deploy ./packages/portal/out --project-name=${{ vars.CF_PROJECT_NAME }}

@thantos
Copy link

thantos commented Oct 17, 2023

Here is the actual error (from running locally since you swallow the error :( )

ERR_PNPM_ADDING_TO_ROOT  Running this command will add the dependency to the workspace root, which might not be what you want - if you really meant it, make it explicit by running this command again with the -w flag (or --workspace-root). If you don't want to see this warning anymore, you may set the ignore-workspace-root-check setting to true.

Going to try with a working directory.

By the way, I already have it installed at the root, would be great if the action didn't need to do it again...

@thantos
Copy link

thantos commented Oct 17, 2023

Which of course runs into this: #198

This action doesn't work with pnpm workspaces.

@thantos
Copy link

thantos commented Oct 17, 2023

Update: I was able to get by this with a hack

wranglerVersion: "* -w"

This uses the existing version of wrangler in the root pnpm and injects the -w needed to bypass the PNPM workspace root error.

@enfipy
Copy link

enfipy commented Oct 17, 2023

I was able to work around this issue with a pretty simple change, just by setting packageManager: pnpm near the workingDirectory property:

- uses: pnpm/action-setup@v2
  with:
    version: 8.9.0
- uses: cloudflare/wrangler-action@v3
  with:
    apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
    workingDirectory: ./<PATH_TO_PACKAGE>/
    environment: production
    packageManager: pnpm

The issue indeed is because of getPackageManager function tries to retrieve packageManager from detectPackageManager(workingDirectory), and when workingDirectory is a subdirectory of workspace (e.g. without pnpm-lock.yaml) - it results in an error. So explicitly setting packageManager: pnpm - solves this issue.

P.S: Also, I think it's a good idea to mention this in the docs or troubleshooting, as nowadays many projects use workspaces.

@1000hz 1000hz removed the needs clarification Additional context or information needed label Oct 17, 2023
@1000hz
Copy link
Contributor

1000hz commented Oct 17, 2023

@thantos thanks for investigating. It looks like there are two distinct problems here:

I'll keep this issue open to track the first problem.
Installation error stdout being swallowed should be addressed by #171.
I'll also open a new issue to track installing wrangler only when it's not already installed. (#199)

@maxpetretta
Copy link

maxpetretta commented Oct 19, 2023

Another solution to this issue here: #198 (comment)

@sam-goodwin
Copy link

sam-goodwin commented Nov 5, 2023

Update: I was able to get by this with a hack

wranglerVersion: "* -w"

This uses the existing version of wrangler in the root pnpm and injects the -w needed to bypass the PNPM workspace root error.

This workaround isn't working for me.

I have opened a PR with an attempt to fix this: #207

@1000hz let me know if my approach is on the right track.

@skf-funzt
Copy link

Update: I was able to get by this with a hack

wranglerVersion: "* -w"

This uses the existing version of wrangler in the root pnpm and injects the -w needed to bypass the PNPM workspace root error.

Unfortunately, this solution lets the action fail with

🚀 Running Wrangler Commands
Error: Invalid Version: * -w
Error: 🚨 Action failed

@admah admah removed this from workers-sdk Apr 8, 2024
@Ambroos
Copy link
Contributor

Ambroos commented Apr 23, 2024

For the workspace issue, an easy workaround is to just add a step right before wrangler-action:

- run: echo "ignore-workspace-root-check=true" >> .npmrc

If you don't have any other pnpm adds later there's no need to remove it in a workflow.

@Ambroos
Copy link
Contributor

Ambroos commented May 23, 2024

Since v3.6.0, released a few hours ago, the action will reuse an existing Wrangler installation.
You can just pre-install your favourite wrangler version and this is no longer an issue: https://github.com/cloudflare/wrangler-action/releases/tag/v3.6.0

Update: the fix that fixed this in v3.6.0 was reverted in v3.6.1 because it had some breaking side effects if you use npm, but it's fine if you use pnpm. We pinned the action to v3.6.0 in our repo to keep the fix: uses: cloudflare/wrangler-action@v3.6.0

@IanVS
Copy link

IanVS commented Jul 26, 2024

Is anyone else here having this issue when setting packageManager: pnpm and also setting workingDirectory? cloudflare/workers-sdk#6224

@broisnischal
Copy link

I am still having problem doing, but and what if I am using bun as the package manager?

@stevefrench39
Copy link

Would --ignore-workspaces break other functionality?
https://github.com/orgs/pnpm/discussions/4735#discussioncomment-2770033

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests