Skip to content

Commit ee25def

Browse files
author
flmeyer
committed
Enable GitHub Enterprise Server
1 parent bed6eac commit ee25def

5 files changed

Lines changed: 31 additions & 4 deletions

File tree

src/api/api.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import {Octokit} from "@octokit/rest";
22
import {version} from "../../package.json";
3+
import {getGitHubApiUri} from "../configuration/configuration";
34

45
export const userAgent = `VS Code GitHub Actions (${version})`;
56

67
export function getClient(token: string): Octokit {
78
return new Octokit({
89
auth: token,
9-
userAgent: userAgent
10+
userAgent: userAgent,
11+
baseUrl: `${getGitHubApiUri()}`
1012
});
1113
}

src/auth/auth.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
import * as vscode from "vscode";
2+
import {isUseEnterprise} from "../configuration/configuration";
23

34
const AUTH_PROVIDER_ID = "github";
5+
const AUTH_PROVIDER_ID_ENTERPRISE = "github-enterprise";
46
const DEFAULT_SCOPES = ["repo", "workflow"];
57

68
let signInPrompted = false;
@@ -67,7 +69,8 @@ async function getSessionInternal(
6769
typeof createOrForceMessage === "string"
6870
? {forceNewSession: {detail: createOrForceMessage}}
6971
: {createIfNone: createOrForceMessage};
70-
return await vscode.authentication.getSession(AUTH_PROVIDER_ID, getScopes(), options);
72+
const authProviderId = isUseEnterprise() ? AUTH_PROVIDER_ID_ENTERPRISE : AUTH_PROVIDER_ID;
73+
return await vscode.authentication.getSession(authProviderId, getScopes(), options);
7174
}
7275

7376
function getScopes(): string[] {

src/configuration/configuration.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,16 @@
11
import * as vscode from "vscode";
2+
import {deactivateLanguageServer} from "../workflow/languageServer";
23

34
const settingsKey = "github-actions";
5+
const DEFAULT_GITHUB_API = "https://api.github.com";
46

57
export function initConfiguration(context: vscode.ExtensionContext) {
68
context.subscriptions.push(
79
vscode.workspace.onDidChangeConfiguration(e => {
810
if (e.affectsConfiguration(getSettingsKey("workflows.pinned"))) {
911
pinnedWorkflowsChangeHandlers.forEach(h => h());
12+
} else if (e.affectsConfiguration(getSettingsKey("use-enterprise"))) {
13+
updateLanguageServerApiUrl();
1014
}
1115
})
1216
);
@@ -52,3 +56,19 @@ export function pinnedWorkflowsRefreshInterval(): number {
5256
export function getRemoteName(): string {
5357
return getConfiguration().get<string>(getSettingsKey("remote-name"), "origin");
5458
}
59+
60+
export function isUseEnterprise(): boolean {
61+
return getConfiguration().get<boolean>(getSettingsKey("use-enterprise"), false);
62+
}
63+
64+
export function getGitHubApiUri(): string {
65+
if (!isUseEnterprise()) return DEFAULT_GITHUB_API;
66+
const base = getConfiguration().get<string>("github-enterprise.uri", DEFAULT_GITHUB_API).replace(/\/$/, "");
67+
return base === DEFAULT_GITHUB_API ? base : `${base}/api/v3`;
68+
}
69+
70+
function updateLanguageServerApiUrl() {
71+
// deactivateLanguageServer();
72+
// TODO: restart language server with new URL configured
73+
throw new Error("Can't yet change the api url parameter without restart.");
74+
}

src/git/repository.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import {Octokit} from "@octokit/rest";
44
import {canReachGitHubAPI} from "../api/canReachGitHubAPI";
55
import {handleSamlError} from "../api/handleSamlError";
66
import {getSession} from "../auth/auth";
7-
import {getRemoteName} from "../configuration/configuration";
7+
import {getRemoteName, isUseEnterprise} from "../configuration/configuration";
88
import {Protocol} from "../external/protocol";
99
import {logDebug, logError} from "../log";
1010
import {API, GitExtension, RefType, RepositoryState} from "../typings/git";
@@ -74,7 +74,7 @@ export async function getGitHubUrls(): Promise<GitHubUrls[] | null> {
7474
remote = [r.state.remotes[0]];
7575
}
7676

77-
if (remote.length > 0 && remote[0].pushUrl?.indexOf("github.com") !== -1) {
77+
if (remote.length > 0 && (remote[0].pushUrl?.indexOf("github.com") !== -1 || isUseEnterprise())) {
7878
const url = remote[0].pushUrl;
7979

8080
return {

src/workflow/languageServer.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {userAgent} from "../api/api";
1111
import {getSession} from "../auth/auth";
1212
import {getGitHubContext} from "../git/repository";
1313
import {WorkflowSelector} from "./documentSelector";
14+
import {getGitHubApiUri, isUseEnterprise} from "../configuration/configuration";
1415

1516
let client: BaseLanguageClient;
1617

@@ -26,6 +27,7 @@ export async function initLanguageServer(context: vscode.ExtensionContext) {
2627
const initializationOptions: InitializationOptions = {
2728
sessionToken: session?.accessToken,
2829
userAgent: userAgent,
30+
githubApiUrl: isUseEnterprise() ? getGitHubApiUri() : undefined,
2931
repos: ghContext?.repos.map(repo => ({
3032
id: repo.id,
3133
owner: repo.owner,

0 commit comments

Comments
 (0)