Skip to content

Commit f3b069f

Browse files
authored
Merge pull request #183 from Olfi01/main
Enable GitHub Enterprise Server
2 parents 8ebbe6c + e6fa567 commit f3b069f

6 files changed

Lines changed: 50 additions & 5 deletions

File tree

package.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,12 @@
8686
"description": "The name of the repository's git remote that points to GitHub",
8787
"default": "origin",
8888
"scope": "window"
89+
},
90+
"github-actions.use-enterprise": {
91+
"type": "boolean",
92+
"markdownDescription": "If this is set to true, use the auth provider for the GitHub Enterprise URL configured in `github-enterprise.uri`",
93+
"default": false,
94+
"scope": "window"
8995
}
9096
}
9197
},

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 {useEnterprise} 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 = useEnterprise() ? 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: 28 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,23 @@
11
import * as vscode from "vscode";
2+
import {deactivateLanguageServer, initLanguageServer} from "../workflow/languageServer";
3+
import {resetGitHubContext} from "../git/repository";
24

35
const settingsKey = "github-actions";
6+
const DEFAULT_GITHUB_API = "https://api.github.com";
47

58
export function initConfiguration(context: vscode.ExtensionContext) {
69
context.subscriptions.push(
7-
vscode.workspace.onDidChangeConfiguration(e => {
10+
vscode.workspace.onDidChangeConfiguration(async e => {
811
if (e.affectsConfiguration(getSettingsKey("workflows.pinned"))) {
912
pinnedWorkflowsChangeHandlers.forEach(h => h());
13+
} else if (
14+
e.affectsConfiguration(getSettingsKey("use-enterprise")) ||
15+
(useEnterprise() &&
16+
(e.affectsConfiguration("github-enterprise.uri") || e.affectsConfiguration(getSettingsKey("remote-name"))))
17+
) {
18+
await updateLanguageServerApiUrl(context);
19+
resetGitHubContext();
20+
await vscode.commands.executeCommand("github-actions.explorer.refresh");
1021
}
1122
})
1223
);
@@ -52,3 +63,19 @@ export function pinnedWorkflowsRefreshInterval(): number {
5263
export function getRemoteName(): string {
5364
return getConfiguration().get<string>(getSettingsKey("remote-name"), "origin");
5465
}
66+
67+
export function useEnterprise(): boolean {
68+
return getConfiguration().get<boolean>(getSettingsKey("use-enterprise"), false);
69+
}
70+
71+
export function getGitHubApiUri(): string {
72+
if (!useEnterprise()) return DEFAULT_GITHUB_API;
73+
const base = getConfiguration().get<string>("github-enterprise.uri", DEFAULT_GITHUB_API).replace(/\/$/, "");
74+
return base === DEFAULT_GITHUB_API ? base : `${base}/api/v3`;
75+
}
76+
77+
async function updateLanguageServerApiUrl(context: vscode.ExtensionContext) {
78+
await deactivateLanguageServer();
79+
80+
await initLanguageServer(context);
81+
}

src/git/repository.ts

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ 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, useEnterprise} from "../configuration/configuration";
88
import {Protocol} from "../external/protocol";
99
import {logDebug, logError} from "../log";
1010
import {API, GitExtension, RefType, RepositoryState} from "../typings/git";
1111
import {RepositoryPermission, getRepositoryPermission} from "./repository-permissions";
12+
import {getGitHubApiUri} from "../configuration/configuration";
1213

1314
interface GitHubUrls {
1415
workspaceUri: vscode.Uri;
@@ -74,7 +75,11 @@ export async function getGitHubUrls(): Promise<GitHubUrls[] | null> {
7475
remote = [r.state.remotes[0]];
7576
}
7677

77-
if (remote.length > 0 && remote[0].pushUrl?.indexOf("github.com") !== -1) {
78+
if (
79+
remote.length > 0 &&
80+
(remote[0].pushUrl?.indexOf("github.com") !== -1 ||
81+
(useEnterprise() && remote[0].pushUrl?.indexOf(new URL(getGitHubApiUri()).host) !== -1))
82+
) {
7883
const url = remote[0].pushUrl;
7984

8085
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, useEnterprise} 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: useEnterprise() ? getGitHubApiUri() : undefined,
2931
repos: ghContext?.repos.map(repo => ({
3032
id: repo.id,
3133
owner: repo.owner,

0 commit comments

Comments
 (0)