diff --git a/packages/create-nx-workspace/package.json b/packages/create-nx-workspace/package.json index 448090fc841..480a53e9e3d 100644 --- a/packages/create-nx-workspace/package.json +++ b/packages/create-nx-workspace/package.json @@ -34,6 +34,7 @@ "chalk": "catalog:", "enquirer": "catalog:", "flat": "^5.0.2", + "open": "^8.4.0", "ora": "5.3.0", "tmp": "~0.2.1", "tslib": "catalog:typescript", diff --git a/packages/create-nx-workspace/src/create-workspace.ts b/packages/create-nx-workspace/src/create-workspace.ts index 0fad971332b..d886e8701c3 100644 --- a/packages/create-nx-workspace/src/create-workspace.ts +++ b/packages/create-nx-workspace/src/create-workspace.ts @@ -16,6 +16,7 @@ import { createNxCloudOnboardingUrl, getNxCloudInfo, getSkippedNxCloudInfo, + openCloudSetupUrl, readNxCloudToken, setNeverConnectToCloud, } from './utils/nx/nx-cloud'; @@ -287,6 +288,11 @@ export async function createWorkspace( options.completionMessageKey, name ); + + // Auto-open the Cloud setup URL in the browser when user selected 'yes' + if (!options.skipCloudConnect) { + await openCloudSetupUrl(connectUrl); + } } else if (isTemplate && (nxCloud === 'skip' || nxCloud === 'never')) { // Strip marker comments from README const readmeUpdated = addConnectUrlToReadme(directory, undefined); diff --git a/packages/create-nx-workspace/src/utils/nx/nx-cloud.ts b/packages/create-nx-workspace/src/utils/nx/nx-cloud.ts index 2f36a40df77..b0f0e540f19 100644 --- a/packages/create-nx-workspace/src/utils/nx/nx-cloud.ts +++ b/packages/create-nx-workspace/src/utils/nx/nx-cloud.ts @@ -1,4 +1,5 @@ import { VcsPushStatus } from '../git/git'; +import { isCI } from '../ci/is-ci'; import { CLIOutput } from '../output'; import { getCompletionMessage, @@ -148,6 +149,19 @@ export function getSkippedNxCloudInfo() { return out.getOutput(); } +export async function openCloudSetupUrl(connectUrl: string): Promise { + if (isCI()) { + return; + } + + try { + const open = require('open'); + await open(connectUrl); + } catch { + // Fail gracefully — the URL is already displayed in the terminal banner + } +} + export function setNeverConnectToCloud(directory: string): void { const { readFileSync, writeFileSync } = require('fs'); const { join } = require('path'); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c99ceb72b1..f82e86970cb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -2745,6 +2745,9 @@ importers: flat: specifier: ^5.0.2 version: 5.0.2 + open: + specifier: ^8.4.0 + version: 8.4.2 ora: specifier: 5.3.0 version: 5.3.0