# GitHub Auth

First, you'll need to create a GitHub OAuth app for your organisation.

## Creating a GitHub OAuth app

From GitHub, click on your profile picture and chose "Settings":

![Step 1](/nx-cloud/private/images/github_auth_step_1.png)

Then "Developer settings" from the left-hand menu:

![Step 2](/nx-cloud/private/images/github_auth_step_2.png)

Then "OAuth Apps":

![Step 3](/nx-cloud/private/images/github_auth_step_3.png)

And create a new OAuth app:

![Step 4](/nx-cloud/private/images/github_auth_step_4.png)

Give it a name, and a homepage URL. The authorization callback is the important bit. It needs to be in this form:

`[your-nx-cloud-url]/auth/github/callback`

![Step 5](/nx-cloud/private/images/github_auth_step_5.png)

Once you create, keep a note of the Client ID:

![Step 6](/nx-cloud/private/images/github_auth_step_6.png)

And then generate a new client secret, and save it somewhere secure (we'll use it in a bit):

![Step 7](/nx-cloud/private/images/github_auth_step_7.png)

## Configure Nx Cloud Installation

### Using Helm:

```yaml
image:
  tag: 'latest'

nxCloudAppURL: 'https://nx-cloud.myorg.com'

github:
  auth:
    enabled: true

secret:
  name: 'cloudsecret'
  nxCloudMongoServerEndpoint: 'NX_CLOUD_MONGO_SERVER_ENDPOINT'
  githubAuthClientId: 'GITHUB_AUTH_CLIENT_ID'
  githubAuthClientSecret: 'GITHUB_AUTH_CLIENT_SECRET'
```

Note that the secret must contain `GITHUB_AUTH_CLIENT_ID` and `GITHUB_AUTH_CLIENT_SECRET` (
see [Nx Cloud Helm Charts](https://github.com/nrwl/nx-cloud-helm) for more context).

### Not using Helm:

Provide the following env variables to the `nx-cloud-api` container:

- `GITHUB_AUTH_CLIENT_ID`
- `GITHUB_AUTH_CLIENT_SECRET`

> If you are running Nx Cloud as a single container, the two env vars should be provisioned for that container.

## GitHub Enterprise

If you are running an on-premise version of GitHub (Enterprise Server), you will need to configure one additional
environment variable:

`GITHUB_API_URL=https://custom-github-instance.com`

This will point all auth endpoints to your GitHub server (rather the public one).

{% callout type="check" title="Good to know!" %}
The above environment variable, also helps with setting up the GitHub app integration, so you can have Nx Cloud build
stats directly on your pull request. See full set up instructions [here](/nx-cloud/set-up/github).
{% /callout %}
