Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions apps/server/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@
"@t3tools/provider-opencode": "workspace:*",
"@t3tools/provider-pi": "workspace:*",
"@t3tools/source-control-azure-devops": "workspace:*",
"@t3tools/source-control-bitbucket": "workspace:*",
"@t3tools/source-control-core": "workspace:*",
"@t3tools/source-control-forgejo": "workspace:*",
"@t3tools/source-control-gitlab": "workspace:*",
Expand Down
8 changes: 1 addition & 7 deletions apps/server/scripts/evaluate-thread-titles.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ import * as ThreadTitleLinks from "../src/textGeneration/ThreadTitleLinks.ts";
import * as SourceControlProviderRegistry from "../src/sourceControl/SourceControlProviderRegistry.ts";
import * as GitHubApi from "../src/sourceControl/GitHubApi.ts";
import * as SourceControlBuiltInDrivers from "../src/sourceControl/builtInDrivers.ts";
import * as BitbucketApi from "../src/sourceControl/BitbucketApi.ts";
import * as ServerSettings from "../src/serverSettings.ts";
import * as VcsProcess from "../src/vcs/VcsProcess.ts";
import * as VcsDriverRegistry from "../src/vcs/VcsDriverRegistry.ts";
Expand Down Expand Up @@ -149,12 +148,7 @@ await Effect.runPromise(
ProcessRunner.layer,
SourceControlProviderRegistry.layer.pipe(
Layer.provide(
Layer.mergeAll(
GitHubApi.layerWithDependencies,
SourceControlBuiltInDrivers.layer,
// No saved credentials here; Bitbucket falls back to T3CODE_BITBUCKET_* variables.
BitbucketApi.layer,
),
Layer.mergeAll(GitHubApi.layerWithDependencies, SourceControlBuiltInDrivers.layer),
),
// Default settings: no saved Bitbucket token, gh's own GitHub account choice.
Layer.provide(ServerSettings.layerTest()),
Expand Down
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { assert, it } from "@effect/vitest";

import * as AzureDevOpsCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsCli";
import * as BitbucketApi from "../sourceControl/BitbucketApi.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as GitHubApi from "../sourceControl/GitHubApi.ts";
import * as SourceControlRateLimit from "@t3tools/source-control-core/server/SourceControlRateLimit";
import * as GitLabCli from "@t3tools/source-control-gitlab/server/GitLabCli";
import { azureDevOpsProviderFailure } from "@t3tools/source-control-azure-devops/server/AzureDevOpsPullRequestProvider";
import { bitbucketProviderFailure } from "./BitbucketPullRequestProvider.ts";
import { bitbucketProviderFailure } from "@t3tools/source-control-bitbucket/server/BitbucketPullRequestProvider";
import { gitHubProviderFailure } from "./GitHubPullRequestProvider.ts";
import { gitLabProviderFailure } from "@t3tools/source-control-gitlab/server/GitLabPullRequestProvider";

Expand Down
9 changes: 1 addition & 8 deletions apps/server/src/pullRequest/PullRequestProviderRegistry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,7 @@ import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";
import type { SourceControlProviderKind } from "@t3tools/contracts";

import * as BitbucketApi from "../sourceControl/BitbucketApi.ts";
import * as GitHubApi from "../sourceControl/GitHubApi.ts";
import * as BitbucketPullRequestApi from "./BitbucketPullRequestApi.ts";
import * as BitbucketPullRequestProvider from "./BitbucketPullRequestProvider.ts";
import * as GitHubPullRequestApi from "./GitHubPullRequestApi.ts";
import * as GitHubPullRequestProvider from "./GitHubPullRequestProvider.ts";
import * as BuiltInDrivers from "../sourceControl/builtInDrivers.ts";
Expand Down Expand Up @@ -39,10 +36,7 @@ export function fromProviders(
* @public Service construction is part of the canonical Effect module API.
*/
export const make = Effect.gen(function* () {
const providers = yield* Effect.all([
GitHubPullRequestProvider.make,
BitbucketPullRequestProvider.make,
]);
const providers = yield* Effect.all([GitHubPullRequestProvider.make]);
const drivers = yield* Effect.forEach(BuiltInDrivers.BUILT_IN_SOURCE_CONTROL_DRIVERS, (driver) =>
driver.make.pipe(Effect.map((instance) => instance.pullRequests)),
);
Expand All @@ -62,5 +56,4 @@ export const layer = Layer.effect(PullRequestProviderRegistry, make).pipe(
),
),
Layer.provide(BuiltInDrivers.layer),
Layer.provide(BitbucketPullRequestApi.layer.pipe(Layer.provide(BitbucketApi.layer))),
);
9 changes: 1 addition & 8 deletions apps/server/src/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,6 @@ import * as ProviderHostLive from "./provider/ProviderHostLive.ts";
import * as AcpRegistrySupport from "@t3tools/provider-acp-registry/server/AcpRegistrySupport";
import * as CheckpointDiffQuery from "./checkpointing/CheckpointDiffQuery.ts";
import * as CheckpointStore from "./checkpointing/CheckpointStore.ts";
import * as BitbucketApi from "./sourceControl/BitbucketApi.ts";
import * as GitHubApi from "./sourceControl/GitHubApi.ts";
import * as ForgejoCli from "@t3tools/source-control-forgejo/server/ForgejoCli";
import * as SourceControlBuiltInDrivers from "./sourceControl/builtInDrivers.ts";
Expand Down Expand Up @@ -297,13 +296,7 @@ const layerPersistence = Layer.empty.pipe(Layer.provideMerge(SqlitePersistence.l
const layerVcsDriverRegistry = VcsDriverRegistry.layer.pipe(Layer.provide(VcsProjectConfig.layer));

const layerSourceControlProviderRegistry = SourceControlProviderRegistry.layer.pipe(
Layer.provide(
Layer.mergeAll(
BitbucketApi.layer,
GitHubApi.layerWithDependencies,
SourceControlBuiltInDrivers.layer,
),
),
Layer.provide(Layer.mergeAll(GitHubApi.layerWithDependencies, SourceControlBuiltInDrivers.layer)),
Layer.provideMerge(GitVcsDriver.layer),
Layer.provideMerge(layerVcsDriverRegistry),
);
Expand Down
6 changes: 5 additions & 1 deletion apps/server/src/sourceControl/BitbucketApi.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,13 @@ import * as TestClock from "effect/testing/TestClock";
import { HttpClient, HttpClientError, HttpClientRequest, HttpClientResponse } from "effect/http";

import { GitCommandError } from "@t3tools/contracts";
import * as BitbucketApi from "./BitbucketApi.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as ServerSettings from "../serverSettings.ts";
import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
import type * as VcsDriver from "../vcs/VcsDriver.ts";
import * as ServerSourceControlHost from "./ServerSourceControlHost.ts";
import * as VcsProcess from "../vcs/VcsProcess.ts";

const isBitbucketRepositoryLocatorError = Schema.is(BitbucketApi.BitbucketRepositoryLocatorError);

Expand Down Expand Up @@ -139,6 +141,8 @@ function makeLayer(input: {
);

const layer = BitbucketApi.layer.pipe(
Layer.provide(ServerSourceControlHost.layer),
Layer.provide(Layer.mock(VcsProcess.VcsProcess)({})),
Layer.provide(
Layer.succeed(
HttpClient.HttpClient,
Expand Down
16 changes: 16 additions & 0 deletions apps/server/src/sourceControl/ServerSourceControlHost.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,16 +9,32 @@ import * as Effect from "effect/Effect";
import * as Layer from "effect/Layer";

import * as ServerSettings from "../serverSettings.ts";
import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
import * as VcsProcess from "../vcs/VcsProcess.ts";

export const layer = Layer.effect(
SourceControlHost.SourceControlHost,
Effect.gen(function* () {
const serverSettings = yield* ServerSettings.ServerSettingsService;
const process = yield* VcsProcess.VcsProcess;
const git = yield* GitVcsDriver.GitVcsDriver;
const vcsRegistry = yield* VcsDriverRegistry.VcsDriverRegistry;
return SourceControlHost.SourceControlHost.of({
settings: { get: serverSettings.getSettings },
process: { run: process.run },
git: {
remotes: (cwd) =>
vcsRegistry.resolve({ cwd }).pipe(Effect.map((handle) => handle.driver.listRemotes(cwd))),
readConfigValue: git.readConfigValue,
resolvePrimaryRemoteName: git.resolvePrimaryRemoteName,
ensureRemote: git.ensureRemote,
listLocalBranchNames: git.listLocalBranchNames,
fetchRemoteBranch: git.fetchRemoteBranch,
fetchRemoteTrackingBranch: git.fetchRemoteTrackingBranch,
setBranchUpstream: git.setBranchUpstream,
switchRef: git.switchRef,
},
});
}),
);
11 changes: 9 additions & 2 deletions apps/server/src/sourceControl/SourceControlDiscovery.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,8 @@ import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
import * as VcsProcess from "../vcs/VcsProcess.ts";
import * as AzureDevOpsCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsCli";
import * as AzureDevOpsPullRequestCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsPullRequestCli";
import * as BitbucketApi from "./BitbucketApi.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as BitbucketPullRequestApi from "@t3tools/source-control-bitbucket/server/BitbucketPullRequestApi";
import * as GitHubApi from "./GitHubApi.ts";
import * as GitLabCli from "@t3tools/source-control-gitlab/server/GitLabCli";
import * as GitLabPullRequestCli from "@t3tools/source-control-gitlab/server/GitLabPullRequestCli";
Expand All @@ -43,6 +44,7 @@ const layerSourceControlProviderRegistryTest = (input: {
Layer.mock(AzureDevOpsCli.AzureDevOpsCli)({}),
Layer.mock(AzureDevOpsPullRequestCli.AzureDevOpsPullRequestCli)({}),
Layer.mock(BitbucketApi.BitbucketApi)(input.bitbucket),
Layer.mock(BitbucketPullRequestApi.BitbucketPullRequestApi)({}),
ServerSettings.ServerSettingsService.layerTest(),
Layer.mock(GitHubApi.GitHubApi)({}),
Layer.mock(GitVcsDriver.GitVcsDriver)({}),
Expand All @@ -53,9 +55,11 @@ const layerSourceControlProviderRegistryTest = (input: {
Layer.mock(VcsProcess.VcsProcess)(input.process),
ServerSourceControlHost.layer.pipe(
Layer.provide(
Layer.merge(
Layer.mergeAll(
Layer.mock(VcsProcess.VcsProcess)(input.process),
ServerSettings.ServerSettingsService.layerTest(),
Layer.mock(GitVcsDriver.GitVcsDriver)({}),
Layer.mock(VcsDriverRegistry.VcsDriverRegistry)({}),
),
),
),
Expand Down Expand Up @@ -395,6 +399,7 @@ it.effect(
SourceControlHost.SourceControlHost,
SourceControlHost.SourceControlHost.of({
settings: host.settings,
git: host.git,
process: {
run: (input) => {
if (input.args[0] !== "fetch") return git.run(input);
Expand Down Expand Up @@ -529,6 +534,8 @@ it.effect(
ServerSourceControlHost.layer.pipe(
Layer.provideMerge(VcsProcess.layer),
Layer.provideMerge(ServerSettings.ServerSettingsService.layerTest()),
Layer.provideMerge(Layer.mock(GitVcsDriver.GitVcsDriver)({})),
Layer.provideMerge(Layer.mock(VcsDriverRegistry.VcsDriverRegistry)({})),
Layer.provideMerge(NodeServices.layer),
),
),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,8 @@ import * as VcsDriverRegistry from "../vcs/VcsDriverRegistry.ts";
import * as VcsProcess from "../vcs/VcsProcess.ts";
import * as AzureDevOpsCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsCli";
import * as AzureDevOpsPullRequestCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsPullRequestCli";
import * as BitbucketApi from "./BitbucketApi.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as BitbucketPullRequestApi from "@t3tools/source-control-bitbucket/server/BitbucketPullRequestApi";
import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as GitHubApi from "./GitHubApi.ts";
import * as GitHubCredentials from "./GitHubCredentials.ts";
Expand Down Expand Up @@ -101,12 +102,18 @@ function makeRegistry(input: {
layerProcess,
ServerSourceControlHost.layer.pipe(
Layer.provide(
Layer.merge(layerProcess, ServerSettings.ServerSettingsService.layerTest()),
Layer.mergeAll(
layerProcess,
layerRegistry,
ServerSettings.ServerSettingsService.layerTest(),
Layer.mock(GitVcsDriver.GitVcsDriver)({}),
),
),
),
Layer.mock(AzureDevOpsCli.AzureDevOpsCli)({}),
Layer.mock(AzureDevOpsPullRequestCli.AzureDevOpsPullRequestCli)({}),
Layer.mock(BitbucketApi.BitbucketApi)({}),
Layer.mock(BitbucketPullRequestApi.BitbucketPullRequestApi)({}),
ServerSettings.ServerSettingsService.layerTest(),
Layer.mock(GitHubApi.GitHubApi)({
// No GitHub credential unless a test supplies one, so custom hosts stay unclaimed.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@ import {
import type { SourceControlProviderKind } from "@t3tools/contracts";
import { detectSourceControlProviderFromRemoteUrl } from "@t3tools/shared/sourceControl";

import * as BitbucketSourceControlProvider from "./BitbucketSourceControlProvider.ts";
import * as GitHubSourceControlProvider from "./GitHubSourceControlProvider.ts";
import * as BuiltInDrivers from "./builtInDrivers.ts";
import * as SourceControlProvider from "@t3tools/source-control-core/server/SourceControlProvider";
Expand Down Expand Up @@ -305,8 +304,6 @@ export const makeWithProviders = Effect.fn("makeSourceControlProviderRegistryWit
export const make = Effect.gen(function* () {
const github = yield* GitHubSourceControlProvider.make;
const githubDiscovery = yield* GitHubSourceControlProvider.makeDiscovery;
const bitbucket = yield* BitbucketSourceControlProvider.make;
const bitbucketDiscovery = yield* BitbucketSourceControlProvider.makeDiscovery;
const drivers = yield* Effect.forEach(BuiltInDrivers.BUILT_IN_SOURCE_CONTROL_DRIVERS, (driver) =>
driver.make.pipe(
Effect.map((instance): SourceControlProviderRegistration => ({
Expand All @@ -324,11 +321,6 @@ export const make = Effect.gen(function* () {
provider: github,
discovery: githubDiscovery,
},
{
kind: "bitbucket",
provider: bitbucket,
discovery: bitbucketDiscovery,
},
...drivers,
];
return yield* makeWithProviders(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@ import { GitCommandError, SourceControlProviderError } from "@t3tools/contracts"

import * as ServerConfig from "../config.ts";
import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as BitbucketApi from "./BitbucketApi.ts";
import * as BitbucketSourceControlProvider from "./BitbucketSourceControlProvider.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as BitbucketSourceControlProvider from "@t3tools/source-control-bitbucket/server/BitbucketSourceControlProvider";
import type * as SourceControlProvider from "@t3tools/source-control-core/server/SourceControlProvider";
import * as SourceControlProviderRegistry from "./SourceControlProviderRegistry.ts";
import * as SourceControlRepositoryService from "./SourceControlRepositoryService.ts";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ import {
type GitCloneProgressLine,
} from "../project/gitCloneProgress.ts";
import * as GitVcsDriver from "../vcs/GitVcsDriver.ts";
import * as BitbucketApi from "./BitbucketApi.ts";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as SourceControlProviderRegistry from "./SourceControlProviderRegistry.ts";
const isSourceControlRepositoryError = Schema.is(SourceControlRepositoryError);
const isSourceControlProviderError = Schema.is(SourceControlProviderError);
Expand Down
11 changes: 10 additions & 1 deletion apps/server/src/sourceControl/builtInDrivers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,9 @@
import * as AzureDevOpsCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsCli";
import * as AzureDevOpsPullRequestCli from "@t3tools/source-control-azure-devops/server/AzureDevOpsPullRequestCli";
import * as AzureDevOpsDriver from "@t3tools/source-control-azure-devops/server/driver";
import * as BitbucketApi from "@t3tools/source-control-bitbucket/server/BitbucketApi";
import * as BitbucketPullRequestApi from "@t3tools/source-control-bitbucket/server/BitbucketPullRequestApi";
import * as BitbucketDriver from "@t3tools/source-control-bitbucket/server/driver";
import * as ForgejoCli from "@t3tools/source-control-forgejo/server/ForgejoCli";
import * as ForgejoDriver from "@t3tools/source-control-forgejo/server/driver";
import * as GitLabCli from "@t3tools/source-control-gitlab/server/GitLabCli";
Expand All @@ -20,7 +23,12 @@ import * as Layer from "effect/Layer";

import * as ServerSourceControlHost from "./ServerSourceControlHost.ts";

const drivers = [GitLabDriver.driver, AzureDevOpsDriver.driver, ForgejoDriver.driver];
const drivers = [
GitLabDriver.driver,
AzureDevOpsDriver.driver,
BitbucketDriver.driver,
ForgejoDriver.driver,
];

/** Every service a built-in driver's `make` needs; the server's layers must provide them all. */
export type BuiltInSourceControlDriversEnv =
Expand All @@ -33,6 +41,7 @@ export const BUILT_IN_SOURCE_CONTROL_DRIVERS: ReadonlyArray<
/** The services the built-in drivers' packages own, plus the host port they all run against. */
export const layer = Layer.mergeAll(
AzureDevOpsPullRequestCli.layer.pipe(Layer.provideMerge(AzureDevOpsCli.layer)),
BitbucketPullRequestApi.layer.pipe(Layer.provideMerge(BitbucketApi.layer)),
ForgejoCli.layer,
GitLabPullRequestCli.layer.pipe(Layer.provideMerge(GitLabCli.layer)),
).pipe(Layer.provideMerge(ServerSourceControlHost.layer));
2 changes: 0 additions & 2 deletions apps/server/src/ws.ts
Original file line number Diff line number Diff line change
Expand Up @@ -229,7 +229,6 @@ import * as SqlClient from "effect/sql/SqlClient";
import * as PullRequestSyncReactor from "./orchestration-v2/PullRequestSyncReactor.ts";
import * as SourceControlDiscovery from "./sourceControl/SourceControlDiscovery.ts";
import * as SourceControlRepositoryService from "./sourceControl/SourceControlRepositoryService.ts";
import * as BitbucketApi from "./sourceControl/BitbucketApi.ts";
import * as GitHubApi from "./sourceControl/GitHubApi.ts";
import * as SourceControlBuiltInDrivers from "./sourceControl/builtInDrivers.ts";
import * as SourceControlProviderRegistry from "./sourceControl/SourceControlProviderRegistry.ts";
Expand Down Expand Up @@ -3202,7 +3201,6 @@ export const layer = Layer.unwrap(
SourceControlProviderRegistry.layer.pipe(
Layer.provide(
Layer.mergeAll(
BitbucketApi.layer,
GitHubApi.layerWithDependencies,
SourceControlBuiltInDrivers.layer,
),
Expand Down
2 changes: 1 addition & 1 deletion docs/internals/pull-request-file-revisions.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ What "never got to look at" is belongs to the host, and the contract cannot know
- [Azure DevOps](../../packages/source-control-azure-devops/src/server/AzureDevOpsPullRequestProvider.ts) reads every
version off one iteration listing, so a change too long to follow to its end leaves the paths
past that point out.
- [Bitbucket](../../apps/server/src/pullRequest/BitbucketPullRequestApi.ts) reads them off the
- [Bitbucket](../../packages/source-control-bitbucket/src/server/BitbucketPullRequestApi.ts) reads them off the
pull request's own patch, the only place it states a file's version, so a patch cut short at the
byte ceiling leaves the paths past the cut out.
- [GitLab](../../packages/source-control-gitlab/src/server/GitLabPullRequestCli.ts) asks in batches, so a batch
Expand Down
Loading
Loading