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

Improve Package Detection #8306

Merged
merged 12 commits into from
Sep 6, 2023
13 changes: 13 additions & 0 deletions .changeset/friendly-clocks-act.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
'create-astro': patch
'@astrojs/telemetry': patch
jacobdalamb marked this conversation as resolved.
Show resolved Hide resolved
'astro': patch
---

Update preferred-pm and which-pm-runs packages as the latest versions now support Bun.

Standardized variable naming by changing all instances of pkgManager to packageManager to ensure consistent wording throughout the codebase.

`bunx astro add` command correctly uses bun.

Telemetry notice returns package manager.
jacobdalamb marked this conversation as resolved.
Show resolved Hide resolved
4 changes: 2 additions & 2 deletions packages/astro/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@
"ora": "^7.0.1",
"p-limit": "^4.0.0",
"path-to-regexp": "^6.2.1",
"preferred-pm": "^3.0.3",
"preferred-pm": "^3.1.2",
"prompts": "^2.4.2",
"rehype": "^12.0.1",
"resolve": "^1.22.4",
Expand All @@ -172,7 +172,7 @@
"vfile": "^5.3.7",
"vite": "^4.4.9",
"vitefu": "^0.2.4",
"which-pm": "^2.0.0",
"which-pm": "^2.1.1",
"yargs-parser": "^21.1.1",
"zod": "3.21.1"
},
Expand Down
2 changes: 2 additions & 0 deletions packages/astro/src/cli/add/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -620,6 +620,8 @@ async function getInstallIntegrationsCommand({
return { pm: 'yarn', command: 'add', flags: [], dependencies };
case 'pnpm':
return { pm: 'pnpm', command: 'add', flags: [], dependencies };
case 'bun':
return { pm: 'bun', command: 'add', flags: [], dependencies };
default:
return null;
}
Expand Down
5 changes: 4 additions & 1 deletion packages/astro/src/cli/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
import * as colors from 'kleur/colors';
import yargs from 'yargs-parser';
import { ASTRO_VERSION } from '../core/constants.js';
import whichPm from 'which-pm';

type CLICommand =
| 'help'
Expand Down Expand Up @@ -127,8 +128,10 @@ async function runCommand(cmd: string, flags: yargs.Arguments) {
process.env.NODE_ENV = cmd === 'dev' ? 'development' : 'production';
}

const packageManager = (await whichPm(process.cwd())).name ?? 'npm';

const { notify } = await import('./telemetry/index.js');
await notify();
await notify(packageManager);
jacobdalamb marked this conversation as resolved.
Show resolved Hide resolved

// These commands uses the logging and user config. All commands are assumed to have been handled
// by the end of this switch statement.
Expand Down
2 changes: 2 additions & 0 deletions packages/astro/src/cli/install-package.ts
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ function getInstallCommand(packages: string[], packageManager: string) {
return { pm: 'yarn', command: 'add', flags: [], dependencies: packages };
case 'pnpm':
return { pm: 'pnpm', command: 'add', flags: [], dependencies: packages };
case 'bun':
return { pm: 'bun', command: 'add', flags: [], dependencies: packages };
default:
return null;
}
Expand Down
4 changes: 2 additions & 2 deletions packages/astro/src/cli/telemetry/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,9 @@ interface TelemetryOptions {
flags: yargs.Arguments;
}

export async function notify() {
export async function notify(packageManager = 'npm') {
await telemetry.notify(() => {
console.log(msg.telemetryNotice() + '\n');
console.log(msg.telemetryNotice(packageManager) + '\n');
return true;
});
}
Expand Down
4 changes: 2 additions & 2 deletions packages/astro/src/core/messages.ts
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,10 @@ export function serverStart({
.join('\n');
}

export function telemetryNotice() {
export function telemetryNotice(packageManager = 'npm') {
const headline = `${cyan('◆')} Astro collects completely anonymous usage data.`;
const why = dim(' This optional program helps shape our roadmap.');
const disable = dim(' Run `npm run astro telemetry disable` to opt-out.');
const disable = dim(` Run \`${packageManager} run astro telemetry disable\` to opt-out.`);
const details = ` Details: ${underline('https://astro.build/telemetry')}`;
return [headline, why, disable, details].map((v) => ' ' + v).join('\n');
}
Expand Down
6 changes: 3 additions & 3 deletions packages/create-astro/src/actions/context.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ export interface Context {
help: boolean;
prompt: typeof prompt;
cwd: string;
pkgManager: string;
packageManager: string;
username: string;
version: string;
skipHouston: boolean;
Expand Down Expand Up @@ -51,7 +51,7 @@ export async function getContext(argv: string[]): Promise<Context> {
{ argv, permissive: true }
);

const pkgManager = detectPackageManager()?.name ?? 'npm';
const packageManager = detectPackageManager()?.name ?? 'npm';
const [username, version] = await Promise.all([getName(), getVersion()]);
let cwd = flags['_'][0];
let {
Expand Down Expand Up @@ -85,7 +85,7 @@ export async function getContext(argv: string[]): Promise<Context> {
const context: Context = {
help,
prompt,
pkgManager,
packageManager,
username,
version,
skipHouston,
Expand Down
14 changes: 7 additions & 7 deletions packages/create-astro/src/actions/dependencies.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import { shell } from '../shell.js';
import type { Context } from './context';

export async function dependencies(
ctx: Pick<Context, 'install' | 'yes' | 'prompt' | 'pkgManager' | 'cwd' | 'dryRun'>
ctx: Pick<Context, 'install' | 'yes' | 'prompt' | 'packageManager' | 'cwd' | 'dryRun'>
) {
let deps = ctx.install ?? ctx.yes;
if (deps === undefined) {
Expand All @@ -25,15 +25,15 @@ export async function dependencies(
await info('--dry-run', `Skipping dependency installation`);
} else if (deps) {
await spinner({
start: `Installing dependencies with ${ctx.pkgManager}...`,
start: `Installing dependencies with ${ctx.packageManager}...`,
end: 'Dependencies installed',
while: () => {
return install({ pkgManager: ctx.pkgManager, cwd: ctx.cwd }).catch((e) => {
return install({ packageManager: ctx.packageManager, cwd: ctx.cwd }).catch((e) => {
error('error', e);
error(
'error',
`Dependencies failed to install, please run ${color.bold(
ctx.pkgManager + ' install'
ctx.packageManager + ' install'
)} to install them manually after setup.`
);
});
Expand All @@ -47,9 +47,9 @@ export async function dependencies(
}
}

async function install({ pkgManager, cwd }: { pkgManager: string; cwd: string }) {
if (pkgManager === 'yarn') await ensureYarnLock({ cwd });
return shell(pkgManager, ['install'], { cwd, timeout: 90_000, stdio: 'ignore' });
async function install({ packageManager, cwd }: { packageManager: string; cwd: string }) {
if (packageManager === 'yarn') await ensureYarnLock({ cwd });
return shell(packageManager, ['install'], { cwd, timeout: 90_000, stdio: 'ignore' });
}

async function ensureYarnLock({ cwd }: { cwd: string }) {
Expand Down
17 changes: 10 additions & 7 deletions packages/create-astro/src/actions/next-steps.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,14 +3,17 @@ import type { Context } from './context';

import { nextSteps, say } from '../messages.js';

export async function next(ctx: Pick<Context, 'cwd' | 'pkgManager' | 'skipHouston'>) {
export async function next(ctx: Pick<Context, 'cwd' | 'packageManager' | 'skipHouston'>) {
let projectDir = path.relative(process.cwd(), ctx.cwd);
const devCmd =
ctx.pkgManager === 'npm'
? 'npm run dev'
: ctx.pkgManager === 'bun'
? 'bun run dev'
: `${ctx.pkgManager} dev`;

const commandMap: { [key: string]: string } = {
npm: 'npm run dev',
bun: 'bun run dev',
yarn: 'yarn dev',
pnpm: 'pnpm dev',
};

const devCmd = commandMap[ctx.packageManager as keyof typeof commandMap] || 'npm run dev';
await nextSteps({ projectDir, devCmd });

if (!ctx.skipHouston) {
Expand Down
10 changes: 5 additions & 5 deletions packages/create-astro/test/dependencies.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ describe('dependencies', () => {
const context = {
cwd: '',
yes: true,
pkgManager: 'npm',
packageManager: 'npm',
dryRun: true,
prompt: () => ({ deps: true }),
};
Expand All @@ -21,7 +21,7 @@ describe('dependencies', () => {
it('prompt yes', async () => {
const context = {
cwd: '',
pkgManager: 'npm',
packageManager: 'npm',
dryRun: true,
prompt: () => ({ deps: true }),
install: undefined,
Expand All @@ -34,7 +34,7 @@ describe('dependencies', () => {
it('prompt no', async () => {
const context = {
cwd: '',
pkgManager: 'npm',
packageManager: 'npm',
dryRun: true,
prompt: () => ({ deps: false }),
install: undefined,
Expand All @@ -48,7 +48,7 @@ describe('dependencies', () => {
const context = {
cwd: '',
install: true,
pkgManager: 'npm',
packageManager: 'npm',
dryRun: true,
prompt: () => ({ deps: false }),
};
Expand All @@ -61,7 +61,7 @@ describe('dependencies', () => {
const context = {
cwd: '',
install: false,
pkgManager: 'npm',
packageManager: 'npm',
dryRun: true,
prompt: () => ({ deps: false }),
};
Expand Down
4 changes: 2 additions & 2 deletions packages/create-astro/test/next.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,14 @@ describe('next steps', () => {
const fixture = setup();

it('no arguments', async () => {
await next({ skipHouston: false, cwd: './it/fixtures/not-empty', pkgManager: 'npm' });
await next({ skipHouston: false, cwd: './it/fixtures/not-empty', packageManager: 'npm' });
expect(fixture.hasMessage('Liftoff confirmed.')).to.be.true;
expect(fixture.hasMessage('npm run dev')).to.be.true;
expect(fixture.hasMessage('Good luck out there, astronaut!')).to.be.true;
});

it('--skip-houston', async () => {
await next({ skipHouston: true, cwd: './it/fixtures/not-empty', pkgManager: 'npm' });
await next({ skipHouston: true, cwd: './it/fixtures/not-empty', packageManager: 'npm' });
expect(fixture.hasMessage('Good luck out there, astronaut!')).to.be.false;
});
});
22 changes: 15 additions & 7 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.