From 55c8e411375452bc2638881858d92ccf67b700d2 Mon Sep 17 00:00:00 2001 From: Brendan Kellam Date: Thu, 17 Jul 2025 12:03:13 -0700 Subject: [PATCH] docs: Add instructions for using GitHub fine grained PATs (#384) --- docs/docs/connections/github.mdx | 24 +++++++++++++++--- .../images/github_pat_scopes_fine_grained.png | Bin 0 -> 23443 bytes 2 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 docs/images/github_pat_scopes_fine_grained.png diff --git a/docs/docs/connections/github.mdx b/docs/docs/connections/github.mdx index 2a86cecc..2f31994e 100644 --- a/docs/docs/connections/github.mdx +++ b/docs/docs/connections/github.mdx @@ -104,11 +104,29 @@ Sourcebot can sync code from GitHub.com, GitHub Enterprise Server, and GitHub En ## Authenticating with GitHub -In order to index private repositories, you'll need to generate a GitHub Personal Access Token (PAT). Create a new PAT [here](https://github.com/settings/tokens/new) and make sure you select the `repo` scope: +In order to index private repositories, you'll need to generate a access token and provide it to Sourcebot. GitHub provides [two types](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#types-of-personal-access-tokens) of access tokens: -![GitHub PAT Scope](/images/github_pat_scopes.png) -Next, provide the PAT via the `token` property, either as an environment variable or a secret: + + + Create a new fine-grained PAT [here](https://github.com/settings/personal-access-tokens/new). First, select the resource owner and the repositories that you want Sourcebot to have access to. + + Next, under "Repository permissions", select permissions `Contents` and `Metadata` with access `Read-only`. The permissions should look like the following: + + ![GitHub PAT Scope](/images/github_pat_scopes_fine_grained.png) + + [GitHub docs](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#fine-grained-personal-access-tokens) + + + Create a new PAT [here](https://github.com/settings/tokens/new) and make sure you select the `repo` scope: + + ![GitHub PAT Scope](/images/github_pat_scopes.png) + + [GitHub docs](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#personal-access-tokens-classic) + + + +Next, provide the access token via the `token` property, either as an environment variable or a secret: diff --git a/docs/images/github_pat_scopes_fine_grained.png b/docs/images/github_pat_scopes_fine_grained.png new file mode 100644 index 0000000000000000000000000000000000000000..66342a728f7b65de4d93ce63f66bfed183f4732e GIT binary patch literal 23443 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