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

Upgrade to Yarn 4 #21345

Draft
wants to merge 50 commits into
base: trunk
Choose a base branch
from
Draft
Changes from 1 commit
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
c2164c9
Remove yoast-components dependency
igorschoester Apr 13, 2024
9c3035b
Remove yoast-components from tooling
igorschoester Apr 13, 2024
f685e61
Remove yoast-components
igorschoester Apr 13, 2024
39159af
Add Yarn 4
igorschoester Apr 26, 2024
eabf07c
Safe fix .gitignore
igorschoester Apr 26, 2024
98eea7f
Fix grunt clean
igorschoester Apr 26, 2024
7742ddf
Refactor pretest to be part of test itself
igorschoester Apr 26, 2024
25ca4ed
Remove prepublishOnly in favor of files
igorschoester Apr 26, 2024
0706cbe
Fix analysis-report build and test
igorschoester Apr 26, 2024
a824ac0
Fix browserslist-config lint
igorschoester Apr 26, 2024
2783c21
Fix @yoast/components build:css and lint
igorschoester Apr 26, 2024
3621d7a
Fix @yoast/feature-flag lint and test
igorschoester Apr 26, 2024
8789e15
Fix @yoast/helpers lint and test
igorschoester Apr 26, 2024
a07032c
Fix @yoast/wordpress-seo build and test commands
igorschoester Apr 26, 2024
c1c444a
Fix @yoast/replacement-variable-editor test
igorschoester Apr 27, 2024
ea9c2af
Fix @yoast/search-metadata-previews test
igorschoester Apr 27, 2024
39e0dba
Fix @yoast/social-metadata-forms lint and test
igorschoester Apr 27, 2024
0223d5b
Fix @yoast/social-metadata-previews lint and test
igorschoester Apr 27, 2024
750a434
Change @yoast/ui-library scripts
igorschoester Apr 27, 2024
62c2799
Expand yoastseo lint
igorschoester Apr 27, 2024
d1cbf84
Fix root tooling lint
igorschoester Apr 27, 2024
e0a6a41
Upgrade jest and cohorts
igorschoester Apr 27, 2024
ded88a6
Update snapshots
igorschoester Apr 27, 2024
0f297fb
Fix indexation component
igorschoester Apr 27, 2024
daca422
Fix search test warning
igorschoester Apr 27, 2024
2159a0f
Clean Jest config
igorschoester Apr 27, 2024
96185d9
Specify lerna/nx task dependencies
igorschoester Apr 27, 2024
a61cfd5
Upgrade babel preset and cohorts
igorschoester Apr 27, 2024
2b32305
Bump CSS deps
igorschoester Apr 27, 2024
10c80db
Fix webpack deps
igorschoester Apr 27, 2024
2d813f6
Fix style-guide deps
igorschoester Apr 27, 2024
cb6f33f
Upgrade redux
igorschoester Apr 27, 2024
6bfff26
Fix react deps
igorschoester Apr 27, 2024
71e025f
Add missing draft-js peer deps from replacement-variable-editor
igorschoester Apr 27, 2024
7cac804
Add Grunt dev dep
igorschoester Apr 27, 2024
bd01cc3
Allow semver control in sync WP dep script
igorschoester Apr 27, 2024
c7ddb8e
Fix yarn start
igorschoester Apr 28, 2024
20873ad
Upgrade react-modal
igorschoester Apr 28, 2024
9f639ed
Remove unused react-intl and IntlProvider
igorschoester Apr 28, 2024
247b79c
Remove react-aria-live
igorschoester Apr 28, 2024
551d6ff
Upgrade WP blocks to WP 6.4 version
igorschoester Apr 28, 2024
a02c035
Fix analysis-report snapshots
igorschoester Apr 28, 2024
545d333
Upgrade UI lib WP jest-preset-default
igorschoester Apr 28, 2024
a73036d
Upgrade WP packages to their WP 6.4 version
igorschoester Apr 28, 2024
7eb8584
Clean jest-preset and configs
igorschoester Apr 28, 2024
078a810
Add missing react-is dep for styled-components
igorschoester Apr 28, 2024
88657cf
Switch react and react-dom to actual deps
igorschoester Apr 28, 2024
499e67b
Add missing dev deps for Grunt
igorschoester Apr 28, 2024
b10abb5
Remove unused root dev deps
igorschoester Apr 28, 2024
437a80c
Remove jest version output from CI
igorschoester Apr 28, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
Prev Previous commit
Next Next commit
Allow semver control in sync WP dep script
  • Loading branch information
igorschoester committed Apr 28, 2024
commit bd01cc31ac5b2dbcbc5e63af93fa0bb35237b795
81 changes: 66 additions & 15 deletions config/scripts/sync-wp-dependencies.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
* Usage:
* $ node config/scripts/sync-wp-dependencies.js [packageFolder1] [packageFolder2] ...
* If no packageFolders are specified, all packages will be updated.
* If no semver modifier is specified, exact match will be used.
* Options:
* --caret Use caret (^) as semver modifier
* --tilde Use tilde (~) as semver modifier
* --exact Use no semver modifier
*
* What does it do?
* Steps:
Expand Down Expand Up @@ -104,6 +109,12 @@ const packageFolderDisallowList = [
"tailwindcss-preset",
];

const SEMVER_MODIFIERS = {
exact: "",
caret: "^",
tilde: "~",
};

/**
* Gets the lowest supported WordPress version.
* @returns {null|string} The lowest supported WordPress version or null.
Expand Down Expand Up @@ -207,26 +218,28 @@ const filterDependencies = ( dependencies, allowList ) => {
* Gets the dependencies with the wanted versions.
* @param {string[]} dependencies The dependencies we want to update.
* @param {Object|Object<string,string>} listedVersions The versions of the dependencies we want to update.
* @param {string} [semverModifier] The semver modifier to use. Defaults to exact. See SEMVER_MODIFIERS.
* @returns {string[]} The dependencies with the wanted versions.
*/
const getDependenciesWithWantedVersions = ( dependencies, listedVersions ) => {
return dependencies.map( ( dependency ) => ( `${ dependency }@${ listedVersions[ dependency ] }` ) );
const getDependenciesWithWantedVersions = ( dependencies, listedVersions, semverModifier = "" ) => {
return dependencies.map( ( dependency ) => ( `${ dependency }@${ semverModifier }${ listedVersions[ dependency ] }` ) );
};

/**
* Syncs the dependencies for the specified package.
* @param {string} packageFolder The package to sync the dependencies for.
* @param {Object|Object<string,string>} wpDependencies The WordPress dependencies to sync with.
* @param {string} [semverModifier] The semver modifier to use. Defaults to exact. See SEMVER_MODIFIERS.
* @returns {Promise<boolean>} A promise that resolves when the dependencies are synced.
*/
const syncPackageDependenciesFor = async( packageFolder, wpDependencies ) => {
const syncPackageDependenciesFor = async( packageFolder, wpDependencies, semverModifier ) => {
const packageJson = getPackageJsonForPackage( packageFolder );
let dependenciesToUpdate = Object.keys( getDependenciesFromPackageJson( packageJson ) );
// Filter out the dependencies we don't care about.
dependenciesToUpdate = filterDependencies( dependenciesToUpdate, wpPackagesAllowList );
// Filter out the dependencies that are unknown to WordPress.
dependenciesToUpdate = filterDependencies( dependenciesToUpdate, Object.keys( wpDependencies ) );
const dependenciesWithWantedVersions = getDependenciesWithWantedVersions( dependenciesToUpdate, wpDependencies );
const dependenciesWithWantedVersions = getDependenciesWithWantedVersions( dependenciesToUpdate, wpDependencies, semverModifier );

if ( dependenciesWithWantedVersions.length === 0 ) {
console.log( "=============================================" );
Expand All @@ -246,17 +259,14 @@ const syncPackageDependenciesFor = async( packageFolder, wpDependencies ) => {
};

/**
* Gets the package folders from the process arguments.
* Filters the requested package folders.
* Defaults to all packages if no arguments are provided.
* Filters out folders that we don't want, or that don't have a package.json.
* @param {string[]} requestedPackages The requested packages.
* @returns {string[]} Valid package folders.
*/
const getPackageFoldersFromArguments = () => {
let packages = process.argv.slice( 2 );
if ( packages.length === 0 ) {
packages = readdirSync( "./packages" );
}

const filterPackageFolders = ( requestedPackages = [] ) => {
const packages = requestedPackages.length === 0 ? readdirSync( "./packages" ) : requestedPackages;
return packages.filter( ( packageFolder ) => (
// Ignore folders that are not packages that run inside a WordPress environment.
! packageFolderDisallowList.includes( packageFolder ) &&
Expand All @@ -265,12 +275,53 @@ const getPackageFoldersFromArguments = () => {
) );
};

/**
* Gets the semver modifier from the arguments.
* @param {string[]} args The arguments.
* @returns {string} The semver modifier.
*/
const getSemverModifierFromArguments = ( args ) => {
if ( args.includes( "--caret" ) ) {
return SEMVER_MODIFIERS.caret;
}
if ( args.includes( "--tilde" ) ) {
return SEMVER_MODIFIERS.tilde;
}

return SEMVER_MODIFIERS.exact;
};

/**
* Parses the arguments and returns commands.
* @param {string[]} args The arguments to parse.
* @returns {Object} The commands.
*/
const parseArguments = ( args ) => {
if ( args.includes( "--help" ) ) {
console.log( "Usage: node sync-wp-dependencies.js [packageFolder1] [packageFolder2] ..." );
console.log( "If no packageFolders are specified, all packages will be updated." );
console.log( "If no semver modifier is specified, exact match will be used." );
console.log( "Options:" );
console.log( " --caret Use caret (^) as semver modifier" );
console.log( " --tilde Use tilde (~) as semver modifier" );
console.log( " --exact Use no semver modifier" );
// eslint-disable-next-line no-process-exit
process.exit( 0 );
}

return {
packageFolders: filterPackageFolders( args.filter( ( arg ) => ! arg.startsWith( "--" ) ) ),
semverModifier: getSemverModifierFromArguments( args ),
};
};

/**
* Syncs the WordPress dependencies for the specified packages (in command).
* @param {string[]} packageFolders The package folders to sync the dependencies for.
* @param {string} semverModifier The semver modifier to use. Defaults to exact. See SEMVER_MODIFIERS.
* @returns {Promise<void>} A promise that resolves when the dependencies are synced.
*/
const syncPackageDependencies = async() => {
const packageFolders = getPackageFoldersFromArguments();
const syncPackageDependencies = async( { packageFolders, semverModifier } ) => {
if ( packageFolders.length === 0 ) {
console.error( "No valid package folders found" );
return;
Expand All @@ -283,7 +334,7 @@ const syncPackageDependencies = async() => {

const result = {};
for ( const packageFolder of packageFolders ) {
result[ packageFolder ] = await syncPackageDependenciesFor( packageFolder, wpDependencies );
result[ packageFolder ] = await syncPackageDependenciesFor( packageFolder, wpDependencies, semverModifier );
}

console.log( "=============================================" );
Expand All @@ -298,4 +349,4 @@ const syncPackageDependencies = async() => {
}
};

syncPackageDependencies();
syncPackageDependencies( parseArguments( process.argv.slice( 2 ) ) );