mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-12 12:25:22 +00:00
Add @sourcebot/schemas package (#177)
This commit is contained in:
parent
78c9111fa0
commit
bae7ca3438
31 changed files with 1490 additions and 217 deletions
25
Dockerfile
25
Dockerfile
|
|
@ -10,13 +10,15 @@ RUN go mod download
|
|||
COPY vendor/zoekt ./
|
||||
RUN CGO_ENABLED=0 GOOS=linux go build -o /cmd/ ./cmd/...
|
||||
|
||||
# ------ Build Database ------
|
||||
FROM node-alpine AS database-builder
|
||||
# ------ Build shared libraries ------
|
||||
FROM node-alpine AS shared-libs-builder
|
||||
WORKDIR /app
|
||||
|
||||
COPY package.json yarn.lock* ./
|
||||
COPY ./packages/db ./packages/db
|
||||
COPY ./packages/schemas ./packages/schemas
|
||||
RUN yarn workspace @sourcebot/db install --frozen-lockfile
|
||||
RUN yarn workspace @sourcebot/schemas install --frozen-lockfile
|
||||
|
||||
# ------ Build Web ------
|
||||
FROM node-alpine AS web-builder
|
||||
|
|
@ -25,8 +27,9 @@ WORKDIR /app
|
|||
|
||||
COPY package.json yarn.lock* ./
|
||||
COPY ./packages/web ./packages/web
|
||||
COPY --from=database-builder /app/node_modules ./node_modules
|
||||
COPY --from=database-builder /app/packages/db ./packages/db
|
||||
COPY --from=shared-libs-builder /app/node_modules ./node_modules
|
||||
COPY --from=shared-libs-builder /app/packages/db ./packages/db
|
||||
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
|
||||
|
||||
# Fixes arm64 timeouts
|
||||
RUN yarn config set registry https://registry.npmjs.org/
|
||||
|
|
@ -54,8 +57,9 @@ WORKDIR /app
|
|||
COPY package.json yarn.lock* ./
|
||||
COPY ./schemas ./schemas
|
||||
COPY ./packages/backend ./packages/backend
|
||||
COPY --from=database-builder /app/node_modules ./node_modules
|
||||
COPY --from=database-builder /app/packages/db ./packages/db
|
||||
COPY --from=shared-libs-builder /app/node_modules ./node_modules
|
||||
COPY --from=shared-libs-builder /app/packages/db ./packages/db
|
||||
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
|
||||
RUN yarn workspace @sourcebot/backend install --frozen-lockfile
|
||||
RUN yarn workspace @sourcebot/backend build
|
||||
|
||||
|
|
@ -114,21 +118,22 @@ COPY --from=zoekt-builder \
|
|||
/cmd/zoekt-index \
|
||||
/usr/local/bin/
|
||||
|
||||
# Configure the webapp
|
||||
# Copy all of the things
|
||||
COPY --from=web-builder /app/packages/web/public ./packages/web/public
|
||||
COPY --from=web-builder /app/packages/web/.next/standalone ./
|
||||
COPY --from=web-builder /app/packages/web/.next/static ./packages/web/.next/static
|
||||
|
||||
# Configure the backend
|
||||
COPY --from=backend-builder /app/node_modules ./node_modules
|
||||
COPY --from=backend-builder /app/packages/backend ./packages/backend
|
||||
|
||||
COPY --from=shared-libs-builder /app/node_modules ./node_modules
|
||||
COPY --from=shared-libs-builder /app/packages/db ./packages/db
|
||||
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
|
||||
|
||||
# Configure the database
|
||||
RUN mkdir -p /run/postgresql && \
|
||||
chown -R postgres:postgres /run/postgresql && \
|
||||
chmod 775 /run/postgresql
|
||||
COPY --from=database-builder /app/node_modules ./node_modules
|
||||
COPY --from=database-builder /app/packages/db ./packages/db
|
||||
|
||||
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
|
||||
COPY prefix-output.sh ./prefix-output.sh
|
||||
|
|
|
|||
2
Makefile
2
Makefile
|
|
@ -22,6 +22,8 @@ clean:
|
|||
packages/backend/node_modules \
|
||||
packages/db/node_modules \
|
||||
packages/db/dist \
|
||||
packages/schemas/node_modules \
|
||||
packages/schemas/dist \
|
||||
.sourcebot
|
||||
|
||||
.PHONY: bin
|
||||
|
|
|
|||
|
|
@ -5,10 +5,9 @@
|
|||
"main": "index.js",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev:watch": "yarn generate:types && tsc-watch --preserveWatchOutput --onSuccess \"yarn dev --configPath ../../config.json --cacheDir ../../.sourcebot\"",
|
||||
"dev:watch": "tsc-watch --preserveWatchOutput --onSuccess \"yarn dev --configPath ../../config.json --cacheDir ../../.sourcebot\"",
|
||||
"dev": "export PATH=\"$PWD/../../bin:$PATH\" && export CTAGS_COMMAND=ctags && node ./dist/index.js",
|
||||
"build": "yarn generate:types && tsc",
|
||||
"generate:types": "tsx tools/generateTypes.ts",
|
||||
"build": "tsc",
|
||||
"test": "vitest --config ./vitest.config.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
|
|
@ -33,6 +32,7 @@
|
|||
"micromatch": "^4.0.8",
|
||||
"posthog-node": "^4.2.1",
|
||||
"@sourcebot/db": "^0.1.0",
|
||||
"@sourcebot/schemas": "^0.1.0",
|
||||
"simple-git": "^3.27.0",
|
||||
"strip-json-comments": "^5.0.1",
|
||||
"winston": "^3.15.0",
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@ import { readFile } from 'fs/promises';
|
|||
import stripJsonComments from 'strip-json-comments';
|
||||
import { getGitHubReposFromConfig } from "./github.js";
|
||||
import { getGitLabReposFromConfig, GITLAB_CLOUD_HOSTNAME } from "./gitlab.js";
|
||||
import { SourcebotConfigurationSchema } from "./schemas/v2.js";
|
||||
import { SourcebotConfigurationSchema } from "@sourcebot/schemas/v2/index.type";
|
||||
import { AppContext } from "./types.js";
|
||||
import { getTokenFromConfig, isRemotePath, marshalBool } from "./utils.js";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import fetch from 'cross-fetch';
|
||||
import { GerritConfig } from './schemas/v2.js';
|
||||
import { GerritConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import { AppContext, GitRepository } from './types.js';
|
||||
import { createLogger } from './logger.js';
|
||||
import path from 'path';
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { GitRepository, AppContext } from './types.js';
|
||||
import { simpleGit, SimpleGitProgressEvent } from 'simple-git';
|
||||
import { createLogger } from './logger.js';
|
||||
import { GitConfig } from './schemas/v2.js';
|
||||
import { GitConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import path from 'path';
|
||||
|
||||
const logger = createLogger('git');
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Api, giteaApi, HttpResponse, Repository as GiteaRepository } from 'gitea-js';
|
||||
import { GiteaConfig } from './schemas/v2.js';
|
||||
import { GiteaConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import { excludeArchivedRepos, excludeForkedRepos, excludeReposByName, getTokenFromConfig, marshalBool, measure } from './utils.js';
|
||||
import { AppContext, GitRepository } from './types.js';
|
||||
import fetch from 'cross-fetch';
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { Octokit } from "@octokit/rest";
|
||||
import { GitHubConfig } from "./schemas/v2.js";
|
||||
import { GitHubConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import { createLogger } from "./logger.js";
|
||||
import { AppContext } from "./types.js";
|
||||
import { getTokenFromConfig, measure } from "./utils.js";
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
import { Gitlab, ProjectSchema } from "@gitbeaker/rest";
|
||||
import micromatch from "micromatch";
|
||||
import { createLogger } from "./logger.js";
|
||||
import { GitLabConfig } from "./schemas/v2.js";
|
||||
import { GitLabConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import { AppContext } from "./types.js";
|
||||
import { getTokenFromConfig, measure } from "./utils.js";
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
import { existsSync, FSWatcher, statSync, watch } from "fs";
|
||||
import { createLogger } from "./logger.js";
|
||||
import { LocalConfig } from "./schemas/v2.js";
|
||||
import { LocalConfig } from "@sourcebot/schemas/v2/index.type"
|
||||
import { AppContext, LocalRepository } from "./types.js";
|
||||
import { resolvePathRelativeToConfig } from "./utils.js";
|
||||
import path from "path";
|
||||
|
|
|
|||
|
|
@ -12,7 +12,7 @@ import { Queue, Worker, Job } from 'bullmq';
|
|||
import { Redis } from 'ioredis';
|
||||
import * as os from 'os';
|
||||
import { SOURCEBOT_TENANT_MODE } from './environment.js';
|
||||
import { SourcebotConfigurationSchema } from './schemas/v2.js';
|
||||
import { SourcebotConfigurationSchema } from "@sourcebot/schemas/v2/index.type"
|
||||
|
||||
const logger = createLogger('main');
|
||||
|
||||
|
|
|
|||
|
|
@ -1,23 +0,0 @@
|
|||
import { compileFromFile } from 'json-schema-to-typescript'
|
||||
import path from 'path';
|
||||
import fs from 'fs';
|
||||
|
||||
const BANNER_COMMENT = '// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!\n';
|
||||
|
||||
(async () => {
|
||||
const cwd = process.cwd();
|
||||
const schemaPath = path.resolve(`${cwd}/../../schemas/v2/index.json`);
|
||||
const outputPath = path.resolve(`${cwd}/src/schemas/v2.ts`);
|
||||
|
||||
const content = await compileFromFile(schemaPath, {
|
||||
bannerComment: BANNER_COMMENT,
|
||||
cwd,
|
||||
ignoreMinAndMaxItems: true,
|
||||
});
|
||||
|
||||
await fs.promises.writeFile(
|
||||
outputPath,
|
||||
content,
|
||||
"utf-8"
|
||||
);
|
||||
})();
|
||||
21
packages/schemas/package.json
Normal file
21
packages/schemas/package.json
Normal file
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "@sourcebot/schemas",
|
||||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"build": "yarn generate && tsc",
|
||||
"generate": "tsx tools/generate.ts",
|
||||
"postinstall": "yarn build"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/json-schema-ref-parser": "^11.7.3",
|
||||
"glob": "^11.0.1",
|
||||
"json-schema-to-typescript": "^15.0.4",
|
||||
"tsx": "^4.19.2",
|
||||
"typescript": "^5.7.3"
|
||||
},
|
||||
"exports": {
|
||||
"./v2/*": "./dist/v2/*.js",
|
||||
"./v3/*": "./dist/v3/*.js"
|
||||
}
|
||||
}
|
||||
137
packages/schemas/src/v1/index.schema.ts
Normal file
137
packages/schemas/src/v1/index.schema.ts
Normal file
|
|
@ -0,0 +1,137 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
const schema = {
|
||||
"$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
|
||||
} as const;
|
||||
export { schema as indexSchema };
|
||||
88
packages/schemas/src/v1/index.type.ts
Normal file
88
packages/schemas/src/v1/index.type.ts
Normal file
|
|
@ -0,0 +1,88 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
|
||||
/**
|
||||
* This interface was referenced by `Index`'s JSON-Schema
|
||||
* via the `definition` "ZoektConfig".
|
||||
*/
|
||||
export type ZoektConfig = GitHubConfig | GitLabConfig;
|
||||
/**
|
||||
* Only clone repos whose name matches the given regexp.
|
||||
*
|
||||
* This interface was referenced by `Index`'s JSON-Schema
|
||||
* via the `definition` "RepoNameRegexIncludeFilter".
|
||||
*/
|
||||
export type RepoNameRegexIncludeFilter = string;
|
||||
/**
|
||||
* Don't mirror repos whose names match this regexp.
|
||||
*
|
||||
* This interface was referenced by `Index`'s JSON-Schema
|
||||
* via the `definition` "RepoNameRegexExcludeFilter".
|
||||
*/
|
||||
export type RepoNameRegexExcludeFilter = string;
|
||||
|
||||
export interface Index {
|
||||
$schema?: string;
|
||||
Configs: ZoektConfig[];
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `Index`'s JSON-Schema
|
||||
* via the `definition` "GitHubConfig".
|
||||
*/
|
||||
export interface GitHubConfig {
|
||||
Type: "github";
|
||||
/**
|
||||
* GitHub Enterprise url. If not set github.com will be used as the host.
|
||||
*/
|
||||
GitHubUrl?: string;
|
||||
/**
|
||||
* The GitHub user to mirror
|
||||
*/
|
||||
GitHubUser?: string;
|
||||
/**
|
||||
* The GitHub organization to mirror
|
||||
*/
|
||||
GitHubOrg?: string;
|
||||
Name?: RepoNameRegexIncludeFilter;
|
||||
Exclude?: RepoNameRegexExcludeFilter;
|
||||
/**
|
||||
* Path to a file containing a GitHub access token.
|
||||
*/
|
||||
CredentialPath?: string;
|
||||
/**
|
||||
* Only mirror repos that have one of the given topics
|
||||
*/
|
||||
Topics?: string[];
|
||||
/**
|
||||
* Don't mirror repos that have one of the given topics
|
||||
*/
|
||||
ExcludeTopics?: string[];
|
||||
/**
|
||||
* Mirror repos that are _not_ archived
|
||||
*/
|
||||
NoArchived?: boolean;
|
||||
/**
|
||||
* Also mirror forks
|
||||
*/
|
||||
IncludeForks?: boolean;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `Index`'s JSON-Schema
|
||||
* via the `definition` "GitLabConfig".
|
||||
*/
|
||||
export interface GitLabConfig {
|
||||
Type: "gitlab";
|
||||
/**
|
||||
* The GitLab API url.
|
||||
*/
|
||||
GitLabURL?: string;
|
||||
Name?: RepoNameRegexIncludeFilter;
|
||||
Exclude?: RepoNameRegexExcludeFilter;
|
||||
/**
|
||||
* Only mirror public repos
|
||||
*/
|
||||
OnlyPublic?: boolean;
|
||||
/**
|
||||
* Path to a file containing a GitLab access token.
|
||||
*/
|
||||
CredentialPath?: string;
|
||||
}
|
||||
640
packages/schemas/src/v2/index.schema.ts
Normal file
640
packages/schemas/src/v2/index.schema.ts
Normal file
|
|
@ -0,0 +1,640 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
const schema = {
|
||||
"$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"
|
||||
]
|
||||
]
|
||||
},
|
||||
"tenantId": {
|
||||
"type": "number",
|
||||
"description": "@nocheckin"
|
||||
},
|
||||
"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
|
||||
},
|
||||
"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
|
||||
} as const;
|
||||
export { schema as indexSchema };
|
||||
|
|
@ -1,6 +1,22 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "Repos".
|
||||
*/
|
||||
export type Repos = GitHubConfig | GitLabConfig | GiteaConfig | GerritConfig | LocalConfig | GitConfig;
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "Token".
|
||||
*/
|
||||
export type Token =
|
||||
| string
|
||||
| {
|
||||
/**
|
||||
* The name of the environment variable that contains the token.
|
||||
*/
|
||||
env: string;
|
||||
};
|
||||
|
||||
/**
|
||||
* A Sourcebot configuration file outlines which repositories Sourcebot should sync and index.
|
||||
|
|
@ -15,6 +31,9 @@ export interface SourcebotConfigurationSchema {
|
|||
}
|
||||
/**
|
||||
* Global settings. These settings are applied to all repositories.
|
||||
*
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "Settings".
|
||||
*/
|
||||
export interface Settings {
|
||||
/**
|
||||
|
|
@ -34,6 +53,10 @@ export interface Settings {
|
|||
*/
|
||||
resyncInterval?: number;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GitHubConfig".
|
||||
*/
|
||||
export interface GitHubConfig {
|
||||
/**
|
||||
* GitHub Configuration
|
||||
|
|
@ -111,6 +134,9 @@ export interface GitHubConfig {
|
|||
}
|
||||
/**
|
||||
* The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed.
|
||||
*
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GitRevisions".
|
||||
*/
|
||||
export interface GitRevisions {
|
||||
/**
|
||||
|
|
@ -122,6 +148,10 @@ export interface GitRevisions {
|
|||
*/
|
||||
tags?: string[];
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GitLabConfig".
|
||||
*/
|
||||
export interface GitLabConfig {
|
||||
/**
|
||||
* GitLab Configuration
|
||||
|
|
@ -184,6 +214,10 @@ export interface GitLabConfig {
|
|||
};
|
||||
revisions?: GitRevisions;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GiteaConfig".
|
||||
*/
|
||||
export interface GiteaConfig {
|
||||
/**
|
||||
* Gitea Configuration
|
||||
|
|
@ -232,6 +266,10 @@ export interface GiteaConfig {
|
|||
};
|
||||
revisions?: GitRevisions;
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GerritConfig".
|
||||
*/
|
||||
export interface GerritConfig {
|
||||
/**
|
||||
* Gerrit Configuration
|
||||
|
|
@ -252,6 +290,10 @@ export interface GerritConfig {
|
|||
projects?: string[];
|
||||
};
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "LocalConfig".
|
||||
*/
|
||||
export interface LocalConfig {
|
||||
/**
|
||||
* Local Configuration
|
||||
|
|
@ -272,6 +314,10 @@ export interface LocalConfig {
|
|||
paths?: string[];
|
||||
};
|
||||
}
|
||||
/**
|
||||
* This interface was referenced by `SourcebotConfigurationSchema`'s JSON-Schema
|
||||
* via the `definition` "GitConfig".
|
||||
*/
|
||||
export interface GitConfig {
|
||||
/**
|
||||
* Git Configuration
|
||||
205
packages/schemas/src/v3/github.schema.ts
Normal file
205
packages/schemas/src/v3/github.schema.ts
Normal file
|
|
@ -0,0 +1,205 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
const schema = {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "GitHubConfig",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "github",
|
||||
"description": "GitHub Configuration"
|
||||
},
|
||||
"token": {
|
||||
"description": "A Personal Access Token (PAT).",
|
||||
"examples": [
|
||||
"secret-token",
|
||||
{
|
||||
"env": "ENV_VAR_CONTAINING_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
|
||||
}
|
||||
]
|
||||
},
|
||||
"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"
|
||||
]
|
||||
]
|
||||
},
|
||||
"tenantId": {
|
||||
"type": "number",
|
||||
"description": "@nocheckin"
|
||||
},
|
||||
"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": {
|
||||
"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
|
||||
}
|
||||
},
|
||||
"required": [
|
||||
"type"
|
||||
],
|
||||
"additionalProperties": false
|
||||
} as const;
|
||||
export { schema as githubSchema };
|
||||
90
packages/schemas/src/v3/github.type.ts
Normal file
90
packages/schemas/src/v3/github.type.ts
Normal file
|
|
@ -0,0 +1,90 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
|
||||
export interface GitHubConfig {
|
||||
/**
|
||||
* GitHub Configuration
|
||||
*/
|
||||
type: "github";
|
||||
/**
|
||||
* A Personal Access Token (PAT).
|
||||
*/
|
||||
token?:
|
||||
| string
|
||||
| {
|
||||
/**
|
||||
* The name of the environment variable that contains the token.
|
||||
*/
|
||||
env: string;
|
||||
};
|
||||
/**
|
||||
* The URL of the GitHub host. Defaults to https://github.com
|
||||
*/
|
||||
url?: string;
|
||||
/**
|
||||
* List of users to sync with. All repositories that the user owns will be synced, unless explicitly defined in the `exclude` property.
|
||||
*/
|
||||
users?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
orgs?: string[];
|
||||
/**
|
||||
* List of individual repositories to sync with. Expected to be formatted as '{orgName}/{repoName}' or '{userName}/{repoName}'.
|
||||
*/
|
||||
repos?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*
|
||||
* @minItems 1
|
||||
*/
|
||||
topics?: string[];
|
||||
/**
|
||||
* @nocheckin
|
||||
*/
|
||||
tenantId?: number;
|
||||
exclude?: {
|
||||
/**
|
||||
* Exclude forked repositories from syncing.
|
||||
*/
|
||||
forks?: boolean;
|
||||
/**
|
||||
* Exclude archived repositories from syncing.
|
||||
*/
|
||||
archived?: boolean;
|
||||
/**
|
||||
* List of individual repositories to exclude from syncing. Glob patterns are supported.
|
||||
*/
|
||||
repos?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
topics?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
size?: {
|
||||
/**
|
||||
* Minimum repository size (in bytes) to sync (inclusive). Repositories less than this size will be excluded from syncing.
|
||||
*/
|
||||
min?: number;
|
||||
/**
|
||||
* Maximum repository size (in bytes) to sync (inclusive). Repositories greater than this size will be excluded from syncing.
|
||||
*/
|
||||
max?: number;
|
||||
};
|
||||
};
|
||||
revisions?: GitRevisions;
|
||||
}
|
||||
/**
|
||||
* The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed.
|
||||
*/
|
||||
export interface GitRevisions {
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
branches?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
tags?: string[];
|
||||
}
|
||||
69
packages/schemas/src/v3/shared.schema.ts
Normal file
69
packages/schemas/src/v3/shared.schema.ts
Normal file
|
|
@ -0,0 +1,69 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
const schema = {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"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
|
||||
}
|
||||
}
|
||||
} as const;
|
||||
export { schema as sharedSchema };
|
||||
34
packages/schemas/src/v3/shared.type.ts
Normal file
34
packages/schemas/src/v3/shared.type.ts
Normal file
|
|
@ -0,0 +1,34 @@
|
|||
// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!
|
||||
|
||||
/**
|
||||
* This interface was referenced by `Shared`'s JSON-Schema
|
||||
* via the `definition` "Token".
|
||||
*/
|
||||
export type Token =
|
||||
| string
|
||||
| {
|
||||
/**
|
||||
* The name of the environment variable that contains the token.
|
||||
*/
|
||||
env: string;
|
||||
};
|
||||
|
||||
export interface Shared {
|
||||
[k: string]: unknown;
|
||||
}
|
||||
/**
|
||||
* The revisions (branches, tags) that should be included when indexing. The default branch (HEAD) is always indexed.
|
||||
*
|
||||
* This interface was referenced by `Shared`'s JSON-Schema
|
||||
* via the `definition` "GitRevisions".
|
||||
*/
|
||||
export interface GitRevisions {
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
branches?: string[];
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
tags?: string[];
|
||||
}
|
||||
48
packages/schemas/tools/generate.ts
Normal file
48
packages/schemas/tools/generate.ts
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
import path, { dirname } from "path";
|
||||
import { mkdir, rm, writeFile } from "fs/promises";
|
||||
import $RefParser from "@apidevtools/json-schema-ref-parser";
|
||||
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 SCHEMAS: string[] = ["github.json", "shared.json"];
|
||||
|
||||
(async () => {
|
||||
const cwd = process.cwd();
|
||||
const schemasBasePath = path.resolve(`${cwd}/../../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(cwd, `src/${version}`);
|
||||
|
||||
// Clean output directory first
|
||||
await rm(outDir, { recursive: true, force: true });
|
||||
await mkdir(outDir, { recursive: true });
|
||||
|
||||
// Generate schema
|
||||
const schema = JSON.stringify(await $RefParser.bundle(schemaPath), null, 2);
|
||||
await writeFile(
|
||||
path.join(outDir, `${name}.schema.ts`),
|
||||
BANNER_COMMENT +
|
||||
'const schema = ' +
|
||||
schema +
|
||||
` as const;\nexport { schema as ${name}Schema };`,
|
||||
);
|
||||
|
||||
// Generate types
|
||||
const content = await compileFromFile(schemaPath, {
|
||||
bannerComment: BANNER_COMMENT,
|
||||
cwd: dirname(schemaPath),
|
||||
ignoreMinAndMaxItems: true,
|
||||
declareExternallyReferenced: true,
|
||||
unreachableDefinitions: true,
|
||||
});
|
||||
await writeFile(
|
||||
path.join(outDir, `${name}.type.ts`),
|
||||
content,
|
||||
)
|
||||
}));
|
||||
})();
|
||||
30
packages/schemas/tsconfig.json
Normal file
30
packages/schemas/tsconfig.json
Normal file
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"outDir": "dist",
|
||||
"incremental": true,
|
||||
"declaration": true,
|
||||
"emitDecoratorMetadata": true,
|
||||
"esModuleInterop": true,
|
||||
"experimentalDecorators": true,
|
||||
"forceConsistentCasingInFileNames": true,
|
||||
"isolatedModules": false,
|
||||
"module": "CommonJS",
|
||||
"moduleResolution": "node",
|
||||
"noEmitOnError": false,
|
||||
"noImplicitAny": true,
|
||||
"noUnusedLocals": true,
|
||||
"pretty": true,
|
||||
"resolveJsonModule": true,
|
||||
"skipLibCheck": true,
|
||||
"strict": true,
|
||||
"sourceMap": true,
|
||||
"target": "ES2017",
|
||||
"rootDir": "src",
|
||||
"baseUrl": ".",
|
||||
// This is needed otherwise .tsbuildinfo wasn't being written
|
||||
// into the dist folder for some reason.
|
||||
"tsBuildInfoFile": "./dist/.tsbuildinfo"
|
||||
},
|
||||
"include": ["src/**/*.ts"],
|
||||
"exclude": ["node_modules"]
|
||||
}
|
||||
|
|
@ -3,12 +3,11 @@
|
|||
"version": "0.1.0",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"dev": "yarn generate:schemas && next dev",
|
||||
"build": "yarn generate:schemas && next build",
|
||||
"dev": "next dev",
|
||||
"build": "next build",
|
||||
"start": "next start",
|
||||
"lint": "next lint",
|
||||
"test": "vitest",
|
||||
"generate:schemas": "tsx tools/generateSchemas.ts"
|
||||
"test": "vitest"
|
||||
},
|
||||
"dependencies": {
|
||||
"@auth/prisma-adapter": "^2.7.4",
|
||||
|
|
@ -59,6 +58,8 @@
|
|||
"@replit/codemirror-lang-svelte": "^6.0.0",
|
||||
"@replit/codemirror-vim": "^6.2.1",
|
||||
"@shopify/lang-jsonc": "^1.0.0",
|
||||
"@sourcebot/schemas": "^0.1.0",
|
||||
"@sourcebot/db": "^0.1.0",
|
||||
"@ssddanbrown/codemirror-lang-twig": "^1.0.0",
|
||||
"@tanstack/react-query": "^5.53.3",
|
||||
"@tanstack/react-table": "^8.20.5",
|
||||
|
|
@ -115,8 +116,6 @@
|
|||
"zod": "^3.23.8"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@apidevtools/json-schema-ref-parser": "^11.7.3",
|
||||
"@sourcebot/db": "^0.1.0",
|
||||
"@types/node": "^20",
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18",
|
||||
|
|
|
|||
|
|
@ -5,9 +5,9 @@ import { getUser } from "./data/user";
|
|||
import { auth } from "./auth";
|
||||
import { notAuthenticated, notFound, ServiceError, unexpectedError } from "./lib/serviceError";
|
||||
import { prisma } from "@/prisma";
|
||||
import { githubSchema } from "./schemas/github.schema";
|
||||
import { StatusCodes } from "http-status-codes";
|
||||
import { ErrorCode } from "./lib/errorCodes";
|
||||
import { githubSchema } from "@sourcebot/schemas/v3/github.schema";
|
||||
|
||||
const ajv = new Ajv({
|
||||
validateFormats: false,
|
||||
|
|
|
|||
|
|
@ -21,12 +21,12 @@ import {
|
|||
import { useCallback, useRef } from "react";
|
||||
import { useForm } from "react-hook-form";
|
||||
import { z } from "zod";
|
||||
import { githubSchema } from "@/schemas/github.schema";
|
||||
import { Input } from "@/components/ui/input";
|
||||
import { createConnection } from "@/actions";
|
||||
import { useToast } from "@/components/hooks/use-toast";
|
||||
import { isServiceError } from "@/lib/utils";
|
||||
import { useRouter } from "next/navigation";
|
||||
import { githubSchema } from "@sourcebot/schemas/v3/github.schema";
|
||||
|
||||
const ajv = new Ajv({
|
||||
validateFormats: false,
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@
|
|||
const schema = {
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "GitHubConfig",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "github",
|
||||
|
|
|
|||
|
|
@ -1,30 +0,0 @@
|
|||
import $RefParser from "@apidevtools/json-schema-ref-parser";
|
||||
import path from "path";
|
||||
import { writeFile } from "fs/promises";
|
||||
|
||||
const BANNER_COMMENT = '// THIS IS A AUTO-GENERATED FILE. DO NOT MODIFY MANUALLY!\n';
|
||||
const SCHEMAS: string[] = ["github.json"];
|
||||
|
||||
(async () => {
|
||||
|
||||
const cwd = process.cwd();
|
||||
const schemasPath = path.resolve(`${cwd}/../../schemas/v3`);
|
||||
const outDir = path.resolve(`${cwd}/src/schemas`);
|
||||
console.log(outDir);
|
||||
|
||||
SCHEMAS.forEach(async (schemaName) => {
|
||||
const schemaPath = path.resolve(`${schemasPath}/${schemaName}`);
|
||||
const name = path.parse(schemaPath).name;
|
||||
console.log(name);
|
||||
|
||||
const schema = JSON.stringify(await $RefParser.bundle(schemaPath), null, 2);
|
||||
|
||||
await writeFile(
|
||||
path.join(outDir, `${name}.schema.ts`),
|
||||
BANNER_COMMENT +
|
||||
'const schema = ' +
|
||||
schema +
|
||||
` as const;\nexport { schema as ${name}Schema };`,
|
||||
);
|
||||
});
|
||||
})();
|
||||
|
|
@ -1,135 +0,0 @@
|
|||
{
|
||||
"$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
|
||||
}
|
||||
|
|
@ -1,6 +1,7 @@
|
|||
{
|
||||
"$schema": "http://json-schema.org/draft-07/schema#",
|
||||
"type": "object",
|
||||
"title": "GitHubConfig",
|
||||
"properties": {
|
||||
"type": {
|
||||
"const": "github",
|
||||
|
|
|
|||
45
yarn.lock
45
yarn.lock
|
|
@ -4172,6 +4172,11 @@ fastq@^1.6.0:
|
|||
dependencies:
|
||||
reusify "^1.0.4"
|
||||
|
||||
fdir@^6.4.2:
|
||||
version "6.4.3"
|
||||
resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72"
|
||||
integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==
|
||||
|
||||
fecha@^4.2.0:
|
||||
version "4.2.3"
|
||||
resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd"
|
||||
|
|
@ -4378,6 +4383,18 @@ glob@^11.0.0:
|
|||
package-json-from-dist "^1.0.0"
|
||||
path-scurry "^2.0.0"
|
||||
|
||||
glob@^11.0.1:
|
||||
version "11.0.1"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9"
|
||||
integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==
|
||||
dependencies:
|
||||
foreground-child "^3.1.0"
|
||||
jackspeak "^4.0.1"
|
||||
minimatch "^10.0.0"
|
||||
minipass "^7.1.2"
|
||||
package-json-from-dist "^1.0.0"
|
||||
path-scurry "^2.0.0"
|
||||
|
||||
glob@^7.1.3:
|
||||
version "7.2.3"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
|
||||
|
|
@ -4985,6 +5002,21 @@ json-schema-to-typescript@^15.0.2:
|
|||
minimist "^1.2.8"
|
||||
prettier "^3.2.5"
|
||||
|
||||
json-schema-to-typescript@^15.0.4:
|
||||
version "15.0.4"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-to-typescript/-/json-schema-to-typescript-15.0.4.tgz#a530c7f17312503b262ae12233749732171840f3"
|
||||
integrity sha512-Su9oK8DR4xCmDsLlyvadkXzX6+GGXJpbhwoLtOGArAG61dvbW4YQmSEno2y66ahpIdmLMg6YUf/QHLgiwvkrHQ==
|
||||
dependencies:
|
||||
"@apidevtools/json-schema-ref-parser" "^11.5.5"
|
||||
"@types/json-schema" "^7.0.15"
|
||||
"@types/lodash" "^4.17.7"
|
||||
is-glob "^4.0.3"
|
||||
js-yaml "^4.1.0"
|
||||
lodash "^4.17.21"
|
||||
minimist "^1.2.8"
|
||||
prettier "^3.2.5"
|
||||
tinyglobby "^0.2.9"
|
||||
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
|
|
@ -5756,6 +5788,11 @@ picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1:
|
|||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
|
||||
integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
|
||||
|
||||
picomatch@^4.0.2:
|
||||
version "4.0.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
|
||||
integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
|
||||
|
||||
pidtree@^0.3.0:
|
||||
version "0.3.1"
|
||||
resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.1.tgz#ef09ac2cc0533df1f3250ccf2c4d366b0d12114a"
|
||||
|
|
@ -6868,6 +6905,14 @@ tinyexec@^0.3.1:
|
|||
resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.1.tgz#0ab0daf93b43e2c211212396bdb836b468c97c98"
|
||||
integrity sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==
|
||||
|
||||
tinyglobby@^0.2.9:
|
||||
version "0.2.10"
|
||||
resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.10.tgz#e712cf2dc9b95a1f5c5bbd159720e15833977a0f"
|
||||
integrity sha512-Zc+8eJlFMvgatPZTl6A9L/yht8QqdmUNtURHaKZLmKBE12hNPSrqNkUp2cs3M/UKmNVVAMFQYSjYIVHDjW5zew==
|
||||
dependencies:
|
||||
fdir "^6.4.2"
|
||||
picomatch "^4.0.2"
|
||||
|
||||
tinypool@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-1.0.1.tgz#c64233c4fac4304e109a64340178760116dbe1fe"
|
||||
|
|
|
|||
Loading…
Reference in a new issue