From f036a2b79e68ed2fc4ad5e554c1a3bc88d8ddb65 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:03:51 +0000 Subject: [PATCH 1/7] Initial plan From 8bb7125e63493d89fcdd61e0b4dec822c0073bb0 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:07:58 +0000 Subject: [PATCH 2/7] Add error check when commands are not found in cmd_dump Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- features/scaffold-package-readme.feature | 1 - src/ScaffoldPackageCommand.php | 3 --- 2 files changed, 4 deletions(-) diff --git a/features/scaffold-package-readme.feature b/features/scaffold-package-readme.feature index 4b64bab..f1ae8ab 100644 --- a/features/scaffold-package-readme.feature +++ b/features/scaffold-package-readme.feature @@ -294,7 +294,6 @@ Feature: Scaffold a README.md file for an existing package *This README.md is generated dynamically from the project's codebase """ - @broken Scenario: Error when commands are specified but not present Given an empty directory And a foo/composer.json file: diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index 8f1f2a7..65c97de 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -332,12 +332,9 @@ public function package_readme( $args, $assoc_args ) { } } while ( $parent_command && $bits ); - /* This check doesn't work because of the way the commands are fetched. - * Needs bigger refactor to put this check back in. if ( empty( $parent_command ) ) { WP_CLI::error( 'Missing one or more commands defined in composer.json -> extra -> commands.' ); } - */ $longdesc = isset( $parent_command['longdesc'] ) ? $parent_command['longdesc'] : ''; $longdesc = (string) preg_replace( '/## GLOBAL PARAMETERS(.+)/s', '', $longdesc ); From c886e71e54303505a319f19da0d2c81f3154f931 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 12:10:30 +0000 Subject: [PATCH 3/7] Improve error message to include specific missing command Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- features/scaffold-package-readme.feature | 2 +- src/ScaffoldPackageCommand.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/features/scaffold-package-readme.feature b/features/scaffold-package-readme.feature index f1ae8ab..9cbbe6f 100644 --- a/features/scaffold-package-readme.feature +++ b/features/scaffold-package-readme.feature @@ -313,7 +313,7 @@ Feature: Scaffold a README.md file for an existing package When I try `wp scaffold package-readme foo` Then STDERR should be: """ - Error: Missing one or more commands defined in composer.json -> extra -> commands. + Error: Command 'profile' is not registered. Make sure it is loaded before running package-readme. """ And the return code should be 1 diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index 65c97de..6796b52 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -333,7 +333,7 @@ public function package_readme( $args, $assoc_args ) { } while ( $parent_command && $bits ); if ( empty( $parent_command ) ) { - WP_CLI::error( 'Missing one or more commands defined in composer.json -> extra -> commands.' ); + WP_CLI::error( "Command '{$command}' is not registered. Make sure it is loaded before running package-readme." ); } $longdesc = isset( $parent_command['longdesc'] ) ? $parent_command['longdesc'] : ''; From 38026ac3f4cb143b6aaacbb5b0847f301fac4f01 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 23:19:57 +0000 Subject: [PATCH 4/7] Load command file when generating README during scaffold When wp scaffold package creates a new package, it now explicitly loads the command file (hello-world-command.php) before calling package-readme. This ensures the command is registered in WP-CLI so it can be properly documented in the generated README. Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/ScaffoldPackageCommand.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index 6796b52..27507d6 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -139,7 +139,9 @@ public function package( $args, $assoc_args ) { } if ( ! Utils\get_flag_value( $assoc_args, 'skip-readme' ) ) { - WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => false ) ); + // Load the command before generating the README so it can be documented + $command_file = "{$package_dir}/hello-world-command.php"; + WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag} --require={$command_file}", array( 'launch' => false ) ); } if ( ! Utils\get_flag_value( $assoc_args, 'skip-github' ) ) { From f7d8cef6d904aa41f6cfbb0fc481e741a4e53f27 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Wed, 14 Jan 2026 23:27:44 +0000 Subject: [PATCH 5/7] Use launch=true to load wp-cli.yml when scaffolding README Changed package-readme call to use launch=true instead of launch=false. This spawns a new WP-CLI process that automatically loads the wp-cli.yml file from the package directory, which in turn loads the command file. This is cleaner than hardcoding the command filename. Co-authored-by: swissspidy <841956+swissspidy@users.noreply.github.com> --- src/ScaffoldPackageCommand.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index 27507d6..61a83bf 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -139,9 +139,7 @@ public function package( $args, $assoc_args ) { } if ( ! Utils\get_flag_value( $assoc_args, 'skip-readme' ) ) { - // Load the command before generating the README so it can be documented - $command_file = "{$package_dir}/hello-world-command.php"; - WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag} --require={$command_file}", array( 'launch' => false ) ); + WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => true ) ); } if ( ! Utils\get_flag_value( $assoc_args, 'skip-github' ) ) { From 4eb8169bdfe7869262e354388ba8f61abff671e2 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 15 Jan 2026 12:13:58 +0100 Subject: [PATCH 6/7] partial revert, add another test --- features/scaffold-package-readme.feature | 20 +++++++++++++++----- src/ScaffoldPackageCommand.php | 11 ++++++----- 2 files changed, 21 insertions(+), 10 deletions(-) diff --git a/features/scaffold-package-readme.feature b/features/scaffold-package-readme.feature index 9cbbe6f..0333909 100644 --- a/features/scaffold-package-readme.feature +++ b/features/scaffold-package-readme.feature @@ -32,7 +32,7 @@ Feature: Scaffold a README.md file for an existing package When I run `wp package path` Then save STDOUT as {PACKAGE_PATH} - When I run `wp scaffold package wp-cli/default-readme` + When I try `wp scaffold package wp-cli/default-readme` Then STDOUT should contain: """ Success: Created package readme. @@ -66,7 +66,7 @@ Feature: Scaffold a README.md file for an existing package When I run `wp package path` Then save STDOUT as {PACKAGE_PATH} - When I run `wp scaffold package wp-cli/custom-branch` + When I try `wp scaffold package wp-cli/custom-branch` Then STDOUT should contain: """ Success: Created package readme. @@ -90,7 +90,7 @@ Feature: Scaffold a README.md file for an existing package Scenario: Scaffold a README.md requiring a nightly build Given an empty directory - When I run `wp scaffold package wp-cli/foo --dir=foo --require_wp_cli='>=0.24.0-alpha'` + When I try `wp scaffold package wp-cli/foo --dir=foo --require_wp_cli='>=0.24.0-alpha'` Then STDOUT should contain: """ Success: Created package readme. @@ -115,7 +115,7 @@ Feature: Scaffold a README.md file for an existing package Scenario: Scaffold a README.md requiring the latest stable release Given an empty directory - When I run `wp scaffold package wp-cli/foo --dir=foo --require_wp_cli='*'` + When I try `wp scaffold package wp-cli/foo --dir=foo --require_wp_cli='*'` Then STDOUT should contain: """ Success: Created package readme. @@ -313,10 +313,20 @@ Feature: Scaffold a README.md file for an existing package When I try `wp scaffold package-readme foo` Then STDERR should be: """ - Error: Command 'profile' is not registered. Make sure it is loaded before running package-readme. + Error: Missing one or more commands defined in composer.json -> extra -> commands. """ And the return code should be 1 + Scenario: Does not error when commands are specified and present + Given an empty directory + When I try `wp scaffold package wp-cli/foo --dir=foo` + And I try `composer install -d foo` + And I try `wp scaffold package-readme foo` + Then STDERR should not contain: + """ + Error: Missing one or more commands defined in composer.json -> extra -> commands. + """ + Scenario: README for a bundled command Given an empty directory And a foo/composer.json file: diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index 61a83bf..d6bdf2b 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -139,7 +139,7 @@ public function package( $args, $assoc_args ) { } if ( ! Utils\get_flag_value( $assoc_args, 'skip-readme' ) ) { - WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => true ) ); + WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => false ) ); } if ( ! Utils\get_flag_value( $assoc_args, 'skip-github' ) ) { @@ -309,9 +309,10 @@ public function package_readme( $args, $assoc_args ) { $cmd_dump = WP_CLI::runcommand( 'cli cmd-dump', [ - 'launch' => false, - 'return' => true, - 'parse' => 'json', + 'launch' => false, + 'return' => true, + 'parse' => 'json', + 'command_args' => [ "--path=$package_dir" ], ] ); foreach ( $composer_obj['extra']['commands'] as $command ) { @@ -333,7 +334,7 @@ public function package_readme( $args, $assoc_args ) { } while ( $parent_command && $bits ); if ( empty( $parent_command ) ) { - WP_CLI::error( "Command '{$command}' is not registered. Make sure it is loaded before running package-readme." ); + WP_CLI::error( 'Missing one or more commands defined in composer.json -> extra -> commands.' ); } $longdesc = isset( $parent_command['longdesc'] ) ? $parent_command['longdesc'] : ''; From 362f7c71e60215846c9c30009a99c30c055e9589 Mon Sep 17 00:00:00 2001 From: Pascal Birchler Date: Thu, 15 Jan 2026 12:46:47 +0100 Subject: [PATCH 7/7] first install, then readme --- src/ScaffoldPackageCommand.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/ScaffoldPackageCommand.php b/src/ScaffoldPackageCommand.php index d6bdf2b..ca6f2d6 100644 --- a/src/ScaffoldPackageCommand.php +++ b/src/ScaffoldPackageCommand.php @@ -138,17 +138,18 @@ public function package( $args, $assoc_args ) { WP_CLI::runcommand( "scaffold package-tests {$package_dir} {$force_flag}", array( 'launch' => false ) ); } - if ( ! Utils\get_flag_value( $assoc_args, 'skip-readme' ) ) { - WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => false ) ); - } - if ( ! Utils\get_flag_value( $assoc_args, 'skip-github' ) ) { WP_CLI::runcommand( "scaffold package-github {$package_dir} {$force_flag}", array( 'launch' => false ) ); } if ( ! Utils\get_flag_value( $assoc_args, 'skip-install' ) ) { + Process::create( "composer install --working-dir {$package_dir}" )->run(); WP_CLI::runcommand( "package install {$package_dir}", array( 'launch' => false ) ); } + + if ( ! Utils\get_flag_value( $assoc_args, 'skip-readme' ) ) { + WP_CLI::runcommand( "scaffold package-readme {$package_dir} {$force_flag}", array( 'launch' => false ) ); + } } /**