Merge ea0806b2ec48a0e7669fb8f1ce63a9b5b53297a4 into 2541b1294d2704b0964813337f33b291d3f8596b

This commit is contained in:
George Beech 2022-06-15 02:25:42 +00:00 committed by GitHub
commit 1ca64071a1
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 20 additions and 3 deletions

View File

@ -71,6 +71,13 @@ inputs:
set-safe-directory:
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
default: true
setHost:
description: >
override the github host that is set automatically to the github instance the action was called from.
This is useful if you need to clone from an instance that is not the one your action is running from.
For example, you need to clone a cloud hosted repo from an action run by an on prem instance.
required: false
runs:
using: node16
main: dist/index.js

View File

@ -52,7 +52,7 @@ class GitAuthHelper {
this.settings = gitSourceSettings || (({} as unknown) as IGitSourceSettings)
// Token auth header
const serverUrl = urlHelper.getServerUrl()
const serverUrl = urlHelper.getServerUrl(gitSourceSettings?.setHost)
this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader` // "origin" is SCHEME://HOSTNAME[:PORT]
const basicCredential = Buffer.from(
`x-access-token:${this.settings.authToken}`,

View File

@ -83,4 +83,10 @@ export interface IGitSourceSettings {
* Indicates whether to add repositoryPath as safe.directory in git global config
*/
setSafeDirectory: boolean
/**
* Set a host to override the automatic detection. Useful when you need to clone
* from cloud when running an action on an on prem server
*/
setHost: string | undefined
}

View File

@ -1,6 +1,7 @@
import * as assert from 'assert'
import {IGitSourceSettings} from './git-source-settings'
import {URL} from 'url'
import { settings } from 'cluster'
export function getFetchUrl(settings: IGitSourceSettings): string {
assert.ok(
@ -8,7 +9,7 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
'settings.repositoryOwner must be defined'
)
assert.ok(settings.repositoryName, 'settings.repositoryName must be defined')
const serviceUrl = getServerUrl()
const serviceUrl = getServerUrl(settings.setHost)
const encodedOwner = encodeURIComponent(settings.repositoryOwner)
const encodedName = encodeURIComponent(settings.repositoryName)
if (settings.sshKey) {
@ -19,7 +20,10 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`
}
export function getServerUrl(): URL {
export function getServerUrl(configHost: string|undefined = undefined): URL {
if (configHost) {
return new URL(configHost)
}
// todo: remove GITHUB_URL after support for GHES Alpha is no longer needed
return new URL(
process.env['GITHUB_SERVER_URL'] ||