mirror of
https://gitea.com/actions/checkout.git
synced 2024-11-01 01:20:35 +01:00
Merge 5b61398e30
into 1d96c772d1
This commit is contained in:
commit
7b65c4ec7b
@ -123,8 +123,9 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
|
|
||||||
# The base URL for the GitHub instance that you are trying to clone from, will use
|
# The base URL for the GitHub instance that you are trying to clone from, will use
|
||||||
# environment defaults to fetch from the same instance that the workflow is
|
# environment defaults to fetch from the same instance that the workflow is
|
||||||
# running from unless specified. Example URLs are https://github.com or
|
# running from unless specified. Also support URL pathname except SSH (`ssh-key`
|
||||||
# https://my-ghes-server.example.com
|
# not specified). Example URLs are https://github.com or
|
||||||
|
# https://my-ghes-server.example.com or https://my-ghes-server.example.com/git/
|
||||||
github-server-url: ''
|
github-server-url: ''
|
||||||
```
|
```
|
||||||
<!-- end usage -->
|
<!-- end usage -->
|
||||||
|
46
__test__/url-helper.test.ts
Normal file
46
__test__/url-helper.test.ts
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
import * as urlHelper from '../lib/url-helper'
|
||||||
|
|
||||||
|
import { IGitSourceSettings } from '../lib/git-source-settings';
|
||||||
|
|
||||||
|
function getSettings(u: string): IGitSourceSettings {
|
||||||
|
return {
|
||||||
|
githubServerUrl: u,
|
||||||
|
repositoryPath: '',
|
||||||
|
repositoryOwner: 'some-owner',
|
||||||
|
repositoryName: 'some-name',
|
||||||
|
ref: '', commit: '', clean: false, filter: undefined,
|
||||||
|
sparseCheckout: [], sparseCheckoutConeMode: false,
|
||||||
|
fetchDepth: 0, fetchTags: false, showProgress: false,
|
||||||
|
lfs: false, submodules: false, nestedSubmodules: false,
|
||||||
|
authToken: '', sshKey: '', sshKnownHosts: '', sshStrict: false,
|
||||||
|
persistCredentials: false, workflowOrganizationId: undefined,
|
||||||
|
setSafeDirectory: false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
describe('url-helper tests', () => {
|
||||||
|
it('getFetchUrl works on GitHub repos', async () => {
|
||||||
|
expect(urlHelper.getFetchUrl(getSettings('https://github.com'))).toBe(
|
||||||
|
"https://github.com/some-owner/some-name"
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('getFetchUrl works on 3rd party repos with sub-path', async () => {
|
||||||
|
expect(urlHelper.getFetchUrl(getSettings('https://other.com/subpath'))).toBe(
|
||||||
|
'https://other.com/subpath/some-owner/some-name'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('getFetchUrl works on 3rd party repos with ssh keys', async () => {
|
||||||
|
expect(urlHelper.getFetchUrl(getSettings('https://other.com/subpath'))).toBe(
|
||||||
|
'https://other.com/subpath/some-owner/some-name'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
|
||||||
|
it('getFetchUrl works with ssh credentials', async () => {
|
||||||
|
let settings = getSettings('https://other.com/subpath');
|
||||||
|
settings.sshKey = 'not-empty'
|
||||||
|
expect(urlHelper.getFetchUrl(settings)).toBe(
|
||||||
|
'git@other.com:some-owner/some-name.git'
|
||||||
|
)
|
||||||
|
})
|
||||||
|
})
|
@ -96,7 +96,7 @@ inputs:
|
|||||||
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
||||||
default: true
|
default: true
|
||||||
github-server-url:
|
github-server-url:
|
||||||
description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
|
description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Also support URL pathname except SSH (`ssh-key` not specified). Example URLs are https://github.com or https://my-ghes-server.example.com or https://my-ghes-server.example.com/git/
|
||||||
required: false
|
required: false
|
||||||
runs:
|
runs:
|
||||||
using: node20
|
using: node20
|
||||||
|
17
dist/index.js
vendored
17
dist/index.js
vendored
@ -163,13 +163,14 @@ class GitAuthHelper {
|
|||||||
this.settings = gitSourceSettings || {};
|
this.settings = gitSourceSettings || {};
|
||||||
// Token auth header
|
// Token auth header
|
||||||
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl);
|
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl);
|
||||||
this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
const baseURL = urlHelper.getBaseUrl(serverUrl.href);
|
||||||
|
this.tokenConfigKey = `http.${baseURL}/.extraheader`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, 'utf8').toString('base64');
|
const basicCredential = Buffer.from(`x-access-token:${this.settings.authToken}`, 'utf8').toString('base64');
|
||||||
core.setSecret(basicCredential);
|
core.setSecret(basicCredential);
|
||||||
this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
|
this.tokenPlaceholderConfigValue = `AUTHORIZATION: basic ***`;
|
||||||
this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
|
this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`;
|
||||||
// Instead of SSH URL
|
// Instead of SSH URL
|
||||||
this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
this.insteadOfKey = `url.${baseURL}/.insteadOf`; // "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
this.insteadOfValues.push(`git@${serverUrl.hostname}:`);
|
this.insteadOfValues.push(`git@${serverUrl.hostname}:`);
|
||||||
if (this.settings.workflowOrganizationId) {
|
if (this.settings.workflowOrganizationId) {
|
||||||
this.insteadOfValues.push(`org-${this.settings.workflowOrganizationId}@github.com:`);
|
this.insteadOfValues.push(`org-${this.settings.workflowOrganizationId}@github.com:`);
|
||||||
@ -2391,7 +2392,7 @@ var __importStar = (this && this.__importStar) || function (mod) {
|
|||||||
return result;
|
return result;
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.isGhes = exports.getServerApiUrl = exports.getServerUrl = exports.getFetchUrl = void 0;
|
exports.isGhes = exports.getServerApiUrl = exports.getBaseUrl = exports.getServerUrl = exports.getFetchUrl = void 0;
|
||||||
const assert = __importStar(__nccwpck_require__(9491));
|
const assert = __importStar(__nccwpck_require__(9491));
|
||||||
const url_1 = __nccwpck_require__(7310);
|
const url_1 = __nccwpck_require__(7310);
|
||||||
function getFetchUrl(settings) {
|
function getFetchUrl(settings) {
|
||||||
@ -2405,16 +2406,22 @@ function getFetchUrl(settings) {
|
|||||||
return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`;
|
return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`;
|
||||||
}
|
}
|
||||||
// "origin" is SCHEME://HOSTNAME[:PORT]
|
// "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
|
const baseURL = getBaseUrl(serviceUrl.href);
|
||||||
|
return `${baseURL}/${encodedOwner}/${encodedName}`;
|
||||||
}
|
}
|
||||||
exports.getFetchUrl = getFetchUrl;
|
exports.getFetchUrl = getFetchUrl;
|
||||||
function getServerUrl(url) {
|
function getServerUrl(url) {
|
||||||
let urlValue = url && url.trim().length > 0
|
const urlValue = url && url.trim().length > 0
|
||||||
? url
|
? url
|
||||||
: process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
: process.env['GITHUB_SERVER_URL'] || 'https://github.com';
|
||||||
return new url_1.URL(urlValue);
|
return new url_1.URL(urlValue);
|
||||||
}
|
}
|
||||||
exports.getServerUrl = getServerUrl;
|
exports.getServerUrl = getServerUrl;
|
||||||
|
function getBaseUrl(url) {
|
||||||
|
const matcher = url.match(/^[^?]+/);
|
||||||
|
return (matcher && matcher[0].replace(/\/+$/g, '')) || '';
|
||||||
|
}
|
||||||
|
exports.getBaseUrl = getBaseUrl;
|
||||||
function getServerApiUrl(url) {
|
function getServerApiUrl(url) {
|
||||||
let apiUrl = 'https://api.github.com';
|
let apiUrl = 'https://api.github.com';
|
||||||
if (isGhes(url)) {
|
if (isGhes(url)) {
|
||||||
|
@ -53,7 +53,8 @@ class GitAuthHelper {
|
|||||||
|
|
||||||
// Token auth header
|
// Token auth header
|
||||||
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl)
|
const serverUrl = urlHelper.getServerUrl(this.settings.githubServerUrl)
|
||||||
this.tokenConfigKey = `http.${serverUrl.origin}/.extraheader` // "origin" is SCHEME://HOSTNAME[:PORT]
|
const baseURL = urlHelper.getBaseUrl(serverUrl.href)
|
||||||
|
this.tokenConfigKey = `http.${baseURL}/.extraheader` // "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
const basicCredential = Buffer.from(
|
const basicCredential = Buffer.from(
|
||||||
`x-access-token:${this.settings.authToken}`,
|
`x-access-token:${this.settings.authToken}`,
|
||||||
'utf8'
|
'utf8'
|
||||||
@ -63,7 +64,7 @@ class GitAuthHelper {
|
|||||||
this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`
|
this.tokenConfigValue = `AUTHORIZATION: basic ${basicCredential}`
|
||||||
|
|
||||||
// Instead of SSH URL
|
// Instead of SSH URL
|
||||||
this.insteadOfKey = `url.${serverUrl.origin}/.insteadOf` // "origin" is SCHEME://HOSTNAME[:PORT]
|
this.insteadOfKey = `url.${baseURL}/.insteadOf` // "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
this.insteadOfValues.push(`git@${serverUrl.hostname}:`)
|
this.insteadOfValues.push(`git@${serverUrl.hostname}:`)
|
||||||
if (this.settings.workflowOrganizationId) {
|
if (this.settings.workflowOrganizationId) {
|
||||||
this.insteadOfValues.push(
|
this.insteadOfValues.push(
|
||||||
|
@ -17,17 +17,22 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// "origin" is SCHEME://HOSTNAME[:PORT]
|
// "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`
|
const baseURL = getBaseUrl(serviceUrl)
|
||||||
|
return `${baseURL}/${encodedOwner}/${encodedName}`
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getServerUrl(url?: string): URL {
|
export function getServerUrl(url?: string): URL {
|
||||||
let urlValue =
|
const urlValue =
|
||||||
url && url.trim().length > 0
|
url && url.trim().length > 0
|
||||||
? url
|
? url
|
||||||
: process.env['GITHUB_SERVER_URL'] || 'https://github.com'
|
: process.env['GITHUB_SERVER_URL'] || 'https://github.com'
|
||||||
return new URL(urlValue)
|
return new URL(urlValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getBaseUrl(u: URL) {
|
||||||
|
return u.protocol + "//" + u.host + u.pathname.replace(/\/+$/g, '');
|
||||||
|
}
|
||||||
|
|
||||||
export function getServerApiUrl(url?: string): string {
|
export function getServerApiUrl(url?: string): string {
|
||||||
let apiUrl = 'https://api.github.com'
|
let apiUrl = 'https://api.github.com'
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user