diff --git a/docs/generated/cli/login.md b/docs/generated/cli/login.md deleted file mode 100644 index 2172c0f61d..0000000000 --- a/docs/generated/cli/login.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 'login - CLI command' -description: 'Login to Nx Cloud' ---- - -# login - -Login to Nx Cloud - -## Usage - -```shell -nx login [nxCloudUrl] -``` - -Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`. - -## Options - -| Option | Type | Description | -| -------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--help` | boolean | Show help | -| `--nxCloudUrl` | string | The Nx Cloud URL of the instance you are trying to connect to. If no positional argument is provided, this command will connect to https://cloud.nx.app. | -| `--verbose` | boolean | Prints additional information about the commands (e.g., stack traces) | -| `--version` | boolean | Show version number | diff --git a/docs/generated/cli/logout.md b/docs/generated/cli/logout.md deleted file mode 100644 index 9c7863e254..0000000000 --- a/docs/generated/cli/logout.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 'logout - CLI command' -description: 'Logout from Nx Cloud' ---- - -# logout - -Logout from Nx Cloud - -## Usage - -```shell -nx logout -``` - -Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`. - -## Options - -| Option | Type | Description | -| ----------- | ------- | --------------------------------------------------------------------- | -| `--help` | boolean | Show help | -| `--verbose` | boolean | Prints additional information about the commands (e.g., stack traces) | -| `--version` | boolean | Show version number | diff --git a/docs/generated/manifests/menus.json b/docs/generated/manifests/menus.json index f9261f0a50..e7580f4d8b 100644 --- a/docs/generated/manifests/menus.json +++ b/docs/generated/manifests/menus.json @@ -8712,22 +8712,6 @@ "isExternal": false, "children": [], "disableCollapsible": false - }, - { - "name": "login", - "path": "/nx-api/nx/documents/login", - "id": "login", - "isExternal": false, - "children": [], - "disableCollapsible": false - }, - { - "name": "logout", - "path": "/nx-api/nx/documents/logout", - "id": "logout", - "isExternal": false, - "children": [], - "disableCollapsible": false } ], "isExternal": false, diff --git a/docs/generated/manifests/nx-api.json b/docs/generated/manifests/nx-api.json index 7634ba456a..f6db8ce949 100644 --- a/docs/generated/manifests/nx-api.json +++ b/docs/generated/manifests/nx-api.json @@ -1967,28 +1967,6 @@ "path": "/nx-api/nx/documents/add", "tags": [], "originalFilePath": "generated/cli/add" - }, - "/nx-api/nx/documents/login": { - "id": "login", - "name": "login", - "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.", - "file": "generated/packages/nx/documents/login", - "itemList": [], - "isExternal": false, - "path": "/nx-api/nx/documents/login", - "tags": [], - "originalFilePath": "generated/cli/login" - }, - "/nx-api/nx/documents/logout": { - "id": "logout", - "name": "logout", - "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.", - "file": "generated/packages/nx/documents/logout", - "itemList": [], - "isExternal": false, - "path": "/nx-api/nx/documents/logout", - "tags": [], - "originalFilePath": "generated/cli/logout" } }, "root": "/packages/nx", diff --git a/docs/generated/packages-metadata.json b/docs/generated/packages-metadata.json index 61e869d0fa..ef779f9643 100644 --- a/docs/generated/packages-metadata.json +++ b/docs/generated/packages-metadata.json @@ -1946,28 +1946,6 @@ "path": "nx/documents/add", "tags": [], "originalFilePath": "generated/cli/add" - }, - { - "id": "login", - "name": "login", - "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.", - "file": "generated/packages/nx/documents/login", - "itemList": [], - "isExternal": false, - "path": "nx/documents/login", - "tags": [], - "originalFilePath": "generated/cli/login" - }, - { - "id": "logout", - "name": "logout", - "description": "The core Nx plugin contains the core functionality of Nx like the project graph, nx commands and task orchestration.", - "file": "generated/packages/nx/documents/logout", - "itemList": [], - "isExternal": false, - "path": "nx/documents/logout", - "tags": [], - "originalFilePath": "generated/cli/logout" } ], "executors": [ diff --git a/docs/generated/packages/nx/documents/login.md b/docs/generated/packages/nx/documents/login.md deleted file mode 100644 index 2172c0f61d..0000000000 --- a/docs/generated/packages/nx/documents/login.md +++ /dev/null @@ -1,25 +0,0 @@ ---- -title: 'login - CLI command' -description: 'Login to Nx Cloud' ---- - -# login - -Login to Nx Cloud - -## Usage - -```shell -nx login [nxCloudUrl] -``` - -Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`. - -## Options - -| Option | Type | Description | -| -------------- | ------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `--help` | boolean | Show help | -| `--nxCloudUrl` | string | The Nx Cloud URL of the instance you are trying to connect to. If no positional argument is provided, this command will connect to https://cloud.nx.app. | -| `--verbose` | boolean | Prints additional information about the commands (e.g., stack traces) | -| `--version` | boolean | Show version number | diff --git a/docs/generated/packages/nx/documents/logout.md b/docs/generated/packages/nx/documents/logout.md deleted file mode 100644 index 9c7863e254..0000000000 --- a/docs/generated/packages/nx/documents/logout.md +++ /dev/null @@ -1,24 +0,0 @@ ---- -title: 'logout - CLI command' -description: 'Logout from Nx Cloud' ---- - -# logout - -Logout from Nx Cloud - -## Usage - -```shell -nx logout -``` - -Install `nx` globally to invoke the command directly using `nx`, or use `npx nx`, `yarn nx`, or `pnpm nx`. - -## Options - -| Option | Type | Description | -| ----------- | ------- | --------------------------------------------------------------------- | -| `--help` | boolean | Show help | -| `--verbose` | boolean | Prints additional information about the commands (e.g., stack traces) | -| `--version` | boolean | Show version number | diff --git a/docs/map.json b/docs/map.json index e1ff9b318a..03b9cfd734 100644 --- a/docs/map.json +++ b/docs/map.json @@ -2110,16 +2110,6 @@ "name": "add", "id": "add", "file": "generated/cli/add" - }, - { - "name": "login", - "id": "login", - "file": "generated/cli/login" - }, - { - "name": "logout", - "id": "logout", - "file": "generated/cli/logout" } ] }, diff --git a/docs/shared/reference/sitemap.md b/docs/shared/reference/sitemap.md index 4c198654e0..dcbf398232 100644 --- a/docs/shared/reference/sitemap.md +++ b/docs/shared/reference/sitemap.md @@ -559,8 +559,6 @@ - [view-logs](/nx-api/nx/documents/view-logs) - [release](/nx-api/nx/documents/release) - [add](/nx-api/nx/documents/add) - - [login](/nx-api/nx/documents/login) - - [logout](/nx-api/nx/documents/logout) - [executors](/nx-api/nx/executors) - [noop](/nx-api/nx/executors/noop) - [run-commands](/nx-api/nx/executors/run-commands) diff --git a/packages/nx/src/command-line/connect/connect-to-nx-cloud.spec.ts b/packages/nx/src/command-line/connect/connect-to-nx-cloud.spec.ts index 691950b0bb..77b146f297 100644 --- a/packages/nx/src/command-line/connect/connect-to-nx-cloud.spec.ts +++ b/packages/nx/src/command-line/connect/connect-to-nx-cloud.spec.ts @@ -21,7 +21,7 @@ describe('connect-to-nx-cloud', () => { expect( withEnvironmentVariables( { - NX_CLOUD_ACCESS_TOKEN: null, + NX_ENABLE_LOGIN: null, }, () => onlyDefaultRunnerIsUsed({ diff --git a/packages/nx/src/command-line/login/command-object.ts b/packages/nx/src/command-line/login/command-object.ts index 9d8ad15c83..48c0fbf434 100644 --- a/packages/nx/src/command-line/login/command-object.ts +++ b/packages/nx/src/command-line/login/command-object.ts @@ -3,7 +3,7 @@ import { withVerbose } from '../../command-line/yargs-utils/shared-options'; export const yargsLoginCommand: CommandModule = { command: 'login [nxCloudUrl]', - describe: 'Login to Nx Cloud', + describe: false, builder: (yargs) => withVerbose( yargs.positional('nxCloudUrl', { diff --git a/packages/nx/src/command-line/logout/command-object.ts b/packages/nx/src/command-line/logout/command-object.ts index 840fae0842..f75dc51807 100644 --- a/packages/nx/src/command-line/logout/command-object.ts +++ b/packages/nx/src/command-line/logout/command-object.ts @@ -3,7 +3,7 @@ import { withVerbose } from '../../command-line/yargs-utils/shared-options'; export const yargsLogoutCommand: CommandModule = { command: 'logout', - describe: 'Logout from Nx Cloud', + describe: false, builder: (yargs) => withVerbose(yargs), handler: async (args: any) => { process.exit(await (await import('./logout')).logoutHandler(args)); diff --git a/packages/nx/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.ts b/packages/nx/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.ts index acf9da15f6..36fc6b1880 100644 --- a/packages/nx/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.ts +++ b/packages/nx/src/nx-cloud/generators/connect-to-nx-cloud/connect-to-nx-cloud.ts @@ -48,6 +48,28 @@ function getNxInitDate(): string | null { } } +async function createNxCloudWorkspaceV1( + workspaceName: string, + installationSource: string, + nxInitDate: string | null +): Promise<{ token: string; url: string }> { + const apiUrl = getCloudUrl(); + const response = await require('axios').post( + `${apiUrl}/nx-cloud/create-org-and-workspace`, + { + workspaceName, + installationSource, + nxInitDate, + } + ); + + if (response.data.message) { + throw new Error(response.data.message); + } + + return response.data; +} + async function createNxCloudWorkspaceV2( workspaceName: string, installationSource: string, @@ -103,6 +125,29 @@ export interface ConnectToNxCloudOptions { generateToken?: boolean; } +function addNxCloudOptionsToNxJson( + tree: Tree, + token: string, + directory: string = '' +) { + const nxJsonPath = join(directory, 'nx.json'); + if (tree.exists(nxJsonPath)) { + updateJson( + tree, + join(directory, 'nx.json'), + (nxJson) => { + const overrideUrl = process.env.NX_CLOUD_API || process.env.NRWL_API; + if (overrideUrl) { + nxJson.nxCloudUrl = overrideUrl; + } + nxJson.nxCloudAccessToken = token; + + return nxJson; + } + ); + } +} + function addNxCloudIdToNxJson( tree: Tree, nxCloudId: string, @@ -140,6 +185,12 @@ export async function connectToNxCloud( const isGitHubDetected = schema.github ?? (await repoUsesGithub(schema.github)); + let responseFromCreateNxCloudWorkspaceV1: + | { + token: string; + } + | undefined; + let responseFromCreateNxCloudWorkspaceV2: | { nxCloudId: string; @@ -157,22 +208,41 @@ export async function connectToNxCloud( ) return null; - responseFromCreateNxCloudWorkspaceV2 = await createNxCloudWorkspaceV2( - getRootPackageName(tree), - schema.installationSource, - getNxInitDate() - ); + if (process.env.NX_ENABLE_LOGIN === 'true') { + responseFromCreateNxCloudWorkspaceV2 = await createNxCloudWorkspaceV2( + getRootPackageName(tree), + schema.installationSource, + getNxInitDate() + ); - addNxCloudIdToNxJson( - tree, - responseFromCreateNxCloudWorkspaceV2?.nxCloudId, - schema.directory - ); + addNxCloudIdToNxJson( + tree, + responseFromCreateNxCloudWorkspaceV2?.nxCloudId, + schema.directory + ); - await formatChangedFilesWithPrettierIfAvailable(tree, { - silent: schema.hideFormatLogs, - }); - return responseFromCreateNxCloudWorkspaceV2.nxCloudId; + await formatChangedFilesWithPrettierIfAvailable(tree, { + silent: schema.hideFormatLogs, + }); + return responseFromCreateNxCloudWorkspaceV2.nxCloudId; + } else { + responseFromCreateNxCloudWorkspaceV1 = await createNxCloudWorkspaceV1( + getRootPackageName(tree), + schema.installationSource, + getNxInitDate() + ); + + addNxCloudOptionsToNxJson( + tree, + responseFromCreateNxCloudWorkspaceV1?.token, + schema.directory + ); + + await formatChangedFilesWithPrettierIfAvailable(tree, { + silent: schema.hideFormatLogs, + }); + return responseFromCreateNxCloudWorkspaceV1.token; + } } async function connectToNxCloudGenerator(