addons/isl-server/src/CodeReviewProvider.tsblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import type {TypeaheadResult} from 'isl-components/Types';
b69ab319import type {TypeaheadKind} from 'isl/src/CommitInfoView/types';
b69ab3110import type {
b69ab3111 ClientToServerMessage,
b69ab3112 CodeReviewProviderSpecificClientToServerMessages,
b69ab3113 CommandArg,
b69ab3114 DiffComment,
b69ab3115 DiffId,
083fd5f16 DiffSignalSummary,
b69ab3117 DiffSummary,
b69ab3118 Disposable,
083fd5f19 Hash,
b69ab3120 LandConfirmationInfo,
b69ab3121 LandInfo,
b69ab3122 OperationCommandProgressReporter,
b69ab3123 Result,
23ab72124 RunnableOperation,
b69ab3125 ServerToClientMessage,
b69ab3126} from 'isl/src/types';
b69ab3127
b69ab3128export type DiffSummaries = Map<DiffId, DiffSummary>;
b69ab3129/**
b69ab3130 * API to fetch data from Remote Code Review system, like GitHub and Phabricator.
b69ab3131 */
b69ab3132export interface CodeReviewProvider {
b69ab3133 triggerDiffSummariesFetch(diffs: Array<DiffId>): unknown;
b69ab3134
b69ab3135 onChangeDiffSummaries(callback: (result: Result<DiffSummaries>) => unknown): Disposable;
b69ab3136
b69ab3137 /** Run a command not handled within sapling, such as a separate submit handler */
b69ab3138 runExternalCommand?(
b69ab3139 cwd: string,
b69ab3140 args: CommandArg[], // Providers may need specific normalization for args
b69ab3141 onProgress: OperationCommandProgressReporter,
b69ab3142 signal: AbortSignal,
b69ab3143 ): Promise<void>;
b69ab3144
b69ab3145 /** Run a conf command for configerator operations */
b69ab3146 runConfCommand?(
b69ab3147 cwd: string,
b69ab3148 args: Array<string>,
b69ab3149 onProgress: OperationCommandProgressReporter,
b69ab3150 signal: AbortSignal,
b69ab3151 ): Promise<void>;
b69ab3152
b69ab3153 dispose: () => void;
b69ab3154
b69ab3155 /** Convert Code Review Provider info into a short summary string, usable in analytics */
b69ab3156 getSummaryName(): string;
b69ab3157
b69ab3158 typeahead?(kind: TypeaheadKind, query: string, cwd: string): Promise<Array<TypeaheadResult>>;
b69ab3159
b69ab3160 getDiffUrlMarkdown(diffId: DiffId): string;
b69ab3161 getCommitHashUrlMarkdown(hash: string): string;
b69ab3162
b69ab3163 getRemoteFileURL?(
b69ab3164 path: string,
b69ab3165 publicCommitHash: string | null,
b69ab3166 selectionStart?: {line: number; char: number},
b69ab3167 selectionEnd?: {line: number; char: number},
b69ab3168 ): string;
b69ab3169
b69ab3170 updateDiffMessage?(diffId: DiffId, newTitle: string, newDescription: string): Promise<void>;
b69ab3171
b69ab3172 getSuggestedReviewers?(context: {paths: Array<string>}): Promise<Array<string>>;
b69ab3173
b69ab3174 /** Convert usernames/emails to avatar URIs */
b69ab3175 fetchAvatars?(authors: Array<string>): Promise<Map<string, string>>;
b69ab3176
b69ab3177 /** Convert usernames/emails to avatar URIs */
b69ab3178 fetchComments?(diffId: DiffId): Promise<Array<DiffComment>>;
b69ab3179
b69ab3180 renderMarkup?: (markup: string) => Promise<string>;
b69ab3181
b69ab3182 fetchLandInfo?(topOfStack: DiffId): Promise<LandInfo>;
b69ab3183 confirmLand?(landConfirmationInfo: NonNullable<LandConfirmationInfo>): Promise<Result<undefined>>;
b69ab3184
b69ab3185 handleClientToServerMessage?(
b69ab3186 message: ClientToServerMessage,
b69ab3187 postMessage: (message: ServerToClientMessage) => void,
b69ab3188 ): message is CodeReviewProviderSpecificClientToServerMessages;
23ab72189
083fd5f90 /** Subscribe to CI/CD build signals with commit messages for client-side matching. */
e7069e191 onChangeCanopySignals?(callback: (runs: Array<{commitMessage: string; signal: DiffSignalSummary; runId?: number; commitId?: string}>) => unknown): Disposable;
e7069e192
e7069e193 /** Trigger a fetch of Canopy CI signals on demand. */
e7069e194 triggerCanopySignalsFetch?(): void;
083fd5f95
23ab72196 /** Called after a Sapling operation completes. Allows providers to react (e.g. create diffs after push). */
23ab72197 onPostOperation?(
23ab72198 operation: RunnableOperation,
23ab72199 exitCode: number,
23ab721100 getCommitInfo: (rev: string) => Promise<{title: string; description: string; hash: string; parentHash: string} | undefined>,
23ab721101 ): Promise<void>;
b69ab31102}