mirror of
https://github.com/actions/checkout.git
synced 2024-12-21 21:33:56 +03:00
163217dfcd
* `utl-helper.ts` now leverages well-known environment variables. --------- Co-authored-by: Erez Testiler <easyt@github.com>
82 lines
2.4 KiB
TypeScript
82 lines
2.4 KiB
TypeScript
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
|
|
}
|