Type something to search...
Browse documentation

SCM platforms

ProPR reviews pull requests on four source-control platforms. This page is the shared part: which hosts and authentication modes are supported, how a provider family is switched on, and what every provider connection, scope and reviewer identity is made of. Each platform then has its own page with the values to enter, where to obtain them, its webhook registration and its troubleshooting.

PageCovers
Azure DevOpsAzure DevOps Services and self-hosted Azure DevOps Server
GitHubGitHub Cloud and GitHub Enterprise, by token or App installation
GitLabGitLab.com and self-managed GitLab
ForgejoAny Forgejo host
WebhooksThe webhook configuration every platform registers against

Use these pages when configuring providers in the frontend, or when automating the same setup through the API.

Tenant sign-in providers vs SCM provider connections

This section covers SCM provider connections: the credentials ProPR uses for repository discovery, crawling, and review publication.

Tenant sign-in providers are something else - they only decide how people log in to ProPR. A tenant can configure EntraId, Google, or GitHub as an identity provider over Oidc or Oauth2; see sign-in and sessions. Configuring one does not give ProPR any access to a repository.

Support matrix

ProviderHost Base URLAuthentication kindExtra required fieldsSecret field expects
Azure DevOpshttps://dev.azure.com or https://{org}.visualstudio.comoauthClientCredentialsoAuthTenantId, oAuthClientIdAzure app registration client secret value
Azure DevOpsself-hosted Azure DevOps Server host, for example https://ado-server.example.com/tfspersonalAccessTokennoneAzure DevOps Server PAT
Azure DevOpsself-hosted Azure DevOps Server host, for example https://ado-server.example.com/tfswindowsUserAccountuserNameWindows account password
GitHubhttps://github.com or your GitHub Enterprise base URLpersonalAccessTokennoneGitHub PAT
GitHubhttps://github.com or your GitHub Enterprise base URLappInstallationgitHubAppId, gitHubAppInstallationIdGitHub App private key PEM
GitLabhttps://gitlab.com or your self-managed base URLpersonalAccessTokennoneGitLab PAT
Forgejoyour Forgejo base URL, for example https://codeberg.orgpersonalAccessTokennoneForgejo access token

Any combination not in the table is refused when you save the connection, with an error naming the modes that provider does accept - so you find out at save time rather than at the first connection attempt. appInstallation in particular is GitHub-only.

Enabling a provider family

Only Azure DevOps and GitLab are enabled by default installation-wide. GitHub and Forgejo stay disabled until a platform administrator enables them under Administration → SCM Providers. While a family is disabled, creating a provider connection or a webhook configuration for it is refused with The selected provider family is currently disabled by system administration., and inbound webhook deliveries for it are rejected.

Readiness labels

Once a connection verifies and has at least one enabled scope, ProPR labels it Workflow Complete or Onboarding Ready. Only Azure DevOps Services and GitHub Cloud reach Workflow Complete; every other host variant - self-hosted Azure DevOps Server, GitHub Enterprise, GitLab, Forgejo - stays Onboarding Ready. The label describes how much operational coverage that host variant has, not whether reviews work: discovery, review, and comment publication run either way.

Common provider connection fields

Every provider connection uses the same set of fields; which ones apply depends on the authentication kind.

FieldMeaningNotes
providerFamilyProvider typeOne of azureDevOps, github, gitLab, forgejo
hostBaseUrlProvider host rootThis is the provider host, not a repository URL
authenticationKindCredential modelMust match the support matrix above
userNameNon-secret Windows account loginOnly used for Azure DevOps Server windowsUserAccount
oAuthTenantIdTenant or directory identifierOnly used for Azure DevOps oauthClientCredentials
oAuthClientIdOAuth or app client identifierOnly used for Azure DevOps oauthClientCredentials
gitHubAppIdGitHub App numeric identifierOnly used for GitHub appInstallation
gitHubAppInstallationIdGitHub App installation numeric identifierOnly used for GitHub appInstallation
displayNameFriendly label in the frontendAny descriptive name
secretProtected credential materialSee secrets at rest
isActiveWhether this connection is operationalReview, discovery, and webhook flows use active connections only
storeThreadsArchive this connection’s pull-request comment threadsOpt-in; see data retention below
storeDiffsArchive the per-file diffs of each reviewed incrementOpt-in; see data retention below
retentionDaysHow long archived data is kept, 13650See data retention below

hostBaseUrl must be an HTTPS URL. Plain HTTP is accepted only for loopback, localhost, or private-network addresses, and never for Azure DevOps Server.

The three retention fields appear on the connection form as Data retention. Their defaults, what each one archives, and what the purge sweep does and does not delete are in what ProPR stores.

Provider scope fields

Provider connections define how ProPR authenticates. Provider scopes define what part of the provider the client is allowed to use.

FieldMeaningAzure DevOps example
scopeTypeLogical scope categoryorganization
externalScopeIdProvider-native short identifiermy-org
scopePathCanonical provider URL or pathhttps://dev.azure.com/my-org
displayNameFriendly labelMy Org
isEnabledWhether ProPR may use this scopetrue

For Azure DevOps, the connection host is https://dev.azure.com, while the organization itself is stored as a scope such as https://dev.azure.com/my-org.

Reviewer identity fields

Reviewer identity is configured separately from the provider connection, and belongs to exactly one connection. Resolve it only after that connection and at least one enabled scope verify successfully.

FieldMeaning
externalUserIdProvider-native reviewer identifier
loginNormalized login or unique-name field
displayNameHuman-readable identity name
isBotWhether the identity represents a bot or service account

The easiest way to obtain these values is the reviewer-identity resolve action in the frontend: search for the display name of the user or service account ProPR should act as, then save the returned identity. For Azure DevOps, the stored externalUserId is the VSS identity GUID.

Troubleshooting

Problems specific to one platform are on that platform’s page. These two are shared.

HTTP 400 when saving a connection

RuleApplies to
Hosted Azure DevOps Services accepts only oauthClientCredentials, and hostBaseUrl stays https://dev.azure.comAzure DevOps
Self-hosted Azure DevOps Server accepts only personalAccessToken or windowsUserAccount, over HTTPSAzure DevOps
oAuthTenantId and oAuthClientId are both required for oauthClientCredentials, and rejected on an Azure DevOps Server windowsUserAccount connectionAzure DevOps
userName is required for windowsUserAccount and must be empty for every other authentication kindAzure DevOps
Switching between Azure DevOps authentication modes requires a replacement secret for the new modeAzure DevOps
gitHubAppId and gitHubAppInstallationId are both required for appInstallation, and rejected on any other connection or authentication kindGitHub
Switching between PAT and App mode means secret must carry the other credential type - a PAT one way, a private key PEM the otherGitHub
retentionDays must be between 1 and 3650 when setAll

Connection verifies but reviewer identity resolution fails

Check these in order:

  1. The connection is active.
  2. The connection uses a supported authentication kind for that provider.
  3. At least one provider scope exists and is enabled.
  4. The target identity exists in the scope you are searching.
  5. The resolved identity was actually saved, not just looked up.
  6. For Azure DevOps Server, the connection host and the scope URL both use HTTPS, are still reachable from the ProPR runtime, and the certificate is trusted there.

For a symptom that is not about connecting to a host, start at troubleshooting.