From 85b1f35505da871133b65f059e96210c65650a8b Mon Sep 17 00:00:00 2001 From: eric sciple Date: Wed, 25 Mar 2020 15:12:22 -0400 Subject: [PATCH] changes to support ghes alpha release (#199) --- dist/index.js | 59 ++++++++++++++++++++++++++++++++------ src/git-auth-helper.ts | 16 +++++++---- src/git-source-provider.ts | 11 ++----- src/github-api-helper.ts | 3 +- src/url-helper.ts | 28 ++++++++++++++++++ 5 files changed, 93 insertions(+), 24 deletions(-) create mode 100644 src/url-helper.ts diff --git a/dist/index.js b/dist/index.js index 3992650..5fa23c3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1266,6 +1266,46 @@ const windowsRelease = release => { module.exports = windowsRelease; +/***/ }), + +/***/ 81: +/***/ (function(__unusedmodule, exports, __webpack_require__) { + +"use strict"; + +var __importStar = (this && this.__importStar) || function (mod) { + if (mod && mod.__esModule) return mod; + var result = {}; + if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k]; + result["default"] = mod; + return result; +}; +Object.defineProperty(exports, "__esModule", { value: true }); +const assert = __importStar(__webpack_require__(357)); +const url_1 = __webpack_require__(835); +function getApiUrl() { + return process.env['GITHUB_API_URL'] || 'https://api.github.com'; +} +exports.getApiUrl = getApiUrl; +function getFetchUrl(settings) { + assert.ok(settings.repositoryOwner, 'settings.repositoryOwner must be defined'); + assert.ok(settings.repositoryName, 'settings.repositoryName must be defined'); + const serviceUrl = getServerUrl(); + const encodedOwner = encodeURIComponent(settings.repositoryOwner); + const encodedName = encodeURIComponent(settings.repositoryName); + if (settings.sshKey) { + return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`; + } + // "origin" is SCHEME://HOSTNAME[:PORT] + return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`; +} +exports.getFetchUrl = getFetchUrl; +function getServerUrl() { + return new url_1.URL(process.env['GITHUB_URL'] || 'https://github.com'); +} +exports.getServerUrl = getServerUrl; + + /***/ }), /***/ 87: @@ -5109,9 +5149,9 @@ const os = __importStar(__webpack_require__(87)); const path = __importStar(__webpack_require__(622)); const regexpHelper = __importStar(__webpack_require__(528)); const stateHelper = __importStar(__webpack_require__(153)); +const urlHelper = __importStar(__webpack_require__(81)); const v4_1 = __importDefault(__webpack_require__(826)); const IS_WINDOWS = process.platform === 'win32'; -const HOSTNAME = 'github.com'; const SSH_COMMAND_KEY = 'core.sshCommand'; function createAuthHelper(git, settings) { return new GitAuthHelper(git, settings); @@ -5119,9 +5159,6 @@ function createAuthHelper(git, settings) { exports.createAuthHelper = createAuthHelper; class GitAuthHelper { constructor(gitCommandManager, gitSourceSettings) { - this.tokenConfigKey = `http.https://${HOSTNAME}/.extraheader`; - this.insteadOfKey = `url.https://${HOSTNAME}/.insteadOf`; - this.insteadOfValue = `git@${HOSTNAME}:`; this.sshCommand = ''; this.sshKeyPath = ''; this.sshKnownHostsPath = ''; @@ -5129,10 +5166,15 @@ class GitAuthHelper { this.git = gitCommandManager; this.settings = gitSourceSettings || {}; // Token auth header + const serverUrl = urlHelper.getServerUrl(); + this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT] const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, 'utf8').toString('base64'); core.setSecret(basicCredential); this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`; this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`; + // Instead of SSH URL + this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT] + this.insteadOfValue = `git@${serverUrl.hostname}:`; } configureAuth() { return __awaiter(this, void 0, void 0, function* () { @@ -5797,14 +5839,12 @@ const io = __importStar(__webpack_require__(1)); const path = __importStar(__webpack_require__(622)); const refHelper = __importStar(__webpack_require__(227)); const stateHelper = __importStar(__webpack_require__(153)); -const hostname = 'github.com'; +const urlHelper = __importStar(__webpack_require__(81)); function getSource(settings) { return __awaiter(this, void 0, void 0, function* () { // Repository URL core.info(`Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}`); - const repositoryUrl = settings.sshKey - ? `git@${hostname}:${encodeURIComponent(settings.repositoryOwner)}/${encodeURIComponent(settings.repositoryName)}.git` - : `https://${hostname}/${encodeURIComponent(settings.repositoryOwner)}/${encodeURIComponent(settings.repositoryName)}`; + const repositoryUrl = urlHelper.getFetchUrl(settings); // Remove conflicting file path if (fsHelper.fileExistsSync(settings.repositoryPath)) { yield io.rmRF(settings.repositoryPath); @@ -9159,6 +9199,7 @@ const io = __importStar(__webpack_require__(1)); const path = __importStar(__webpack_require__(622)); const retryHelper = __importStar(__webpack_require__(587)); const toolCache = __importStar(__webpack_require__(533)); +const urlHelper = __importStar(__webpack_require__(81)); const v4_1 = __importDefault(__webpack_require__(826)); const IS_WINDOWS = process.platform === 'win32'; function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) { @@ -9209,7 +9250,7 @@ function downloadRepository(authToken, owner, repo, ref, commit, repositoryPath) exports.downloadRepository = downloadRepository; function downloadArchive(authToken, owner, repo, ref, commit) { return __awaiter(this, void 0, void 0, function* () { - const octokit = new github.GitHub(authToken); + const octokit = new github.GitHub(authToken, { baseUrl: urlHelper.getApiUrl() }); const params = { owner: owner, repo: repo, diff --git a/src/git-auth-helper.ts b/src/git-auth-helper.ts index 06e8912..92763b8 100644 --- a/src/git-auth-helper.ts +++ b/src/git-auth-helper.ts @@ -7,12 +7,12 @@ import * as os from 'os' import * as path from 'path' import * as regexpHelper from './regexp-helper' import * as stateHelper from './state-helper' +import * as urlHelper from './url-helper' import {default as uuid} from 'uuid/v4' import {IGitCommandManager} from './git-command-manager' import {IGitSourceSettings} from './git-source-settings' const IS_WINDOWS = process.platform === 'win32' -const HOSTNAME = 'github.com' const SSH_COMMAND_KEY = 'core.sshCommand' export interface IGitAuthHelper { @@ -33,15 +33,15 @@ export function createAuthHelper( class GitAuthHelper { private readonly git: IGitCommandManager private readonly settings: IGitSourceSettings - private readonly tokenConfigKey: string = `http.https://${HOSTNAME}/.extraheader` + private readonly tokenConfigKey: string + private readonly tokenConfigValue: string private readonly tokenPlaceholderConfigValue: string - private readonly insteadOfKey: string = `url.https://${HOSTNAME}/.insteadOf` - private readonly insteadOfValue: string = `git@${HOSTNAME}:` + private readonly insteadOfKey: string + private readonly insteadOfValue: string private sshCommand = '' private sshKeyPath = '' private sshKnownHostsPath = '' private temporaryHomePath = '' - private tokenConfigValue: string constructor( gitCommandManager: IGitCommandManager, @@ -51,6 +51,8 @@ class GitAuthHelper { this.settings = gitSourceSettings || (({} as unknown) as IGitSourceSettings) // Token auth header + const serverUrl = urlHelper.getServerUrl() + this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader` // "origin" is SCHEME://HOSTNAME[:PORT] const basicCredential = Buffer.from( `x-access-token:${this.settings.authToken}`, 'utf8' @@ -58,6 +60,10 @@ class GitAuthHelper { core.setSecret(basicCredential) this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***` this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}` + + // Instead of SSH URL + this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf` // "origin" is SCHEME://HOSTNAME[:PORT] + this.insteadOfValue = `git@${serverUrl.hostname}:` } async configureAuth(): Promise { diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 4bce702..85806bb 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -8,23 +8,16 @@ import * as io from '@actions/io' import * as path from 'path' import * as refHelper from './ref-helper' import * as stateHelper from './state-helper' +import * as urlHelper from './url-helper' import {IGitCommandManager} from './git-command-manager' import {IGitSourceSettings} from './git-source-settings' -const hostname = 'github.com' - export async function getSource(settings: IGitSourceSettings): Promise { // Repository URL core.info( `Syncing repository: ${settings.repositoryOwner}/${settings.repositoryName}` ) - const repositoryUrl = settings.sshKey - ? `git@${hostname}:${encodeURIComponent( - settings.repositoryOwner - )}/${encodeURIComponent(settings.repositoryName)}.git` - : `https://${hostname}/${encodeURIComponent( - settings.repositoryOwner - )}/${encodeURIComponent(settings.repositoryName)}` + const repositoryUrl = urlHelper.getFetchUrl(settings) // Remove conflicting file path if (fsHelper.fileExistsSync(settings.repositoryPath)) { diff --git a/src/github-api-helper.ts b/src/github-api-helper.ts index 83a2b86..df11a85 100644 --- a/src/github-api-helper.ts +++ b/src/github-api-helper.ts @@ -6,6 +6,7 @@ import * as io from '@actions/io' import * as path from 'path' import * as retryHelper from './retry-helper' import * as toolCache from '@actions/tool-cache' +import * as urlHelper from './url-helper' import {default as uuid} from 'uuid/v4' import {ReposGetArchiveLinkParams} from '@octokit/rest' @@ -74,7 +75,7 @@ async function downloadArchive( ref: string, commit: string ): Promise { - const octokit = new github.GitHub(authToken) + const octokit = new github.GitHub(authToken, {baseUrl: urlHelper.getApiUrl()}) const params: ReposGetArchiveLinkParams = { owner: owner, repo: repo, diff --git a/src/url-helper.ts b/src/url-helper.ts new file mode 100644 index 0000000..3e0e142 --- /dev/null +++ b/src/url-helper.ts @@ -0,0 +1,28 @@ +import * as assert from 'assert' +import {IGitSourceSettings} from './git-source-settings' +import {URL} from 'url' + +export function getApiUrl(): string { + return process.env['GITHUB_API_URL'] || 'https://api.github.com' +} + +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() + const encodedOwner = encodeURIComponent(settings.repositoryOwner) + const encodedName = encodeURIComponent(settings.repositoryName) + if (settings.sshKey) { + return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git` + } + + // "origin" is SCHEME://HOSTNAME[:PORT] + return `${serviceUrl.origin}/${encodedOwner}/${encodedName}` +} + +export function getServerUrl(): URL { + return new URL(process.env['GITHUB_URL'] || 'https://github.com') +}