123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- import * as assert from 'assert'
- import {URL} from 'url'
- import {IGitSourceSettings} from './git-source-settings'
- export function getFetchUrl(settings: IGitSourceSettings): string {
- assert.ok(
- settings.repositoryOwner,
- 'settings.repositoryOwner must be defined'
- )
- assert.ok(settings.repositoryName, 'settings.repositoryName must be defined')
- const serviceUrl = getServerUrl(settings.githubServerUrl)
- const encodedOwner = encodeURIComponent(settings.repositoryOwner)
- const encodedName = encodeURIComponent(settings.repositoryName)
- if (settings.sshKey) {
- const user = settings.sshUser.length > 0 ? settings.sshUser : 'git'
- return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`
- }
- // "origin" is SCHEME://HOSTNAME[:PORT]
- return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`
- }
- export function getServerUrl(url?: string): URL {
- let resolvedUrl = process.env['GITHUB_SERVER_URL'] || 'https://github.com'
- if (hasContent(url, WhitespaceMode.Trim)) {
- resolvedUrl = url!
- }
- return new URL(resolvedUrl)
- }
- export function getServerApiUrl(url?: string): string {
- if (hasContent(url, WhitespaceMode.Trim)) {
- let serverUrl = getServerUrl(url)
- if (isGhes(url)) {
- serverUrl.pathname = 'api/v3'
- } else {
- serverUrl.hostname = 'api.' + serverUrl.hostname
- }
- return pruneSuffix(serverUrl.toString(), '/')
- }
- return process.env['GITHUB_API_URL'] || 'https://api.github.com'
- }
- export function isGhes(url?: string): boolean {
- 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 isGitHubEnterpriseCloudHost = hostname.endsWith('.GHE.COM')
- const isLocalHost = hostname.endsWith('.LOCALHOST')
- return !isGitHubHost && !isGitHubEnterpriseCloudHost && !isLocalHost
- }
- function pruneSuffix(text: string, suffix: string) {
- if (hasContent(suffix, WhitespaceMode.Preserve) && text?.endsWith(suffix)) {
- return text.substring(0, text.length - suffix.length)
- }
- return text
- }
- enum WhitespaceMode {
- Trim,
- Preserve
- }
- function hasContent(
- text: string | undefined,
- whitespaceMode: WhitespaceMode
- ): boolean {
- let refinedText = text ?? ''
- if (whitespaceMode == WhitespaceMode.Trim) {
- refinedText = refinedText.trim()
- }
- return refinedText.length > 0
- }
|