Skip to content

Commit aefee93

Browse files
authored
CLI: Show clear error for non-existent WordPress versions (#3065)
* Validate WordPress version against available versions in CLI site create When a user specifies a non-existent WordPress version via --wp flag, the command now fails early with a clear error listing available versions instead of proceeding through all setup steps and failing with a generic server startup error. * Validate WordPress version before interactive prompts Move the version availability check to the top of the handler so it fails immediately when --wp is passed with a non-existent version, instead of after the user fills in all interactive prompts. * Validate and resolve WordPress version in CLI site create When --wp flag specifies a non-existent version, show a clear error listing available versions instead of failing with a generic server error. Short versions like "6.7" are resolved to full versions like "6.7.2" with a log message showing the resolution. * Start spinner before version validation to fix silent output picospinner requires the spinner to be running for fail/succeed to render output. Start it with a "Checking WordPress version" message before fetching available versions.
1 parent 57328c3 commit aefee93

1 file changed

Lines changed: 49 additions & 0 deletions

File tree

‎apps/cli/commands/site/create.ts‎

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -638,6 +638,55 @@ export const registerCommand = ( yargs: StudioArgv ) => {
638638
let adminPassword = argv.adminPassword;
639639
let adminEmail = argv.adminEmail;
640640

641+
// Validate and resolve the WordPress version against available versions before prompting
642+
if ( wpVersion && wpVersion !== 'latest' && wpVersion !== 'nightly' ) {
643+
try {
644+
logger.reportStart( LoggerAction.VALIDATE, __( 'Checking WordPress version…' ) );
645+
const availableVersions = await fetchWordPressVersions();
646+
const matchedVersion = availableVersions.find(
647+
( v ) => v.value === wpVersion || v.value.startsWith( wpVersion + '.' )
648+
);
649+
if ( ! matchedVersion ) {
650+
const versionLabels = availableVersions
651+
.filter( ( v ) => v.value !== 'latest' )
652+
.map( ( v ) => v.label );
653+
logger.reportError(
654+
new LoggerError(
655+
sprintf(
656+
/* translators: %1$s: requested version, %2$s: list of available versions */
657+
__( 'WordPress version "%1$s" is not available. Available versions: %2$s' ),
658+
wpVersion,
659+
versionLabels.join( ', ' )
660+
)
661+
)
662+
);
663+
return;
664+
}
665+
// Resolve short versions to full versions (e.g. "6.7" → "6.7.2")
666+
if ( matchedVersion.value !== wpVersion ) {
667+
logger.reportSuccess(
668+
sprintf(
669+
/* translators: %1$s: requested version, %2$s: resolved version */
670+
__( 'WordPress version: %1$s → %2$s' ),
671+
wpVersion,
672+
matchedVersion.value
673+
)
674+
);
675+
} else {
676+
logger.reportSuccess(
677+
sprintf(
678+
/* translators: %s: WordPress version */
679+
__( 'WordPress version: %s' ),
680+
wpVersion
681+
)
682+
);
683+
}
684+
wpVersion = matchedVersion.value;
685+
} catch {
686+
// If we can't fetch versions (network issue), let it proceed and fail later
687+
}
688+
}
689+
641690
try {
642691
if ( process.stdin.isTTY ) {
643692
if ( ! siteName ) {

0 commit comments

Comments
 (0)