Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 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
23 changes: 23 additions & 0 deletions __test__/url-helper.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import * as urlHelper from '../src/url-helper'

describe('isGhes tests', () => {
it('basics', async () => {
expect(urlHelper.isGhes()).toBeFalsy()
expect(urlHelper.isGhes('https://github.com')).toBeFalsy()
//expect(urlHelper.isGhes('https://api.github.com')).toBeFalsy()
expect(urlHelper.isGhes('https://europe.ghe.com')).toBeFalsy()
expect(urlHelper.isGhes('https://test.github.localhost')).toBeFalsy()
expect(urlHelper.isGhes('https://src.onpremise.customer.com')).toBeTruthy()
})
})

describe('getServerApiUrl tests', () => {
it('basics', async () => {
expect(urlHelper.getServerApiUrl()).toBe('https://api.github.com')
expect(urlHelper.getServerApiUrl('https://github.com')).toBe('https://api.github.com')
expect(urlHelper.getServerApiUrl('https://GitHub.com')).toBe('https://api.github.com')
expect(urlHelper.getServerApiUrl('https://europe.ghe.com')).toBe('https://api.europe.ghe.com')
expect(urlHelper.getServerApiUrl('https://australia.GHE.COM')).toBe('https://api.australia.ghe.com')
expect(urlHelper.getServerApiUrl('https://src.onpremise.customer.com')).toBe('https://src.onpremise.customer.com/api/v3')
})
})
45 changes: 34 additions & 11 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2454,22 +2454,45 @@ function getFetchUrl(settings) {
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
}
function getServerUrl(url) {
let urlValue = url && url.trim().length > 0
? url
: process.env['GITHUB_SERVER_URL'] || 'https://github.com';
return new url_1.URL(urlValue);
let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com';
if (hasContent(url, false)) {
resolvedUrl = url;
}
return new url_1.URL(resolvedUrl);
}
function getServerApiUrl(url) {
let apiUrl = 'https://api.github.com';
if (isGhes(url)) {
const serverUrl = getServerUrl(url);
apiUrl = new url_1.URL(`${serverUrl.origin}/api/v3`).toString();
if (hasContent(url, false)) {
let serverUrl = getServerUrl(url);
if (isGhes(url)) {
serverUrl.pathname = "api/v3";
}
else {
serverUrl.hostname = "api." + serverUrl.hostname;
}
return pruneSuffix(serverUrl.toString(), '/');
}
return apiUrl;
return process.env['GITHUB_API_URL'] || 'https://api.github.com';
}
function isGhes(url) {
const ghUrl = getServerUrl(url);
return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
const ghUrl = new url_1.URL(url || process.env['GITHUB_SERVER_URL'] || 'https://github.com');
const hostname = ghUrl.hostname.trimEnd().toUpperCase();
const isGitHubHost = hostname === 'GITHUB.COM';
const isGheHost = hostname.endsWith('.GHE.COM');
const isLocalHost = hostname.endsWith('.LOCALHOST');
return !isGitHubHost && !isGheHost && !isLocalHost;
}
function pruneSuffix(text, suffix) {
if (hasContent(suffix, true) && (text === null || text === void 0 ? void 0 : text.endsWith(suffix))) {
return text.substring(0, text.length - suffix.length);
}
return text;
}
function hasContent(text, allowPureWhitespace) {
let refinedText = text !== null && text !== void 0 ? text : "";
if (!allowPureWhitespace) {
refinedText = refinedText.trim();
}
return refinedText.length > 0;
}


Expand Down
53 changes: 41 additions & 12 deletions src/url-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,26 +21,55 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
}

export function getServerUrl(url?: string): URL {
let urlValue =
url && url.trim().length > 0
? url
: process.env['GITHUB_SERVER_URL'] || 'https://github.com'
return new URL(urlValue)
let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'
if (hasContent(url, false)) {
resolvedUrl = url!
}

return new URL(resolvedUrl)
}

export function getServerApiUrl(url?: string): string {
let apiUrl = 'https://api.github.com'
if (hasContent(url, false)) {
let serverUrl = getServerUrl(url)
if (isGhes(url)) {
serverUrl.pathname = "api/v3"
} else {
serverUrl.hostname = "api." + serverUrl.hostname
}

if (isGhes(url)) {
const serverUrl = getServerUrl(url)
apiUrl = new URL(`${serverUrl.origin}/api/v3`).toString()
return pruneSuffix(serverUrl.toString(), '/')
}

return apiUrl
return process.env['GITHUB_API_URL'] || 'https://api.github.com'
}

export function isGhes(url?: string): boolean {
const ghUrl = getServerUrl(url)
const ghUrl = new URL(
url || process.env['GITHUB_SERVER_URL'] || 'https://github.com'
)

const hostname = ghUrl.hostname.trimEnd().toUpperCase()
const isGitHubHost = hostname === 'GITHUB.COM'
const isGheHost = hostname.endsWith('.GHE.COM')
const isLocalHost = hostname.endsWith('.LOCALHOST')

return !isGitHubHost && !isGheHost && !isLocalHost
}

return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM'

function pruneSuffix(text: string, suffix: string) {
if (hasContent(suffix, true) && text?.endsWith(suffix)) {
return text.substring(0, text.length - suffix.length)
}
return text
}

function hasContent(text: string | undefined, allowPureWhitespace: boolean): boolean {
let refinedText = text ?? ""
if (!allowPureWhitespace) {
refinedText = refinedText.trim()
}
return refinedText.length > 0
}