feat: astro info
command (#7432)
Co-authored-by: Sarah Rainsberger <sarah@rainsberger.ca>
This commit is contained in:
parent
c490eb6e52
commit
6e9c295799
4 changed files with 87 additions and 6 deletions
20
.changeset/happy-donuts-taste.md
Normal file
20
.changeset/happy-donuts-taste.md
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
---
|
||||||
|
'astro': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
Adds a new command `astro info`, useful for sharing debugging information about your current environment when you need help!
|
||||||
|
|
||||||
|
```shell
|
||||||
|
astro info
|
||||||
|
```
|
||||||
|
|
||||||
|
Output
|
||||||
|
|
||||||
|
```
|
||||||
|
Astro version v2.6.6
|
||||||
|
Package manager pnpm
|
||||||
|
Platform darwin
|
||||||
|
Architecture arm64
|
||||||
|
Adapter @astrojs/vercel/serverless
|
||||||
|
Integrations None
|
||||||
|
```
|
|
@ -166,6 +166,7 @@
|
||||||
"vfile": "^5.3.7",
|
"vfile": "^5.3.7",
|
||||||
"vite": "^4.3.9",
|
"vite": "^4.3.9",
|
||||||
"vitefu": "^0.2.4",
|
"vitefu": "^0.2.4",
|
||||||
|
"which-pm": "^2.0.0",
|
||||||
"yargs-parser": "^21.1.1",
|
"yargs-parser": "^21.1.1",
|
||||||
"zod": "^3.20.6"
|
"zod": "^3.20.6"
|
||||||
},
|
},
|
||||||
|
|
|
@ -19,6 +19,7 @@ import { formatConfigErrorMessage, formatErrorMessage, printHelp } from '../core
|
||||||
import * as event from '../events/index.js';
|
import * as event from '../events/index.js';
|
||||||
import { eventConfigError, eventError, telemetry } from '../events/index.js';
|
import { eventConfigError, eventError, telemetry } from '../events/index.js';
|
||||||
import { openInBrowser } from './open.js';
|
import { openInBrowser } from './open.js';
|
||||||
|
import { arch, platform } from 'node:os';
|
||||||
|
|
||||||
type Arguments = yargs.Arguments;
|
type Arguments = yargs.Arguments;
|
||||||
type CLICommand =
|
type CLICommand =
|
||||||
|
@ -32,6 +33,7 @@ type CLICommand =
|
||||||
| 'reload'
|
| 'reload'
|
||||||
| 'sync'
|
| 'sync'
|
||||||
| 'check'
|
| 'check'
|
||||||
|
| 'info'
|
||||||
| 'telemetry';
|
| 'telemetry';
|
||||||
|
|
||||||
/** Display --help flag */
|
/** Display --help flag */
|
||||||
|
@ -47,6 +49,7 @@ function printAstroHelp() {
|
||||||
['check', 'Check your project for errors.'],
|
['check', 'Check your project for errors.'],
|
||||||
['dev', 'Start the development server.'],
|
['dev', 'Start the development server.'],
|
||||||
['docs', 'Open documentation in your web browser.'],
|
['docs', 'Open documentation in your web browser.'],
|
||||||
|
['info', 'List info about your current Astro setup.'],
|
||||||
['preview', 'Preview your build locally.'],
|
['preview', 'Preview your build locally.'],
|
||||||
['sync', 'Generate content collection types.'],
|
['sync', 'Generate content collection types.'],
|
||||||
['telemetry', 'Configure telemetry settings.'],
|
['telemetry', 'Configure telemetry settings.'],
|
||||||
|
@ -71,6 +74,56 @@ async function printVersion() {
|
||||||
console.log(` ${colors.bgGreen(colors.black(` astro `))} ${colors.green(`v${ASTRO_VERSION}`)}`);
|
console.log(` ${colors.bgGreen(colors.black(` astro `))} ${colors.green(`v${ASTRO_VERSION}`)}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async function printInfo({
|
||||||
|
cwd,
|
||||||
|
flags,
|
||||||
|
logging,
|
||||||
|
}: {
|
||||||
|
cwd?: string;
|
||||||
|
flags?: Flags;
|
||||||
|
logging: LogOptions;
|
||||||
|
}) {
|
||||||
|
const whichPm = await import('which-pm');
|
||||||
|
const packageManager = await whichPm.default(process.cwd());
|
||||||
|
let adapter = "Couldn't determine.";
|
||||||
|
let integrations = [];
|
||||||
|
|
||||||
|
const MAX_PADDING = 25;
|
||||||
|
function printRow(label: string, value: string) {
|
||||||
|
const padding = MAX_PADDING - label.length;
|
||||||
|
console.log(`${colors.bold(label)}` + ' '.repeat(padding) + `${colors.green(value)}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const { userConfig } = await openConfig({
|
||||||
|
cwd,
|
||||||
|
flags,
|
||||||
|
cmd: 'info',
|
||||||
|
logging,
|
||||||
|
});
|
||||||
|
if (userConfig.adapter?.name) {
|
||||||
|
adapter = userConfig.adapter.name;
|
||||||
|
}
|
||||||
|
if (userConfig.integrations) {
|
||||||
|
integrations = (userConfig?.integrations ?? [])
|
||||||
|
.filter(Boolean)
|
||||||
|
.flat()
|
||||||
|
.map((i: any) => i?.name);
|
||||||
|
}
|
||||||
|
} catch (_e) {}
|
||||||
|
console.log();
|
||||||
|
printRow('Astro version', `v${ASTRO_VERSION}`);
|
||||||
|
printRow('Package manager', packageManager.name);
|
||||||
|
printRow('Platform', platform());
|
||||||
|
printRow('Architecture', arch());
|
||||||
|
printRow('Adapter', adapter);
|
||||||
|
let integrationsString = "None or couldn't determine.";
|
||||||
|
if (integrations.length > 0) {
|
||||||
|
integrationsString = integrations.join(', ');
|
||||||
|
}
|
||||||
|
printRow('Integrations', integrationsString);
|
||||||
|
}
|
||||||
|
|
||||||
/** Determine which command the user requested */
|
/** Determine which command the user requested */
|
||||||
function resolveCommand(flags: Arguments): CLICommand {
|
function resolveCommand(flags: Arguments): CLICommand {
|
||||||
const cmd = flags._[2] as string;
|
const cmd = flags._[2] as string;
|
||||||
|
@ -85,6 +138,7 @@ function resolveCommand(flags: Arguments): CLICommand {
|
||||||
'preview',
|
'preview',
|
||||||
'check',
|
'check',
|
||||||
'docs',
|
'docs',
|
||||||
|
'info',
|
||||||
]);
|
]);
|
||||||
if (supportedCommands.has(cmd)) {
|
if (supportedCommands.has(cmd)) {
|
||||||
return cmd as CLICommand;
|
return cmd as CLICommand;
|
||||||
|
@ -116,7 +170,11 @@ async function handleConfigError(
|
||||||
**/
|
**/
|
||||||
async function runCommand(cmd: string, flags: yargs.Arguments) {
|
async function runCommand(cmd: string, flags: yargs.Arguments) {
|
||||||
const root = flags.root;
|
const root = flags.root;
|
||||||
|
// logLevel
|
||||||
|
let logging: LogOptions = {
|
||||||
|
dest: nodeLogDestination,
|
||||||
|
level: 'info',
|
||||||
|
};
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
case 'help':
|
case 'help':
|
||||||
printAstroHelp();
|
printAstroHelp();
|
||||||
|
@ -124,13 +182,12 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
|
||||||
case 'version':
|
case 'version':
|
||||||
await printVersion();
|
await printVersion();
|
||||||
return process.exit(0);
|
return process.exit(0);
|
||||||
|
case 'info': {
|
||||||
|
await printInfo({ cwd: root, flags, logging });
|
||||||
|
return process.exit(0);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// logLevel
|
|
||||||
let logging: LogOptions = {
|
|
||||||
dest: nodeLogDestination,
|
|
||||||
level: 'info',
|
|
||||||
};
|
|
||||||
if (flags.verbose) {
|
if (flags.verbose) {
|
||||||
logging.level = 'debug';
|
logging.level = 'debug';
|
||||||
enableVerboseLogging();
|
enableVerboseLogging();
|
||||||
|
|
|
@ -643,6 +643,9 @@ importers:
|
||||||
vitefu:
|
vitefu:
|
||||||
specifier: ^0.2.4
|
specifier: ^0.2.4
|
||||||
version: 0.2.4(vite@4.3.9)
|
version: 0.2.4(vite@4.3.9)
|
||||||
|
which-pm:
|
||||||
|
specifier: ^2.0.0
|
||||||
|
version: 2.0.0
|
||||||
yargs-parser:
|
yargs-parser:
|
||||||
specifier: ^21.1.1
|
specifier: ^21.1.1
|
||||||
version: 21.1.1
|
version: 21.1.1
|
||||||
|
|
Loading…
Reference in a new issue