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
6 changes: 6 additions & 0 deletions .changeset/friendly-clocks-act.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
'create-astro': patch
'astro': patch
---

Support detecting Bun when logging messages with package manager information.
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
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
5 changes: 4 additions & 1 deletion packages/astro/src/cli/telemetry/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@
import type yargs from 'yargs-parser';
import * as msg from '../../core/messages.js';
import { telemetry } from '../../events/index.js';
import whichPm from 'which-pm';

interface TelemetryOptions {
flags: yargs.Arguments;
}


export async function notify() {
const packageManager = (await whichPm(process.cwd())).name ?? '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.