feat(nx-cloud): remove env variable for login (#27791)

<!-- Please make sure you have read the submission guidelines before
posting an PR -->
<!--
https://github.com/nrwl/nx/blob/master/CONTRIBUTING.md#-submitting-a-pr
-->

<!-- Please make sure that your commit message follows our format -->
<!-- Example: `fix(nx): must begin with lowercase` -->

<!-- If this is a particularly complex change or feature addition, you
can request a dedicated Nx release for this pull request branch. Mention
someone from the Nx team or the `@nrwl/nx-pipelines-reviewers` and they
will confirm if the PR warrants its own release for testing purposes,
and generate it for you if appropriate. -->

## Current Behavior
<!-- This is the behavior we have today -->

You need to use NX_ENABLE_LOGIN=true to connect to Nx Cloud with
nxCloudId. Documentation also is hidden for `nx login` and `nx logout`
aliases.

## Expected Behavior
<!-- This is the behavior we should expect with the changes in this PR
-->

`nx connect` automatically connects via nxCloudId. Documentation shows
up for `nx login` and `nx logout` commands.

## Related Issue(s)
<!-- Please link the issue being fixed so it gets closed when this is
merged. -->

Fixes #
This commit is contained in:
Louie Weng 2024-09-05 19:23:54 +02:00 committed by GitHub
parent 4068ecb6a7
commit f6f928f3b0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
13 changed files with 187 additions and 81 deletions

View File

@ -0,0 +1,25 @@
---
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. |

View File

@ -0,0 +1,24 @@
---
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. |

View File

@ -8712,6 +8712,22 @@
"isExternal": false, "isExternal": false,
"children": [], "children": [],
"disableCollapsible": false "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, "isExternal": false,

View File

@ -1967,6 +1967,28 @@
"path": "/nx-api/nx/documents/add", "path": "/nx-api/nx/documents/add",
"tags": [], "tags": [],
"originalFilePath": "generated/cli/add" "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", "root": "/packages/nx",

View File

@ -1946,6 +1946,28 @@
"path": "nx/documents/add", "path": "nx/documents/add",
"tags": [], "tags": [],
"originalFilePath": "generated/cli/add" "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": [ "executors": [

View File

@ -0,0 +1,25 @@
---
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. |

View File

@ -0,0 +1,24 @@
---
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. |

View File

@ -2110,6 +2110,16 @@
"name": "add", "name": "add",
"id": "add", "id": "add",
"file": "generated/cli/add" "file": "generated/cli/add"
},
{
"name": "login",
"id": "login",
"file": "generated/cli/login"
},
{
"name": "logout",
"id": "logout",
"file": "generated/cli/logout"
} }
] ]
}, },

View File

@ -559,6 +559,8 @@
- [view-logs](/nx-api/nx/documents/view-logs) - [view-logs](/nx-api/nx/documents/view-logs)
- [release](/nx-api/nx/documents/release) - [release](/nx-api/nx/documents/release)
- [add](/nx-api/nx/documents/add) - [add](/nx-api/nx/documents/add)
- [login](/nx-api/nx/documents/login)
- [logout](/nx-api/nx/documents/logout)
- [executors](/nx-api/nx/executors) - [executors](/nx-api/nx/executors)
- [noop](/nx-api/nx/executors/noop) - [noop](/nx-api/nx/executors/noop)
- [run-commands](/nx-api/nx/executors/run-commands) - [run-commands](/nx-api/nx/executors/run-commands)

View File

@ -21,7 +21,7 @@ describe('connect-to-nx-cloud', () => {
expect( expect(
withEnvironmentVariables( withEnvironmentVariables(
{ {
NX_ENABLE_LOGIN: null, NX_CLOUD_ACCESS_TOKEN: null,
}, },
() => () =>
onlyDefaultRunnerIsUsed({ onlyDefaultRunnerIsUsed({

View File

@ -3,7 +3,7 @@ import { withVerbose } from '../../command-line/yargs-utils/shared-options';
export const yargsLoginCommand: CommandModule = { export const yargsLoginCommand: CommandModule = {
command: 'login [nxCloudUrl]', command: 'login [nxCloudUrl]',
describe: false, describe: 'Login to Nx Cloud.',
builder: (yargs) => builder: (yargs) =>
withVerbose( withVerbose(
yargs.positional('nxCloudUrl', { yargs.positional('nxCloudUrl', {

View File

@ -3,7 +3,7 @@ import { withVerbose } from '../../command-line/yargs-utils/shared-options';
export const yargsLogoutCommand: CommandModule = { export const yargsLogoutCommand: CommandModule = {
command: 'logout', command: 'logout',
describe: false, describe: 'Logout from Nx Cloud.',
builder: (yargs) => withVerbose(yargs), builder: (yargs) => withVerbose(yargs),
handler: async (args: any) => { handler: async (args: any) => {
process.exit(await (await import('./logout')).logoutHandler(args)); process.exit(await (await import('./logout')).logoutHandler(args));

View File

@ -48,28 +48,6 @@ 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( async function createNxCloudWorkspaceV2(
workspaceName: string, workspaceName: string,
installationSource: string, installationSource: string,
@ -125,29 +103,6 @@ export interface ConnectToNxCloudOptions {
generateToken?: boolean; generateToken?: boolean;
} }
function addNxCloudOptionsToNxJson(
tree: Tree,
token: string,
directory: string = ''
) {
const nxJsonPath = join(directory, 'nx.json');
if (tree.exists(nxJsonPath)) {
updateJson<NxJsonConfiguration>(
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( function addNxCloudIdToNxJson(
tree: Tree, tree: Tree,
nxCloudId: string, nxCloudId: string,
@ -208,41 +163,22 @@ export async function connectToNxCloud(
) )
return null; return null;
if (process.env.NX_ENABLE_LOGIN === 'true') { responseFromCreateNxCloudWorkspaceV2 = await createNxCloudWorkspaceV2(
responseFromCreateNxCloudWorkspaceV2 = await createNxCloudWorkspaceV2( getRootPackageName(tree),
getRootPackageName(tree), schema.installationSource,
schema.installationSource, getNxInitDate()
getNxInitDate() );
);
addNxCloudIdToNxJson( addNxCloudIdToNxJson(
tree, tree,
responseFromCreateNxCloudWorkspaceV2?.nxCloudId, responseFromCreateNxCloudWorkspaceV2?.nxCloudId,
schema.directory schema.directory
); );
await formatChangedFilesWithPrettierIfAvailable(tree, { await formatChangedFilesWithPrettierIfAvailable(tree, {
silent: schema.hideFormatLogs, silent: schema.hideFormatLogs,
}); });
return responseFromCreateNxCloudWorkspaceV2.nxCloudId; 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( async function connectToNxCloudGenerator(