diff --git a/docs/docs/connections/bitbucket-cloud.mdx b/docs/docs/connections/bitbucket-cloud.mdx index aa7b47f0..66636b02 100644 --- a/docs/docs/connections/bitbucket-cloud.mdx +++ b/docs/docs/connections/bitbucket-cloud.mdx @@ -5,6 +5,7 @@ sidebarTitle: Bitbucket Cloud import BitbucketToken from '/snippets/bitbucket-token.mdx'; import BitbucketAppPassword from '/snippets/bitbucket-app-password.mdx'; +import BitbucketSchema from '/snippets/schemas/v3/bitbucket.schema.mdx' ## Examples @@ -98,104 +99,6 @@ In order to index private repositories, you'll need to provide authentication cr [schemas/v3/bitbucket.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/bitbucket.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "BitbucketConnectionConfig", - "properties": { - "type": { - "const": "bitbucket", - "description": "Bitbucket configuration" - }, - "user": { - "type": "string", - "description": "The username to use for authentication. Only needed if token is an app password." - }, - "token": { - "$ref": "./shared.json#/definitions/Token", - "description": "An authentication token.", - "examples": [ - { - "secret": "SECRET_KEY" - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://api.bitbucket.org/2.0", - "description": "Bitbucket URL", - "examples": [ - "https://bitbucket.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "deploymentType": { - "type": "string", - "enum": ["cloud", "server"], - "default": "cloud", - "description": "The type of Bitbucket deployment" - }, - "workspaces": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of workspaces to sync. Ignored if deploymentType is server." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of projects to sync" - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of repos to sync" - }, - "exclude": { - "type": "object", - "properties": { - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "cloud_workspace/repo1", - "server_project/repo2" - ] - ], - "description": "List of specific repos to exclude from syncing." - } - }, - "additionalProperties": false - }, - "revisions": { - "$ref": "./shared.json#/definitions/GitRevisions" - } - }, - "required": [ - "type" - ], - "additionalProperties": false -} -``` + \ No newline at end of file diff --git a/docs/docs/connections/bitbucket-data-center.mdx b/docs/docs/connections/bitbucket-data-center.mdx index 451192cb..b80afbfd 100644 --- a/docs/docs/connections/bitbucket-data-center.mdx +++ b/docs/docs/connections/bitbucket-data-center.mdx @@ -5,6 +5,7 @@ sidebarTitle: Bitbucket Data Center import BitbucketToken from '/snippets/bitbucket-token.mdx'; import BitbucketAppPassword from '/snippets/bitbucket-app-password.mdx'; +import BitbucketSchema from '/snippets/schemas/v3/bitbucket.schema.mdx' ## Examples @@ -77,104 +78,6 @@ Next, provide the access token to Sourcebot: [schemas/v3/bitbucket.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/bitbucket.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "BitbucketConnectionConfig", - "properties": { - "type": { - "const": "bitbucket", - "description": "Bitbucket configuration" - }, - "user": { - "type": "string", - "description": "The username to use for authentication. Only needed if token is an app password." - }, - "token": { - "$ref": "./shared.json#/definitions/Token", - "description": "An authentication token.", - "examples": [ - { - "secret": "SECRET_KEY" - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://api.bitbucket.org/2.0", - "description": "Bitbucket URL", - "examples": [ - "https://bitbucket.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "deploymentType": { - "type": "string", - "enum": ["cloud", "server"], - "default": "cloud", - "description": "The type of Bitbucket deployment" - }, - "workspaces": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of workspaces to sync. Ignored if deploymentType is server." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of projects to sync" - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of repos to sync" - }, - "exclude": { - "type": "object", - "properties": { - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "cloud_workspace/repo1", - "server_project/repo2" - ] - ], - "description": "List of specific repos to exclude from syncing." - } - }, - "additionalProperties": false - }, - "revisions": { - "$ref": "./shared.json#/definitions/GitRevisions" - } - }, - "required": [ - "type" - ], - "additionalProperties": false -} -``` + \ No newline at end of file diff --git a/docs/docs/connections/gerrit.mdx b/docs/docs/connections/gerrit.mdx index b1dc525c..29bb627b 100644 --- a/docs/docs/connections/gerrit.mdx +++ b/docs/docs/connections/gerrit.mdx @@ -3,6 +3,8 @@ title: Linking code from Gerrit sidebarTitle: Gerrit --- +import GerritSchema from '/snippets/schemas/v3/gerrit.schema.mdx' + Authenticating with Gerrit is currently not supported. If you need this capability, please raise a [feature request](https://github.com/sourcebot-dev/sourcebot/discussions/categories/ideas). Sourcebot can sync code from self-hosted gerrit instances. @@ -69,73 +71,6 @@ To connect to a gerrit instance, provide the `url` property to your config: [schemas/v3/gerrit.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/gerrit.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GerritConnectionConfig", - "properties": { - "type": { - "const": "gerrit", - "description": "Gerrit Configuration" - }, - "url": { - "type": "string", - "format": "url", - "description": "The URL of the Gerrit host.", - "examples": [ - "https://gerrit.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", - "examples": [ - [ - "project1/repo1", - "project2/**" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "project1/repo1", - "project2/**" - ] - ], - "description": "List of specific projects to exclude from syncing." - }, - "readOnly": { - "type": "boolean", - "default": false, - "description": "Exclude read-only projects from syncing." - }, - "hidden": { - "type": "boolean", - "default": false, - "description": "Exclude hidden projects from syncing." - } - }, - "additionalProperties": false - } - }, - "required": [ - "type", - "url" - ], - "additionalProperties": false -} -``` + + \ No newline at end of file diff --git a/docs/docs/connections/gitea.mdx b/docs/docs/connections/gitea.mdx index 17be8275..7e670d2d 100644 --- a/docs/docs/connections/gitea.mdx +++ b/docs/docs/connections/gitea.mdx @@ -3,6 +3,8 @@ title: Linking code from Gitea sidebarTitle: Gitea --- +import GiteaSchema from '/snippets/schemas/v3/gitea.schema.mdx' + Sourcebot can sync code from Gitea Cloud, and self-hosted. ## Examples @@ -143,166 +145,6 @@ To connect to a custom Gitea deployment, provide the `url` property to your conf [schemas/v3/gitea.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/gitea.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GiteaConnectionConfig", - "properties": { - "type": { - "const": "gitea", - "description": "Gitea Configuration" - }, - "token": { - "description": "A Personal Access Token (PAT).", - "examples": [ - { - "secret": "SECRET_KEY" - } - ], - "anyOf": [ - { - "type": "object", - "properties": { - "secret": { - "type": "string", - "description": "The name of the secret that contains the token." - } - }, - "required": [ - "secret" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "env": { - "type": "string", - "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." - } - }, - "required": [ - "env" - ], - "additionalProperties": false - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://gitea.com", - "description": "The URL of the Gitea host. Defaults to https://gitea.com", - "examples": [ - "https://gitea.com", - "https://gitea.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "orgs": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-org-name" - ] - ], - "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." - }, - "repos": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+\\/[\\w.-]+$" - }, - "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." - }, - "users": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "username-1", - "username-2" - ] - ], - "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." - } - }, - "additionalProperties": false - }, - "revisions": { - "type": "object", - "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", - "properties": { - "branches": { - "type": "array", - "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "main", - "release/*" - ], - [ - "**" - ] - ], - "default": [] - }, - "tags": { - "type": "array", - "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "latest", - "v2.*.*" - ], - [ - "**" - ] - ], - "default": [] - } - }, - "additionalProperties": false - } - }, - "required": [ - "type" - ], - "additionalProperties": false -} -``` + + \ No newline at end of file diff --git a/docs/docs/connections/github.mdx b/docs/docs/connections/github.mdx index 52165c68..58a1d59f 100644 --- a/docs/docs/connections/github.mdx +++ b/docs/docs/connections/github.mdx @@ -3,6 +3,8 @@ title: Linking code from GitHub sidebarTitle: GitHub --- +import GitHubSchema from '/snippets/schemas/v3/github.schema.mdx' + Sourcebot can sync code from GitHub.com, GitHub Enterprise Server, and GitHub Enterprise Cloud. ## Examples @@ -172,220 +174,6 @@ To connect to a GitHub host other than `github.com`, provide the `url` property [schemas/v3/github.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/github.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GithubConnectionConfig", - "properties": { - "type": { - "const": "github", - "description": "GitHub Configuration" - }, - "token": { - "description": "A Personal Access Token (PAT).", - "examples": [ - { - "secret": "SECRET_KEY" - } - ], - "anyOf": [ - { - "type": "object", - "properties": { - "secret": { - "type": "string", - "description": "The name of the secret that contains the token." - } - }, - "required": [ - "secret" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "env": { - "type": "string", - "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." - } - }, - "required": [ - "env" - ], - "additionalProperties": false - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://github.com", - "description": "The URL of the GitHub host. Defaults to https://github.com", - "examples": [ - "https://github.com", - "https://github.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "users": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+$" - }, - "default": [], - "examples": [ - [ - "torvalds", - "DHH" - ] - ], - "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." - }, - "orgs": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+$" - }, - "default": [], - "examples": [ - [ - "my-org-name" - ], - [ - "sourcebot-dev", - "commaai" - ] - ], - "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." - }, - "repos": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+\\/[\\w.-]+$" - }, - "default": [], - "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "default": [], - "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", - "examples": [ - [ - "docs", - "core" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", - "examples": [ - [ - "tests", - "ci" - ] - ] - }, - "size": { - "type": "object", - "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", - "properties": { - "min": { - "type": "integer", - "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." - }, - "max": { - "type": "integer", - "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "revisions": { - "type": "object", - "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", - "properties": { - "branches": { - "type": "array", - "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "main", - "release/*" - ], - [ - "**" - ] - ], - "default": [] - }, - "tags": { - "type": "array", - "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "latest", - "v2.*.*" - ], - [ - "**" - ] - ], - "default": [] - } - }, - "additionalProperties": false - } - }, - "required": [ - "type" - ], - "additionalProperties": false -} -``` + \ No newline at end of file diff --git a/docs/docs/connections/gitlab.mdx b/docs/docs/connections/gitlab.mdx index 63fe10a8..87f01661 100644 --- a/docs/docs/connections/gitlab.mdx +++ b/docs/docs/connections/gitlab.mdx @@ -3,6 +3,8 @@ title: Linking code from GitLab sidebarTitle: GitLab --- +import GitLabSchema from '/snippets/schemas/v3/gitlab.schema.mdx' + Sourcebot can sync code from GitLab.com, Self Managed (CE & EE), and Dedicated. @@ -177,208 +179,6 @@ To connect to a GitLab host other than `gitlab.com`, provide the `url` property [schemas/v3/gitlab.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/gitlab.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GitlabConnectionConfig", - "properties": { - "type": { - "const": "gitlab", - "description": "GitLab Configuration" - }, - "token": { - "description": "An authentication token.", - "examples": [ - { - "secret": "SECRET_KEY" - } - ], - "anyOf": [ - { - "type": "object", - "properties": { - "secret": { - "type": "string", - "description": "The name of the secret that contains the token." - } - }, - "required": [ - "secret" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "env": { - "type": "string", - "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." - } - }, - "required": [ - "env" - ], - "additionalProperties": false - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://gitlab.com", - "description": "The URL of the GitLab host. Defaults to https://gitlab.com", - "examples": [ - "https://gitlab.com", - "https://gitlab.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "all": { - "type": "boolean", - "default": false, - "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." - }, - "users": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." - }, - "groups": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-group" - ], - [ - "my-group/sub-group-a", - "my-group/sub-group-b" - ] - ], - "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-group/my-project" - ], - [ - "my-group/my-sub-group/my-project" - ] - ], - "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", - "examples": [ - [ - "docs", - "core" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked projects from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived projects from syncing." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "examples": [ - [ - "my-group/my-project" - ] - ], - "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", - "examples": [ - [ - "tests", - "ci" - ] - ] - } - }, - "additionalProperties": false - }, - "revisions": { - "type": "object", - "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", - "properties": { - "branches": { - "type": "array", - "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "main", - "release/*" - ], - [ - "**" - ] - ], - "default": [] - }, - "tags": { - "type": "array", - "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "latest", - "v2.*.*" - ], - [ - "**" - ] - ], - "default": [] - } - }, - "additionalProperties": false - } - }, - "required": [ - "type" - ], - "additionalProperties": false -} -``` + + \ No newline at end of file diff --git a/docs/self-hosting/more/declarative-config.mdx b/docs/self-hosting/more/declarative-config.mdx index 43e75a02..233f365c 100644 --- a/docs/self-hosting/more/declarative-config.mdx +++ b/docs/self-hosting/more/declarative-config.mdx @@ -3,6 +3,8 @@ title: Configuring Sourcebot from a file (declarative config) sidebarTitle: Declarative config --- +import ConfigSchema from '/snippets/schemas/v3/index.schema.mdx' + Declaratively defining `connections` is not available when [multi-tenancy](/self-hosting/more/tenancy) is enabled. @@ -34,600 +36,6 @@ Some teams require Sourcebot to be configured via a file (where it can be stored [schemas/v3/index.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/index.json) -```json -{ - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "SourcebotConfig", - "definitions": { - "Settings": { - "type": "object", - "description": "Defines the globabl settings for Sourcebot.", - "properties": { - "maxFileSize": { - "type": "number", - "description": "The maximum size of a file (in bytes) to be indexed. Files that exceed this maximum will not be indexed. Defaults to 2MB.", - "minimum": 1 - }, - "maxTrigramCount": { - "type": "number", - "description": "The maximum number of trigrams per document. Files that exceed this maximum will not be indexed. Default to 20000.", - "minimum": 1 - }, - "reindexIntervalMs": { - "type": "number", - "description": "The interval (in milliseconds) at which the indexer should re-index all repositories. Defaults to 1 hour.", - "minimum": 1 - }, - "resyncConnectionIntervalMs": { - "type": "number", - "description": "The interval (in milliseconds) at which the connection manager should check for connections that need to be re-synced. Defaults to 24 hours.", - "minimum": 1 - }, - "resyncConnectionPollingIntervalMs": { - "type": "number", - "description": "The polling rate (in milliseconds) at which the db should be checked for connections that need to be re-synced. Defaults to 1 second.", - "minimum": 1 - }, - "reindexRepoPollingIntervalMs": { - "type": "number", - "description": "The polling rate (in milliseconds) at which the db should be checked for repos that should be re-indexed. Defaults to 1 second.", - "minimum": 1 - }, - "maxConnectionSyncJobConcurrency": { - "type": "number", - "description": "The number of connection sync jobs to run concurrently. Defaults to 8.", - "minimum": 1 - }, - "maxRepoIndexingJobConcurrency": { - "type": "number", - "description": "The number of repo indexing jobs to run concurrently. Defaults to 8.", - "minimum": 1 - }, - "maxRepoGarbageCollectionJobConcurrency": { - "type": "number", - "description": "The number of repo GC jobs to run concurrently. Defaults to 8.", - "minimum": 1 - }, - "repoGarbageCollectionGracePeriodMs": { - "type": "number", - "description": "The grace period (in milliseconds) for garbage collection. Used to prevent deleting shards while they're being loaded. Defaults to 10 seconds.", - "minimum": 1 - }, - "repoIndexTimeoutMs": { - "type": "number", - "description": "The timeout (in milliseconds) for a repo indexing to timeout. Defaults to 2 hours.", - "minimum": 1 - } - }, - "additionalProperties": false - } - }, - "properties": { - "$schema": { - "type": "string" - }, - "settings": { - "$ref": "#/definitions/Settings" - }, - "connections": { - "type": "object", - "description": "Defines a collection of connections from varying code hosts that Sourcebot should sync with. This is only available in single-tenancy mode.", - "patternProperties": { - "^[a-zA-Z0-9_-]+$": { - "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ConnectionConfig", - "oneOf": [ - { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GithubConnectionConfig", - "properties": { - "type": { - "const": "github", - "description": "GitHub Configuration" - }, - "token": { - "description": "A Personal Access Token (PAT).", - "examples": [ - { - "secret": "SECRET_KEY" - } - ], - "anyOf": [ - { - "type": "object", - "properties": { - "secret": { - "type": "string", - "description": "The name of the secret that contains the token." - } - }, - "required": [ - "secret" - ], - "additionalProperties": false - }, - { - "type": "object", - "properties": { - "env": { - "type": "string", - "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." - } - }, - "required": [ - "env" - ], - "additionalProperties": false - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://github.com", - "description": "The URL of the GitHub host. Defaults to https://github.com", - "examples": [ - "https://github.com", - "https://github.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "users": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+$" - }, - "default": [], - "examples": [ - [ - "torvalds", - "DHH" - ] - ], - "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." - }, - "orgs": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+$" - }, - "default": [], - "examples": [ - [ - "my-org-name" - ], - [ - "sourcebot-dev", - "commaai" - ] - ], - "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." - }, - "repos": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+\\/[\\w.-]+$" - }, - "default": [], - "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "default": [], - "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", - "examples": [ - [ - "docs", - "core" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", - "examples": [ - [ - "tests", - "ci" - ] - ] - }, - "size": { - "type": "object", - "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", - "properties": { - "min": { - "type": "integer", - "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." - }, - "max": { - "type": "integer", - "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false - }, - "revisions": { - "type": "object", - "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", - "properties": { - "branches": { - "type": "array", - "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "main", - "release/*" - ], - [ - "**" - ] - ], - "default": [] - }, - "tags": { - "type": "array", - "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", - "items": { - "type": "string" - }, - "examples": [ - [ - "latest", - "v2.*.*" - ], - [ - "**" - ] - ], - "default": [] - } - }, - "additionalProperties": false - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GitlabConnectionConfig", - "properties": { - "type": { - "const": "gitlab", - "description": "GitLab Configuration" - }, - "token": { - "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/token", - "description": "An authentication token.", - "examples": [ - { - "secret": "SECRET_KEY" - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://gitlab.com", - "description": "The URL of the GitLab host. Defaults to https://gitlab.com", - "examples": [ - "https://gitlab.com", - "https://gitlab.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "all": { - "type": "boolean", - "default": false, - "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." - }, - "users": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." - }, - "groups": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-group" - ], - [ - "my-group/sub-group-a", - "my-group/sub-group-b" - ] - ], - "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-group/my-project" - ], - [ - "my-group/my-sub-group/my-project" - ] - ], - "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "minItems": 1, - "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", - "examples": [ - [ - "docs", - "core" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked projects from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived projects from syncing." - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "examples": [ - [ - "my-group/my-project" - ] - ], - "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" - }, - "topics": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", - "examples": [ - [ - "tests", - "ci" - ] - ] - } - }, - "additionalProperties": false - }, - "revisions": { - "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/revisions" - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GiteaConnectionConfig", - "properties": { - "type": { - "const": "gitea", - "description": "Gitea Configuration" - }, - "token": { - "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/token", - "description": "A Personal Access Token (PAT).", - "examples": [ - { - "secret": "SECRET_KEY" - } - ] - }, - "url": { - "type": "string", - "format": "url", - "default": "https://gitea.com", - "description": "The URL of the Gitea host. Defaults to https://gitea.com", - "examples": [ - "https://gitea.com", - "https://gitea.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "orgs": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "my-org-name" - ] - ], - "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." - }, - "repos": { - "type": "array", - "items": { - "type": "string", - "pattern": "^[\\w.-]+\\/[\\w.-]+$" - }, - "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." - }, - "users": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "username-1", - "username-2" - ] - ], - "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." - }, - "exclude": { - "type": "object", - "properties": { - "forks": { - "type": "boolean", - "default": false, - "description": "Exclude forked repositories from syncing." - }, - "archived": { - "type": "boolean", - "default": false, - "description": "Exclude archived repositories from syncing." - }, - "repos": { - "type": "array", - "items": { - "type": "string" - }, - "default": [], - "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." - } - }, - "additionalProperties": false - }, - "revisions": { - "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/revisions" - } - }, - "required": [ - "type" - ], - "additionalProperties": false - }, - { - "$schema": "http://json-schema.org/draft-07/schema#", - "type": "object", - "title": "GerritConnectionConfig", - "properties": { - "type": { - "const": "gerrit", - "description": "Gerrit Configuration" - }, - "url": { - "type": "string", - "format": "url", - "description": "The URL of the Gerrit host.", - "examples": [ - "https://gerrit.example.com" - ], - "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" - }, - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", - "examples": [ - [ - "project1/repo1", - "project2/**" - ] - ] - }, - "exclude": { - "type": "object", - "properties": { - "projects": { - "type": "array", - "items": { - "type": "string" - }, - "examples": [ - [ - "project1/repo1", - "project2/**" - ] - ], - "description": "List of specific projects to exclude from syncing." - } - }, - "additionalProperties": false - } - }, - "required": [ - "type", - "url" - ], - "additionalProperties": false - } - ] - } - }, - "additionalProperties": false - } - }, - "additionalProperties": false -} -``` + \ No newline at end of file diff --git a/docs/self-hosting/more/search-contexts.mdx b/docs/self-hosting/more/search-contexts.mdx index 9ac7fba4..72257048 100644 --- a/docs/self-hosting/more/search-contexts.mdx +++ b/docs/self-hosting/more/search-contexts.mdx @@ -3,6 +3,8 @@ title: Search contexts sidebarTitle: Search contexts (EE) --- +import SearchContextSchema from '/snippets/schemas/v3/searchContext.schema.mdx' + This is only available in the Enterprise Edition. Please add your [license key](/self-hosting/license-key) to activate it. @@ -108,46 +110,9 @@ See [this doc](/docs/more/syntax-reference) for more details on the search query ## Schema reference -```json -{ - "type": "object", - "description": "Search context", - "properties": { - "include": { - "type": "array", - "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", - "items": { - "type": "string" - }, - "examples": [ - [ - "github.com/sourcebot-dev/**", - "gerrit.example.org/sub/path/**" - ] - ] - }, - "exclude": { - "type": "array", - "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", - "items": { - "type": "string" - }, - "examples": [ - [ - "github.com/sourcebot-dev/sourcebot", - "gerrit.example.org/sub/path/**" - ] - ] - }, - "description": { - "type": "string", - "description": "Optional description of the search context that surfaces in the UI." - } - }, - "required": [ - "include" - ], - "additionalProperties": false -} -``` + +[schemas/v3/searchContext.json](https://github.com/sourcebot-dev/sourcebot/blob/main/schemas/v3/searchContext.json) + + + diff --git a/docs/snippets/schemas/v1/index.schema.mdx b/docs/snippets/schemas/v1/index.schema.mdx new file mode 100644 index 00000000..03548861 --- /dev/null +++ b/docs/snippets/schemas/v1/index.schema.mdx @@ -0,0 +1,138 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "definitions": { + "RepoNameRegexIncludeFilter": { + "type": "string", + "description": "Only clone repos whose name matches the given regexp.", + "format": "regexp", + "default": "^(foo|bar)$" + }, + "RepoNameRegexExcludeFilter": { + "type": "string", + "description": "Don't mirror repos whose names match this regexp.", + "format": "regexp", + "default": "^(fizz|buzz)$" + }, + "ZoektConfig": { + "anyOf": [ + { + "$ref": "#/definitions/GitHubConfig" + }, + { + "$ref": "#/definitions/GitLabConfig" + } + ] + }, + "GitHubConfig": { + "type": "object", + "properties": { + "Type": { + "const": "github" + }, + "GitHubUrl": { + "type": "string", + "description": "GitHub Enterprise url. If not set github.com will be used as the host." + }, + "GitHubUser": { + "type": "string", + "description": "The GitHub user to mirror" + }, + "GitHubOrg": { + "type": "string", + "description": "The GitHub organization to mirror" + }, + "Name": { + "$ref": "#/definitions/RepoNameRegexIncludeFilter" + }, + "Exclude": { + "$ref": "#/definitions/RepoNameRegexExcludeFilter" + }, + "CredentialPath": { + "type": "string", + "description": "Path to a file containing a GitHub access token.", + "default": "~/.github-token" + }, + "Topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Only mirror repos that have one of the given topics" + }, + "ExcludeTopics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Don't mirror repos that have one of the given topics" + }, + "NoArchived": { + "type": "boolean", + "description": "Mirror repos that are _not_ archived", + "default": false + }, + "IncludeForks": { + "type": "boolean", + "description": "Also mirror forks", + "default": false + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + }, + "GitLabConfig": { + "type": "object", + "properties": { + "Type": { + "const": "gitlab" + }, + "GitLabURL": { + "type": "string", + "description": "The GitLab API url.", + "default": "https://gitlab.com/api/v4/" + }, + "Name": { + "$ref": "#/definitions/RepoNameRegexIncludeFilter" + }, + "Exclude": { + "$ref": "#/definitions/RepoNameRegexExcludeFilter" + }, + "OnlyPublic": { + "type": "boolean", + "description": "Only mirror public repos", + "default": false + }, + "CredentialPath": { + "type": "string", + "description": "Path to a file containing a GitLab access token.", + "default": "~/.gitlab-token" + } + }, + "required": [ + "Type" + ], + "additionalProperties": false + } + }, + "properties": { + "$schema": { + "type": "string" + }, + "Configs": { + "type": "array", + "items": { + "$ref": "#/definitions/ZoektConfig" + } + } + }, + "required": [ + "Configs" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v2/index.schema.mdx b/docs/snippets/schemas/v2/index.schema.mdx new file mode 100644 index 00000000..c2627a1d --- /dev/null +++ b/docs/snippets/schemas/v2/index.schema.mdx @@ -0,0 +1,643 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "Sourcebot configuration schema", + "description": "A Sourcebot configuration file outlines which repositories Sourcebot should sync and index.", + "definitions": { + "Token": { + "anyOf": [ + { + "type": "string" + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "GitRevisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + }, + "GitHubConfig": { + "type": "object", + "properties": { + "type": { + "const": "github", + "description": "GitHub Configuration" + }, + "token": { + "$ref": "#/definitions/Token", + "description": "A Personal Access Token (PAT).", + "examples": [ + "secret-token", + { + "env": "ENV_VAR_CONTAINING_TOKEN" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://github.com", + "description": "The URL of the GitHub host. Defaults to https://github.com", + "examples": [ + "https://github.com", + "https://github.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "users": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "examples": [ + [ + "torvalds", + "DHH" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." + }, + "orgs": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "examples": [ + [ + "my-org-name" + ], + [ + "sourcebot-dev", + "commaai" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + }, + "size": { + "type": "object", + "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", + "properties": { + "min": { + "type": "integer", + "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." + }, + "max": { + "type": "integer", + "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/definitions/GitRevisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + "GitLabConfig": { + "type": "object", + "properties": { + "type": { + "const": "gitlab", + "description": "GitLab Configuration" + }, + "token": { + "$ref": "#/definitions/Token", + "description": "An authentication token.", + "examples": [ + "secret-token", + { + "env": "ENV_VAR_CONTAINING_TOKEN" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitlab.com", + "description": "The URL of the GitLab host. Defaults to https://gitlab.com", + "examples": [ + "https://gitlab.com", + "https://gitlab.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "all": { + "type": "boolean", + "default": false, + "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "groups": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group" + ], + [ + "my-group/sub-group-a", + "my-group/sub-group-b" + ] + ], + "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group/my-project" + ], + [ + "my-group/my-sub-group/my-project" + ] + ], + "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked projects from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived projects from syncing." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "examples": [ + [ + "my-group/my-project" + ] + ], + "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/definitions/GitRevisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + "GiteaConfig": { + "type": "object", + "properties": { + "type": { + "const": "gitea", + "description": "Gitea Configuration" + }, + "token": { + "$ref": "#/definitions/Token", + "description": "An access token.", + "examples": [ + "secret-token", + { + "env": "ENV_VAR_CONTAINING_TOKEN" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitea.com", + "description": "The URL of the Gitea host. Defaults to https://gitea.com", + "examples": [ + "https://gitea.com", + "https://gitea.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "orgs": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-org-name" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "username-1", + "username-2" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/definitions/GitRevisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + "GerritConfig": { + "type": "object", + "properties": { + "type": { + "const": "gerrit", + "description": "Gerrit Configuration" + }, + "url": { + "type": "string", + "format": "url", + "description": "The URL of the Gerrit host.", + "examples": [ + "https://gerrit.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ], + "description": "List of specific projects to exclude from syncing." + } + }, + "additionalProperties": false + } + }, + "required": [ + "type", + "url" + ], + "additionalProperties": false + }, + "LocalConfig": { + "type": "object", + "properties": { + "type": { + "const": "local", + "description": "Local Configuration" + }, + "path": { + "type": "string", + "description": "Path to the local directory to sync with. Relative paths are relative to the configuration file's directory.", + "pattern": ".+" + }, + "watch": { + "type": "boolean", + "default": true, + "description": "Enables a file watcher that will automatically re-sync when changes are made within `path` (recursively). Defaults to true." + }, + "exclude": { + "type": "object", + "properties": { + "paths": { + "type": "array", + "items": { + "type": "string", + "pattern": ".+" + }, + "description": "List of paths relative to the provided `path` to exclude from the index. .git, .hg, and .svn are always exluded.", + "default": [], + "examples": [ + [ + "node_modules", + "bin", + "dist", + "build", + "out" + ] + ] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type", + "path" + ], + "additionalProperties": false + }, + "GitConfig": { + "type": "object", + "properties": { + "type": { + "const": "git", + "description": "Git Configuration" + }, + "url": { + "type": "string", + "format": "url", + "description": "The URL to the git repository." + }, + "revisions": { + "$ref": "#/definitions/GitRevisions" + } + }, + "required": [ + "type", + "url" + ], + "additionalProperties": false + }, + "Repos": { + "anyOf": [ + { + "$ref": "#/definitions/GitHubConfig" + }, + { + "$ref": "#/definitions/GitLabConfig" + }, + { + "$ref": "#/definitions/GiteaConfig" + }, + { + "$ref": "#/definitions/GerritConfig" + }, + { + "$ref": "#/definitions/LocalConfig" + }, + { + "$ref": "#/definitions/GitConfig" + } + ] + }, + "Settings": { + "type": "object", + "description": "Global settings. These settings are applied to all repositories.", + "properties": { + "maxFileSize": { + "type": "integer", + "description": "The maximum size of a file (in bytes) to be indexed. Files that exceed this maximum will not be inexed. Defaults to 2MB (2097152 bytes).", + "default": 2097152, + "minimum": 1 + }, + "maxTrigramCount": { + "type": "integer", + "description": "The maximum amount of trigrams per document. Documents that exceed this maximum will not be indexed. Defaults to 20000", + "default": 20000, + "minimum": 1 + }, + "autoDeleteStaleRepos": { + "type": "boolean", + "description": "Automatically delete stale repositories from the index. Defaults to true.", + "default": true + }, + "reindexInterval": { + "type": "integer", + "description": "The interval (in milliseconds) at which the indexer should re-index all repositories. Repositories are always indexed when first added. Defaults to 1 hour (3600000 milliseconds).", + "default": 3600000, + "minimum": 1 + }, + "resyncInterval": { + "type": "integer", + "description": "The interval (in milliseconds) at which the configuration file should be re-synced. The configuration file is always synced on startup. Defaults to 24 hours (86400000 milliseconds).", + "default": 86400000, + "minimum": 1 + } + }, + "additionalProperties": false + } + }, + "properties": { + "$schema": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/Settings" + }, + "repos": { + "type": "array", + "description": "Defines a collection of repositories from varying code hosts that Sourcebot should sync with.", + "items": { + "$ref": "#/definitions/Repos" + } + } + }, + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/bitbucket.schema.mdx b/docs/snippets/schemas/v3/bitbucket.schema.mdx new file mode 100644 index 00000000..829d0254 --- /dev/null +++ b/docs/snippets/schemas/v3/bitbucket.schema.mdx @@ -0,0 +1,180 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "BitbucketConnectionConfig", + "properties": { + "type": { + "const": "bitbucket", + "description": "Bitbucket configuration" + }, + "user": { + "type": "string", + "description": "The username to use for authentication. Only needed if token is an app password." + }, + "token": { + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://api.bitbucket.org/2.0", + "description": "Bitbucket URL", + "examples": [ + "https://bitbucket.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "deploymentType": { + "type": "string", + "enum": [ + "cloud", + "server" + ], + "default": "cloud", + "description": "The type of Bitbucket deployment" + }, + "workspaces": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of workspaces to sync. Ignored if deploymentType is server." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of projects to sync" + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of repos to sync" + }, + "exclude": { + "type": "object", + "properties": { + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "cloud_workspace/repo1", + "server_project/repo2" + ] + ], + "description": "List of specific repos to exclude from syncing." + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "if": { + "properties": { + "deploymentType": { + "const": "server" + } + } + }, + "then": { + "required": [ + "url" + ] + }, + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/connection.schema.mdx b/docs/snippets/schemas/v3/connection.schema.mdx new file mode 100644 index 00000000..ae905b0b --- /dev/null +++ b/docs/snippets/schemas/v3/connection.schema.mdx @@ -0,0 +1,633 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ConnectionConfig", + "oneOf": [ + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GithubConnectionConfig", + "properties": { + "type": { + "const": "github", + "description": "GitHub Configuration" + }, + "token": { + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://github.com", + "description": "The URL of the GitHub host. Defaults to https://github.com", + "examples": [ + "https://github.com", + "https://github.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "users": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "torvalds", + "DHH" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." + }, + "orgs": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "my-org-name" + ], + [ + "sourcebot-dev", + "commaai" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "default": [], + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "default": [], + "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + }, + "size": { + "type": "object", + "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", + "properties": { + "min": { + "type": "integer", + "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." + }, + "max": { + "type": "integer", + "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GitlabConnectionConfig", + "properties": { + "type": { + "const": "gitlab", + "description": "GitLab Configuration" + }, + "token": { + "$ref": "#/oneOf/0/properties/token", + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitlab.com", + "description": "The URL of the GitLab host. Defaults to https://gitlab.com", + "examples": [ + "https://gitlab.com", + "https://gitlab.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "all": { + "type": "boolean", + "default": false, + "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "groups": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group" + ], + [ + "my-group/sub-group-a", + "my-group/sub-group-b" + ] + ], + "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group/my-project" + ], + [ + "my-group/my-sub-group/my-project" + ] + ], + "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked projects from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived projects from syncing." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "examples": [ + [ + "my-group/my-project" + ] + ], + "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GiteaConnectionConfig", + "properties": { + "type": { + "const": "gitea", + "description": "Gitea Configuration" + }, + "token": { + "$ref": "#/oneOf/0/properties/token", + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitea.com", + "description": "The URL of the Gitea host. Defaults to https://gitea.com", + "examples": [ + "https://gitea.com", + "https://gitea.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "orgs": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-org-name" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "username-1", + "username-2" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GerritConnectionConfig", + "properties": { + "type": { + "const": "gerrit", + "description": "Gerrit Configuration" + }, + "url": { + "type": "string", + "format": "url", + "description": "The URL of the Gerrit host.", + "examples": [ + "https://gerrit.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ], + "description": "List of specific projects to exclude from syncing." + }, + "readOnly": { + "type": "boolean", + "default": false, + "description": "Exclude read-only projects from syncing." + }, + "hidden": { + "type": "boolean", + "default": false, + "description": "Exclude hidden projects from syncing." + } + }, + "additionalProperties": false + } + }, + "required": [ + "type", + "url" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "BitbucketConnectionConfig", + "properties": { + "type": { + "const": "bitbucket", + "description": "Bitbucket configuration" + }, + "user": { + "type": "string", + "description": "The username to use for authentication. Only needed if token is an app password." + }, + "token": { + "$ref": "#/oneOf/0/properties/token", + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://api.bitbucket.org/2.0", + "description": "Bitbucket URL", + "examples": [ + "https://bitbucket.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "deploymentType": { + "type": "string", + "enum": [ + "cloud", + "server" + ], + "default": "cloud", + "description": "The type of Bitbucket deployment" + }, + "workspaces": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of workspaces to sync. Ignored if deploymentType is server." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of projects to sync" + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of repos to sync" + }, + "exclude": { + "type": "object", + "properties": { + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "cloud_workspace/repo1", + "server_project/repo2" + ] + ], + "description": "List of specific repos to exclude from syncing." + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "if": { + "properties": { + "deploymentType": { + "const": "server" + } + } + }, + "then": { + "required": [ + "url" + ] + }, + "additionalProperties": false + } + ] +} +``` diff --git a/docs/snippets/schemas/v3/gerrit.schema.mdx b/docs/snippets/schemas/v3/gerrit.schema.mdx new file mode 100644 index 00000000..561bda80 --- /dev/null +++ b/docs/snippets/schemas/v3/gerrit.schema.mdx @@ -0,0 +1,70 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GerritConnectionConfig", + "properties": { + "type": { + "const": "gerrit", + "description": "Gerrit Configuration" + }, + "url": { + "type": "string", + "format": "url", + "description": "The URL of the Gerrit host.", + "examples": [ + "https://gerrit.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ], + "description": "List of specific projects to exclude from syncing." + }, + "readOnly": { + "type": "boolean", + "default": false, + "description": "Exclude read-only projects from syncing." + }, + "hidden": { + "type": "boolean", + "default": false, + "description": "Exclude hidden projects from syncing." + } + }, + "additionalProperties": false + } + }, + "required": [ + "type", + "url" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/gitea.schema.mdx b/docs/snippets/schemas/v3/gitea.schema.mdx new file mode 100644 index 00000000..f236e3fe --- /dev/null +++ b/docs/snippets/schemas/v3/gitea.schema.mdx @@ -0,0 +1,163 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GiteaConnectionConfig", + "properties": { + "type": { + "const": "gitea", + "description": "Gitea Configuration" + }, + "token": { + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitea.com", + "description": "The URL of the Gitea host. Defaults to https://gitea.com", + "examples": [ + "https://gitea.com", + "https://gitea.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "orgs": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-org-name" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "username-1", + "username-2" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/github.schema.mdx b/docs/snippets/schemas/v3/github.schema.mdx new file mode 100644 index 00000000..1858eee8 --- /dev/null +++ b/docs/snippets/schemas/v3/github.schema.mdx @@ -0,0 +1,216 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GithubConnectionConfig", + "properties": { + "type": { + "const": "github", + "description": "GitHub Configuration" + }, + "token": { + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://github.com", + "description": "The URL of the GitHub host. Defaults to https://github.com", + "examples": [ + "https://github.com", + "https://github.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "users": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "torvalds", + "DHH" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." + }, + "orgs": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "my-org-name" + ], + [ + "sourcebot-dev", + "commaai" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "default": [], + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "default": [], + "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + }, + "size": { + "type": "object", + "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", + "properties": { + "min": { + "type": "integer", + "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." + }, + "max": { + "type": "integer", + "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/gitlab.schema.mdx b/docs/snippets/schemas/v3/gitlab.schema.mdx new file mode 100644 index 00000000..feadeaac --- /dev/null +++ b/docs/snippets/schemas/v3/gitlab.schema.mdx @@ -0,0 +1,205 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GitlabConnectionConfig", + "properties": { + "type": { + "const": "gitlab", + "description": "GitLab Configuration" + }, + "token": { + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitlab.com", + "description": "The URL of the GitLab host. Defaults to https://gitlab.com", + "examples": [ + "https://gitlab.com", + "https://gitlab.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "all": { + "type": "boolean", + "default": false, + "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "groups": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group" + ], + [ + "my-group/sub-group-a", + "my-group/sub-group-b" + ] + ], + "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group/my-project" + ], + [ + "my-group/my-sub-group/my-project" + ] + ], + "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked projects from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived projects from syncing." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "examples": [ + [ + "my-group/my-project" + ] + ], + "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/index.schema.mdx b/docs/snippets/schemas/v3/index.schema.mdx new file mode 100644 index 00000000..5080c70a --- /dev/null +++ b/docs/snippets/schemas/v3/index.schema.mdx @@ -0,0 +1,770 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "SourcebotConfig", + "definitions": { + "Settings": { + "type": "object", + "description": "Defines the global settings for Sourcebot.", + "properties": { + "maxFileSize": { + "type": "number", + "description": "The maximum size of a file (in bytes) to be indexed. Files that exceed this maximum will not be indexed. Defaults to 2MB.", + "minimum": 1 + }, + "maxTrigramCount": { + "type": "number", + "description": "The maximum number of trigrams per document. Files that exceed this maximum will not be indexed. Default to 20000.", + "minimum": 1 + }, + "reindexIntervalMs": { + "type": "number", + "description": "The interval (in milliseconds) at which the indexer should re-index all repositories. Defaults to 1 hour.", + "minimum": 1 + }, + "resyncConnectionIntervalMs": { + "type": "number", + "description": "The interval (in milliseconds) at which the connection manager should check for connections that need to be re-synced. Defaults to 24 hours.", + "minimum": 1 + }, + "resyncConnectionPollingIntervalMs": { + "type": "number", + "description": "The polling rate (in milliseconds) at which the db should be checked for connections that need to be re-synced. Defaults to 1 second.", + "minimum": 1 + }, + "reindexRepoPollingIntervalMs": { + "type": "number", + "description": "The polling rate (in milliseconds) at which the db should be checked for repos that should be re-indexed. Defaults to 1 second.", + "minimum": 1 + }, + "maxConnectionSyncJobConcurrency": { + "type": "number", + "description": "The number of connection sync jobs to run concurrently. Defaults to 8.", + "minimum": 1 + }, + "maxRepoIndexingJobConcurrency": { + "type": "number", + "description": "The number of repo indexing jobs to run concurrently. Defaults to 8.", + "minimum": 1 + }, + "maxRepoGarbageCollectionJobConcurrency": { + "type": "number", + "description": "The number of repo GC jobs to run concurrently. Defaults to 8.", + "minimum": 1 + }, + "repoGarbageCollectionGracePeriodMs": { + "type": "number", + "description": "The grace period (in milliseconds) for garbage collection. Used to prevent deleting shards while they're being loaded. Defaults to 10 seconds.", + "minimum": 1 + }, + "repoIndexTimeoutMs": { + "type": "number", + "description": "The timeout (in milliseconds) for a repo indexing to timeout. Defaults to 2 hours.", + "minimum": 1 + } + }, + "additionalProperties": false + }, + "SearchContext": { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "SearchContext", + "description": "Search context", + "properties": { + "include": { + "type": "array", + "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/**", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "exclude": { + "type": "array", + "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/sourcebot", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "description": { + "type": "string", + "description": "Optional description of the search context that surfaces in the UI." + } + }, + "required": [ + "include" + ], + "additionalProperties": false + } + }, + "properties": { + "$schema": { + "type": "string" + }, + "settings": { + "$ref": "#/definitions/Settings" + }, + "contexts": { + "type": "object", + "description": "[Sourcebot EE] Defines a collection of search contexts. This is only available in single-tenancy mode. See: https://docs.sourcebot.dev/self-hosting/more/search-contexts", + "patternProperties": { + "^[a-zA-Z0-9_-]+$": { + "$ref": "#/definitions/SearchContext" + } + }, + "additionalProperties": false + }, + "connections": { + "type": "object", + "description": "Defines a collection of connections from varying code hosts that Sourcebot should sync with. This is only available in single-tenancy mode.", + "patternProperties": { + "^[a-zA-Z0-9_-]+$": { + "$schema": "http://json-schema.org/draft-07/schema#", + "title": "ConnectionConfig", + "oneOf": [ + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GithubConnectionConfig", + "properties": { + "type": { + "const": "github", + "description": "GitHub Configuration" + }, + "token": { + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ], + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://github.com", + "description": "The URL of the GitHub host. Defaults to https://github.com", + "examples": [ + "https://github.com", + "https://github.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "users": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "torvalds", + "DHH" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property." + }, + "orgs": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+$" + }, + "default": [], + "examples": [ + [ + "my-org-name" + ], + [ + "sourcebot-dev", + "commaai" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "default": [], + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "default": [], + "description": "List of repository topics to include when syncing. Only repositories that match at least one of the provided `topics` will be synced. If not specified, all repositories will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of repository topics to exclude when syncing. Repositories that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + }, + "size": { + "type": "object", + "description": "Exclude repositories based on their disk usage. Note: the disk usage is calculated by GitHub and may not reflect the actual disk usage when cloned.", + "properties": { + "min": { + "type": "integer", + "description": "Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing." + }, + "max": { + "type": "integer", + "description": "Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing." + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, + "revisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GitlabConnectionConfig", + "properties": { + "type": { + "const": "gitlab", + "description": "GitLab Configuration" + }, + "token": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/token", + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitlab.com", + "description": "The URL of the GitLab host. Defaults to https://gitlab.com", + "examples": [ + "https://gitlab.com", + "https://gitlab.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "all": { + "type": "boolean", + "default": false, + "description": "Sync all projects visible to the provided `token` (if any) in the GitLab instance. This option is ignored if `url` is either unset or set to https://gitlab.com ." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of users to sync with. All projects owned by the user and visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property." + }, + "groups": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group" + ], + [ + "my-group/sub-group-a", + "my-group/sub-group-b" + ] + ], + "description": "List of groups to sync with. All projects in the group (and recursive subgroups) visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. Subgroups can be specified by providing the path to the subgroup (e.g. `my-group/sub-group-a`)." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-group/my-project" + ], + [ + "my-group/my-sub-group/my-project" + ] + ], + "description": "List of individual projects to sync with. The project's namespace must be specified. See: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 1, + "description": "List of project topics to include when syncing. Only projects that match at least one of the provided `topics` will be synced. If not specified, all projects will be synced, unless explicitly defined in the `exclude` property. Glob patterns are supported.", + "examples": [ + [ + "docs", + "core" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked projects from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived projects from syncing." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "examples": [ + [ + "my-group/my-project" + ] + ], + "description": "List of projects to exclude from syncing. Glob patterns are supported. The project's namespace must be specified, see: https://docs.gitlab.com/ee/user/namespace/" + }, + "topics": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of project topics to exclude when syncing. Projects that match one of the provided `topics` will be excluded from syncing. Glob patterns are supported.", + "examples": [ + [ + "tests", + "ci" + ] + ] + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GiteaConnectionConfig", + "properties": { + "type": { + "const": "gitea", + "description": "Gitea Configuration" + }, + "token": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/token", + "description": "A Personal Access Token (PAT).", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://gitea.com", + "description": "The URL of the Gitea host. Defaults to https://gitea.com", + "examples": [ + "https://gitea.com", + "https://gitea.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "orgs": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "my-org-name" + ] + ], + "description": "List of organizations to sync with. All repositories in the organization visible to the provided `token` (if any) will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:organization scope." + }, + "repos": { + "type": "array", + "items": { + "type": "string", + "pattern": "^[\\w.-]+\\/[\\w.-]+$" + }, + "description": "List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'." + }, + "users": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "username-1", + "username-2" + ] + ], + "description": "List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property. If a `token` is provided, it must have the read:user scope." + }, + "exclude": { + "type": "object", + "properties": { + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "default": [], + "description": "List of individual repositories to exclude from syncing. Glob patterns are supported." + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "GerritConnectionConfig", + "properties": { + "type": { + "const": "gerrit", + "description": "Gerrit Configuration" + }, + "url": { + "type": "string", + "format": "url", + "description": "The URL of the Gerrit host.", + "examples": [ + "https://gerrit.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of specific projects to sync. If not specified, all projects will be synced. Glob patterns are supported", + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ] + }, + "exclude": { + "type": "object", + "properties": { + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "project1/repo1", + "project2/**" + ] + ], + "description": "List of specific projects to exclude from syncing." + }, + "readOnly": { + "type": "boolean", + "default": false, + "description": "Exclude read-only projects from syncing." + }, + "hidden": { + "type": "boolean", + "default": false, + "description": "Exclude hidden projects from syncing." + } + }, + "additionalProperties": false + } + }, + "required": [ + "type", + "url" + ], + "additionalProperties": false + }, + { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "BitbucketConnectionConfig", + "properties": { + "type": { + "const": "bitbucket", + "description": "Bitbucket configuration" + }, + "user": { + "type": "string", + "description": "The username to use for authentication. Only needed if token is an app password." + }, + "token": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/token", + "description": "An authentication token.", + "examples": [ + { + "secret": "SECRET_KEY" + } + ] + }, + "url": { + "type": "string", + "format": "url", + "default": "https://api.bitbucket.org/2.0", + "description": "Bitbucket URL", + "examples": [ + "https://bitbucket.example.com" + ], + "pattern": "^https?:\\/\\/[^\\s/$.?#].[^\\s]*$" + }, + "deploymentType": { + "type": "string", + "enum": [ + "cloud", + "server" + ], + "default": "cloud", + "description": "The type of Bitbucket deployment" + }, + "workspaces": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of workspaces to sync. Ignored if deploymentType is server." + }, + "projects": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of projects to sync" + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "description": "List of repos to sync" + }, + "exclude": { + "type": "object", + "properties": { + "archived": { + "type": "boolean", + "default": false, + "description": "Exclude archived repositories from syncing." + }, + "forks": { + "type": "boolean", + "default": false, + "description": "Exclude forked repositories from syncing." + }, + "repos": { + "type": "array", + "items": { + "type": "string" + }, + "examples": [ + [ + "cloud_workspace/repo1", + "server_project/repo2" + ] + ], + "description": "List of specific repos to exclude from syncing." + } + }, + "additionalProperties": false + }, + "revisions": { + "$ref": "#/properties/connections/patternProperties/%5E%5Ba-zA-Z0-9_-%5D%2B%24/oneOf/0/properties/revisions" + } + }, + "required": [ + "type" + ], + "if": { + "properties": { + "deploymentType": { + "const": "server" + } + } + }, + "then": { + "required": [ + "url" + ] + }, + "additionalProperties": false + } + ] + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/searchContext.schema.mdx b/docs/snippets/schemas/v3/searchContext.schema.mdx new file mode 100644 index 00000000..01477bef --- /dev/null +++ b/docs/snippets/schemas/v3/searchContext.schema.mdx @@ -0,0 +1,45 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "SearchContext", + "description": "Search context", + "properties": { + "include": { + "type": "array", + "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/**", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "exclude": { + "type": "array", + "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/sourcebot", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "description": { + "type": "string", + "description": "Optional description of the search context that surfaces in the UI." + } + }, + "required": [ + "include" + ], + "additionalProperties": false +} +``` diff --git a/docs/snippets/schemas/v3/shared.schema.mdx b/docs/snippets/schemas/v3/shared.schema.mdx new file mode 100644 index 00000000..97fdbabf --- /dev/null +++ b/docs/snippets/schemas/v3/shared.schema.mdx @@ -0,0 +1,80 @@ +{/* THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! */} +```json +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "definitions": { + "Token": { + "anyOf": [ + { + "type": "object", + "properties": { + "secret": { + "type": "string", + "description": "The name of the secret that contains the token." + } + }, + "required": [ + "secret" + ], + "additionalProperties": false + }, + { + "type": "object", + "properties": { + "env": { + "type": "string", + "description": "The name of the environment variable that contains the token. Only supported in declarative connection configs." + } + }, + "required": [ + "env" + ], + "additionalProperties": false + } + ] + }, + "GitRevisions": { + "type": "object", + "description": "The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed. A maximum of 64 revisions can be indexed, with any additional revisions being ignored.", + "properties": { + "branches": { + "type": "array", + "description": "List of branches to include when indexing. For a given repo, only the branches that exist on the repo's remote *and* match at least one of the provided `branches` will be indexed. The default branch (HEAD) is always indexed. Glob patterns are supported. A maximum of 64 branches can be indexed, with any additional branches being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "main", + "release/*" + ], + [ + "**" + ] + ], + "default": [] + }, + "tags": { + "type": "array", + "description": "List of tags to include when indexing. For a given repo, only the tags that exist on the repo's remote *and* match at least one of the provided `tags` will be indexed. Glob patterns are supported. A maximum of 64 tags can be indexed, with any additional tags being ignored.", + "items": { + "type": "string" + }, + "examples": [ + [ + "latest", + "v2.*.*" + ], + [ + "**" + ] + ], + "default": [] + } + }, + "additionalProperties": false + } + } +} +``` diff --git a/packages/schemas/src/v3/index.schema.ts b/packages/schemas/src/v3/index.schema.ts index f024b562..457a864e 100644 --- a/packages/schemas/src/v3/index.schema.ts +++ b/packages/schemas/src/v3/index.schema.ts @@ -6,7 +6,7 @@ const schema = { "definitions": { "Settings": { "type": "object", - "description": "Defines the globabl settings for Sourcebot.", + "description": "Defines the global settings for Sourcebot.", "properties": { "maxFileSize": { "type": "number", @@ -67,7 +67,9 @@ const schema = { "additionalProperties": false }, "SearchContext": { + "$schema": "http://json-schema.org/draft-07/schema#", "type": "object", + "title": "SearchContext", "description": "Search context", "properties": { "include": { diff --git a/packages/schemas/src/v3/index.type.ts b/packages/schemas/src/v3/index.type.ts index 3b4584ba..5c06720f 100644 --- a/packages/schemas/src/v3/index.type.ts +++ b/packages/schemas/src/v3/index.type.ts @@ -28,7 +28,7 @@ export interface SourcebotConfig { }; } /** - * Defines the globabl settings for Sourcebot. + * Defines the global settings for Sourcebot. * * This interface was referenced by `SourcebotConfig`'s JSON-Schema * via the `definition` "Settings". diff --git a/packages/schemas/src/v3/searchContext.schema.ts b/packages/schemas/src/v3/searchContext.schema.ts new file mode 100644 index 00000000..c36cb801 --- /dev/null +++ b/packages/schemas/src/v3/searchContext.schema.ts @@ -0,0 +1,44 @@ +// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! +const schema = { + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "SearchContext", + "description": "Search context", + "properties": { + "include": { + "type": "array", + "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/**", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "exclude": { + "type": "array", + "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/sourcebot", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "description": { + "type": "string", + "description": "Optional description of the search context that surfaces in the UI." + } + }, + "required": [ + "include" + ], + "additionalProperties": false +} as const; +export { schema as searchContextSchema }; \ No newline at end of file diff --git a/packages/schemas/src/v3/searchContext.type.ts b/packages/schemas/src/v3/searchContext.type.ts new file mode 100644 index 00000000..255b5a03 --- /dev/null +++ b/packages/schemas/src/v3/searchContext.type.ts @@ -0,0 +1,19 @@ +// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY! + +/** + * Search context + */ +export interface SearchContext { + /** + * List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported. + */ + include: string[]; + /** + * List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported. + */ + exclude?: string[]; + /** + * Optional description of the search context that surfaces in the UI. + */ + description?: string; +} diff --git a/packages/schemas/tools/generate.ts b/packages/schemas/tools/generate.ts index 7ba1b467..1f829ddd 100644 --- a/packages/schemas/tools/generate.ts +++ b/packages/schemas/tools/generate.ts @@ -5,41 +5,56 @@ import { compileFromFile } from "json-schema-to-typescript"; import { glob } from "glob"; -const BANNER_COMMENT = '// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!\n'; +const BANNER_COMMENT = 'THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!'; (async () => { const cwd = process.cwd(); const schemasBasePath = path.resolve(`${cwd}/../../schemas`); - const outDirRoot = path.resolve(`${cwd}/src`); + const srcDir = path.resolve(`${cwd}/src`); + const docsDir = path.resolve(`${cwd}/../../docs/snippets/schemas`); const schemas = await glob(`${schemasBasePath}/**/*.json`); await Promise.all(schemas.map(async (schemaPath) => { const name = path.parse(schemaPath).name; const version = path.basename(path.dirname(schemaPath)); - const outDir = path.join(outDirRoot, version); - await mkdir(outDir, { recursive: true }); + const srcOutDir = path.join(srcDir, version); + const docsOutDir = path.join(docsDir, version); + + await mkdir(srcOutDir, { recursive: true }); + await mkdir(docsOutDir, { recursive: true }); // Generate schema const schema = JSON.stringify(await $RefParser.bundle(schemaPath), null, 2); + + // Write to src await writeFile( - path.join(outDir, `${name}.schema.ts`), - BANNER_COMMENT + + path.join(srcOutDir, `${name}.schema.ts`), + `// ${BANNER_COMMENT}\n` + 'const schema = ' + schema + ` as const;\nexport { schema as ${name}Schema };`, ); + // Write to docs + await writeFile( + path.join(docsOutDir, `${name}.schema.mdx`), + `{/* ${BANNER_COMMENT} */}\n` + + '```json\n' + + schema + + '\n```\n' + ); + // Generate types const content = await compileFromFile(schemaPath, { - bannerComment: BANNER_COMMENT, + bannerComment: `// ${BANNER_COMMENT}\n`, cwd: dirname(schemaPath), ignoreMinAndMaxItems: true, declareExternallyReferenced: true, unreachableDefinitions: true, }); await writeFile( - path.join(outDir, `${name}.type.ts`), + path.join(srcOutDir, `${name}.type.ts`), content, ) })); diff --git a/schemas/v3/index.json b/schemas/v3/index.json index 587f9c4f..81026026 100644 --- a/schemas/v3/index.json +++ b/schemas/v3/index.json @@ -5,7 +5,7 @@ "definitions": { "Settings": { "type": "object", - "description": "Defines the globabl settings for Sourcebot.", + "description": "Defines the global settings for Sourcebot.", "properties": { "maxFileSize": { "type": "number", @@ -66,44 +66,7 @@ "additionalProperties": false }, "SearchContext": { - "type": "object", - "description": "Search context", - "properties": { - "include": { - "type": "array", - "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", - "items": { - "type": "string" - }, - "examples": [ - [ - "github.com/sourcebot-dev/**", - "gerrit.example.org/sub/path/**" - ] - ] - }, - "exclude": { - "type": "array", - "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", - "items": { - "type": "string" - }, - "examples": [ - [ - "github.com/sourcebot-dev/sourcebot", - "gerrit.example.org/sub/path/**" - ] - ] - }, - "description": { - "type": "string", - "description": "Optional description of the search context that surfaces in the UI." - } - }, - "required": [ - "include" - ], - "additionalProperties": false + "$ref": "./searchContext.json" } }, "properties": { diff --git a/schemas/v3/searchContext.json b/schemas/v3/searchContext.json new file mode 100644 index 00000000..70e3087b --- /dev/null +++ b/schemas/v3/searchContext.json @@ -0,0 +1,42 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema#", + "type": "object", + "title": "SearchContext", + "description": "Search context", + "properties": { + "include": { + "type": "array", + "description": "List of repositories to include in the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/**", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "exclude": { + "type": "array", + "description": "List of repositories to exclude from the search context. Expected to be formatted as a URL without any leading http(s):// prefix (e.g., 'github.com/sourcebot-dev/sourcebot'). Glob patterns are supported.", + "items": { + "type": "string" + }, + "examples": [ + [ + "github.com/sourcebot-dev/sourcebot", + "gerrit.example.org/sub/path/**" + ] + ] + }, + "description": { + "type": "string", + "description": "Optional description of the search context that surfaces in the UI." + } + }, + "required": [ + "include" + ], + "additionalProperties": false +} \ No newline at end of file