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

fix: missing core yarn files #1229

Merged
merged 2 commits into from
Jan 2, 2024
Merged

Conversation

ericis
Copy link
Contributor

@ericis ericis commented Jan 2, 2024

Newer versions of yarn depend on more files than "yarn.lock". As a result, the tarballs need to include these core files to ensure that any future commands against the tarball contents utilize the right version of yarn.

Example

Configuring yarn v4 with a "pinned version" requires the ".yarnrc.yml" file along with the yarnPath configuration value. If configured to use a specific version of yarn, Yarn will download required files into a "./.yarn/releases/" directory. In the future, any execution of yarn will pick up the yarnPath configuration and use the "./.yarn/releases/" directory contents to download and use the specific version of yarn.

Current impacts

Without these changes, modern versions of yarn, like Yarn v4, do not properly install their dependencies when packaging for release. For example, if yarn 4 is configured to scope dependency installations to the workspace and use a classic node modules setup, the current build will only copy "yarn.lock" and either not upgrade Yarn to v4 and not copy (respect) the v4 configuration from ".yarnrc.yml" or will properly discover and use yarn v4 via corepack from the "package.json" file and "packageManager" value, but will still not copy (respect) the v4 configuration from ".yarnrc.yml".

Testing these changes

  1. An existing oclif CLI was "monkey-patched" with these changes by editing the generated oclif file "my-cli\node_modules\oclif\lib\tarballs\build.js" with a slightly modified version of these same changes.
  2. yarn build
  3. yarn oclif pack win

Newer versions of yarn depend on more files than "yarn.lock". As a result, the tarballs need to include these core files to ensure that any future commands against the tarball contents utilize the right version of `yarn`. Example: configuring yarn v4 with a "pinned version" requires the ".yarnrc.yml" file along with the `yarnPath` configuration value. If configured to use a specific version of yarn, Yarn will download required files into a "./.yarn/releases/" directory. In the future, any execution of `yarn` will pick up the `yarnPath` configuration and use the "./.yarn/releases/" directory contents to download and use the specific version of yarn.
Copy link

salesforce-cla bot commented Jan 2, 2024

Thanks for the contribution! Before we can merge this, we need @ericis to sign the Salesforce Inc. Contributor License Agreement.

@ericis
Copy link
Contributor Author

ericis commented Jan 2, 2024

Thanks for the contribution! Before we can merge this, we need @ericis to sign the Salesforce Inc. Contributor License Agreement.

This is now signed.

@mdonnalley
Copy link
Contributor

@ericis Thanks for this contribution! I'm going to merge this into a feature branch that we can run all our integration tests against and then merge to main once the tests pass

@mdonnalley mdonnalley changed the base branch from main to mdonnalley/1229 January 2, 2024 19:52
@mdonnalley mdonnalley merged commit e74dd5a into oclif:mdonnalley/1229 Jan 2, 2024
1 check passed
mdonnalley added a commit that referenced this pull request Jan 2, 2024
* fix: missing core yarn files (#1229)

* fix: missing core yarn files

Newer versions of yarn depend on more files than "yarn.lock". As a result, the tarballs need to include these core files to ensure that any future commands against the tarball contents utilize the right version of `yarn`. Example: configuring yarn v4 with a "pinned version" requires the ".yarnrc.yml" file along with the `yarnPath` configuration value. If configured to use a specific version of yarn, Yarn will download required files into a "./.yarn/releases/" directory. In the future, any execution of `yarn` will pick up the `yarnPath` configuration and use the "./.yarn/releases/" directory contents to download and use the specific version of yarn.

* fix: yarn root path

* chore: satisfy linter

---------

Co-authored-by: Eric Swanson <ericis@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

2 participants