Skip to content

Commit b2e3ea1

Browse files
Adds GitHub Enterprise support to Start Work
1 parent 33af257 commit b2e3ea1

File tree

4 files changed

+25
-10
lines changed

4 files changed

+25
-10
lines changed

src/plus/integrations/integrationService.ts

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -643,12 +643,16 @@ export class IntegrationService implements Disposable {
643643
args: { 0: integrationIds => (integrationIds?.length ? integrationIds.join(',') : '<undefined>'), 1: false },
644644
})
645645
async getMyIssues(
646-
integrationIds?: (SupportedHostingIntegrationIds | SupportedIssueIntegrationIds)[],
646+
integrationIds?: (
647+
| SupportedHostingIntegrationIds
648+
| SupportedIssueIntegrationIds
649+
| SupportedSelfHostedIntegrationIds
650+
)[],
647651
options?: { openRepositoriesOnly?: boolean; cancellation?: CancellationToken },
648652
): Promise<SearchedIssue[] | undefined> {
649653
const integrations: Map<Integration, ResourceDescriptor[] | undefined> = new Map();
650654
const hostingIntegrationIds = integrationIds?.filter(
651-
id => id in HostingIntegrationId,
655+
id => id in HostingIntegrationId || id in SelfHostedIntegrationId,
652656
) as SupportedHostingIntegrationIds[];
653657
const openRemotesByIntegrationId = new Map<IntegrationId, ResourceDescriptor[]>();
654658
for (const repository of this.container.git.openRepositories) {
@@ -659,7 +663,7 @@ export class IntegrationService implements Disposable {
659663
if (remoteIntegration == null) continue;
660664
for (const integrationId of hostingIntegrationIds?.length
661665
? hostingIntegrationIds
662-
: Object.values(HostingIntegrationId)) {
666+
: [...Object.values(HostingIntegrationId), ...Object.values(SelfHostedIntegrationId)]) {
663667
if (
664668
remoteIntegration.id === integrationId &&
665669
remote.provider?.owner != null &&
@@ -681,12 +685,16 @@ export class IntegrationService implements Disposable {
681685
}
682686
for (const integrationId of integrationIds?.length
683687
? integrationIds
684-
: [...Object.values(HostingIntegrationId), ...Object.values(IssueIntegrationId)]) {
688+
: [
689+
...Object.values(HostingIntegrationId),
690+
...Object.values(IssueIntegrationId),
691+
...Object.values(SelfHostedIntegrationId),
692+
]) {
685693
const integration = await this.get(integrationId);
686694
if (
687695
integration == null ||
688696
(options?.openRepositoriesOnly &&
689-
isHostingIntegrationId(integrationId) &&
697+
(isHostingIntegrationId(integrationId) || isSelfHostedIntegrationId(integrationId)) &&
690698
!openRemotesByIntegrationId.has(integrationId))
691699
) {
692700
continue;
@@ -695,7 +703,7 @@ export class IntegrationService implements Disposable {
695703
integrations.set(
696704
integration,
697705
options?.openRepositoriesOnly &&
698-
isHostingIntegrationId(integrationId) &&
706+
(isHostingIntegrationId(integrationId) || isSelfHostedIntegrationId(integrationId)) &&
699707
openRemotesByIntegrationId.has(integrationId)
700708
? openRemotesByIntegrationId.get(integrationId)
701709
: undefined,

src/plus/integrations/providers/models.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -915,5 +915,6 @@ export type GitConfigEntityIdentifier = AnyEntityIdentifierInput & {
915915
id: string;
916916
owner: { key: string; name: string; id: string | undefined; owner: string | undefined };
917917
createdDate: string;
918+
isCloudEnterprise?: boolean;
918919
};
919920
};

src/plus/integrations/providers/utils.ts

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,13 +70,15 @@ export function getEntityIdentifierInput(entity: IssueOrPullRequest | LaunchpadI
7070
}
7171

7272
export function getProviderIdFromEntityIdentifier(
73-
entityIdentifier: EntityIdentifier | AnyEntityIdentifierInput,
73+
entityIdentifier: EntityIdentifier | AnyEntityIdentifierInput | GitConfigEntityIdentifier,
7474
): IntegrationId | undefined {
7575
switch (entityIdentifier.provider) {
7676
case EntityIdentifierProviderType.Github:
7777
return HostingIntegrationId.GitHub;
7878
case EntityIdentifierProviderType.GithubEnterprise:
79-
return SelfHostedIntegrationId.GitHubEnterprise;
79+
return isGitConfigEntityIdentifier(entityIdentifier) && entityIdentifier.metadata.isCloudEnterprise
80+
? SelfHostedIntegrationId.CloudGitHubEnterprise
81+
: SelfHostedIntegrationId.GitHubEnterprise;
8082
case EntityIdentifierProviderType.Gitlab:
8183
return HostingIntegrationId.GitLab;
8284
case EntityIdentifierProviderType.GitlabSelfHosted:
@@ -127,6 +129,7 @@ export function encodeIssueOrPullRequestForGitConfig(
127129
id: entity.id,
128130
owner: encodedOwner,
129131
createdDate: new Date().toISOString(),
132+
isCloudEnterprise: entity.provider.id === SelfHostedIntegrationId.CloudGitHubEnterprise,
130133
},
131134
};
132135
}
@@ -194,7 +197,8 @@ export async function getIssueFromGitConfigEntityIdentifier(
194197
if (
195198
identifier.provider !== EntityIdentifierProviderType.Jira &&
196199
identifier.provider !== EntityIdentifierProviderType.Github &&
197-
identifier.provider !== EntityIdentifierProviderType.Gitlab
200+
identifier.provider !== EntityIdentifierProviderType.Gitlab &&
201+
identifier.provider !== EntityIdentifierProviderType.GithubEnterprise
198202
) {
199203
return undefined;
200204
}

src/plus/startWork/startWork.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ import { getSteps } from '../../commands/quickWizard.utils';
2727
import { proBadge } from '../../constants';
2828
import { GlCommand } from '../../constants.commands';
2929
import type { IntegrationId } from '../../constants.integrations';
30-
import { HostingIntegrationId, IssueIntegrationId } from '../../constants.integrations';
30+
import { HostingIntegrationId, IssueIntegrationId, SelfHostedIntegrationId } from '../../constants.integrations';
3131
import type { Source, Sources, StartWorkTelemetryContext, TelemetryEvents } from '../../constants.telemetry';
3232
import type { Container } from '../../container';
3333
import { addAssociatedIssueToBranch } from '../../git/models/branch.utils';
@@ -91,6 +91,7 @@ export interface StartWorkOverrides {
9191

9292
export const supportedStartWorkIntegrations = [
9393
HostingIntegrationId.GitHub,
94+
SelfHostedIntegrationId.CloudGitHubEnterprise,
9495
HostingIntegrationId.GitLab,
9596
IssueIntegrationId.Jira,
9697
];
@@ -707,6 +708,7 @@ function buildItemTelemetryData(item: StartWorkItem) {
707708
function getOpenOnWebQuickInputButton(integrationId: string): QuickInputButton | undefined {
708709
switch (integrationId) {
709710
case HostingIntegrationId.GitHub:
711+
case SelfHostedIntegrationId.CloudGitHubEnterprise:
710712
return OpenOnGitHubQuickInputButton;
711713
case HostingIntegrationId.GitLab:
712714
return OpenOnGitLabQuickInputButton;

0 commit comments

Comments
 (0)