mirror of
https://gitea.com/actions/checkout.git
synced 2025-07-07 19:29:58 +08:00
Compare commits
5 Commits
v4.1.3
...
jww3-minve
Author | SHA1 | Date | |
---|---|---|---|
425626d259 | |||
64dbc8124d | |||
06abf5564e | |||
db715dc5a4 | |||
8926c30a30 |
@ -8,7 +8,7 @@ Only a single commit is fetched by default, for the ref/SHA that triggered the w
|
|||||||
|
|
||||||
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out.
|
The auth token is persisted in the local git config. This enables your scripts to run authenticated git commands. The token is removed during post-job cleanup. Set `persist-credentials: false` to opt-out.
|
||||||
|
|
||||||
When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.
|
When Git 2.28 or higher is not in your PATH, falls back to the REST API to download the files.
|
||||||
|
|
||||||
# What's new
|
# What's new
|
||||||
|
|
||||||
@ -62,11 +62,6 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
# Default: true
|
# Default: true
|
||||||
ssh-strict: ''
|
ssh-strict: ''
|
||||||
|
|
||||||
# The user to use when connecting to the remote SSH host. By default 'git' is
|
|
||||||
# used.
|
|
||||||
# Default: git
|
|
||||||
ssh-user: ''
|
|
||||||
|
|
||||||
# Whether to configure the token or SSH key with the local git config
|
# Whether to configure the token or SSH key with the local git config
|
||||||
# Default: true
|
# Default: true
|
||||||
persist-credentials: ''
|
persist-credentials: ''
|
||||||
|
@ -796,8 +796,7 @@ async function setup(testName: string): Promise<void> {
|
|||||||
),
|
),
|
||||||
tryDisableAutomaticGarbageCollection: jest.fn(),
|
tryDisableAutomaticGarbageCollection: jest.fn(),
|
||||||
tryGetFetchUrl: jest.fn(),
|
tryGetFetchUrl: jest.fn(),
|
||||||
tryReset: jest.fn(),
|
tryReset: jest.fn()
|
||||||
version: jest.fn()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
settings = {
|
settings = {
|
||||||
@ -821,7 +820,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
sshKey: sshPath ? 'some ssh private key' : '',
|
sshKey: sshPath ? 'some ssh private key' : '',
|
||||||
sshKnownHosts: '',
|
sshKnownHosts: '',
|
||||||
sshStrict: true,
|
sshStrict: true,
|
||||||
sshUser: '',
|
|
||||||
workflowOrganizationId: 123456,
|
workflowOrganizationId: 123456,
|
||||||
setSafeDirectory: true,
|
setSafeDirectory: true,
|
||||||
githubServerUrl: githubServerUrl
|
githubServerUrl: githubServerUrl
|
||||||
|
@ -24,7 +24,7 @@ describe('git-auth-helper tests', () => {
|
|||||||
console.log(args, options.listeners.stdout)
|
console.log(args, options.listeners.stdout)
|
||||||
|
|
||||||
if (args.includes('version')) {
|
if (args.includes('version')) {
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
options.listeners.stdout(Buffer.from('2.28'))
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -57,7 +57,7 @@ describe('git-auth-helper tests', () => {
|
|||||||
console.log(args, options.listeners.stdout)
|
console.log(args, options.listeners.stdout)
|
||||||
|
|
||||||
if (args.includes('version')) {
|
if (args.includes('version')) {
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
options.listeners.stdout(Buffer.from('2.28'))
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -97,7 +97,7 @@ describe('Test fetchDepth and fetchTags options', () => {
|
|||||||
console.log(args, options.listeners.stdout)
|
console.log(args, options.listeners.stdout)
|
||||||
|
|
||||||
if (args.includes('version')) {
|
if (args.includes('version')) {
|
||||||
options.listeners.stdout(Buffer.from('2.18'))
|
options.listeners.stdout(Buffer.from('2.28'))
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
|
@ -501,7 +501,6 @@ async function setup(testName: string): Promise<void> {
|
|||||||
}),
|
}),
|
||||||
tryReset: jest.fn(async () => {
|
tryReset: jest.fn(async () => {
|
||||||
return true
|
return true
|
||||||
}),
|
})
|
||||||
version: jest.fn()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
import {GitVersion} from '../src/git-version'
|
import {GitVersion} from '../lib/git-version'
|
||||||
import {MinimumGitSparseCheckoutVersion} from '../src/git-command-manager'
|
|
||||||
|
|
||||||
describe('git-version tests', () => {
|
describe('git-version tests', () => {
|
||||||
it('basics', async () => {
|
it('basics', async () => {
|
||||||
@ -43,44 +42,4 @@ describe('git-version tests', () => {
|
|||||||
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
expect(version.checkMinimum(new GitVersion('5.1'))).toBeFalsy()
|
||||||
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
expect(version.checkMinimum(new GitVersion('5.1.2'))).toBeFalsy()
|
||||||
})
|
})
|
||||||
|
|
||||||
it('sparse checkout', async () => {
|
|
||||||
const minSparseVer = MinimumGitSparseCheckoutVersion
|
|
||||||
expect(new GitVersion('1.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('1.99').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.24.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.25.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.26.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.0').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.1').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
expect(new GitVersion('2.27.9').checkMinimum(minSparseVer)).toBeFalsy()
|
|
||||||
// /---------------------------------------
|
|
||||||
// ^^^ before / after vvv
|
|
||||||
// --------------------------/
|
|
||||||
expect(new GitVersion('2.28').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.28.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.1').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.29.9').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('2.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('3.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('3.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('4.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('4.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('5.0').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
expect(new GitVersion('5.99').checkMinimum(minSparseVer)).toBeTruthy()
|
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
@ -45,10 +45,6 @@ inputs:
|
|||||||
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
|
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
|
||||||
configure additional hosts.
|
configure additional hosts.
|
||||||
default: true
|
default: true
|
||||||
ssh-user:
|
|
||||||
description: >
|
|
||||||
The user to use when connecting to the remote SSH host. By default 'git' is used.
|
|
||||||
default: git
|
|
||||||
persist-credentials:
|
persist-credentials:
|
||||||
description: 'Whether to configure the token or SSH key with the local git config'
|
description: 'Whether to configure the token or SSH key with the local git config'
|
||||||
default: true
|
default: true
|
||||||
|
47
dist/index.js
vendored
47
dist/index.js
vendored
@ -467,7 +467,7 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
Object.defineProperty(exports, "__esModule", ({ value: true }));
|
||||||
exports.createCommandManager = exports.MinimumGitSparseCheckoutVersion = exports.MinimumGitVersion = void 0;
|
exports.createCommandManager = exports.MinimumGitVersion = void 0;
|
||||||
const core = __importStar(__nccwpck_require__(2186));
|
const core = __importStar(__nccwpck_require__(2186));
|
||||||
const exec = __importStar(__nccwpck_require__(1514));
|
const exec = __importStar(__nccwpck_require__(1514));
|
||||||
const fs = __importStar(__nccwpck_require__(7147));
|
const fs = __importStar(__nccwpck_require__(7147));
|
||||||
@ -481,8 +481,7 @@ const git_version_1 = __nccwpck_require__(3142);
|
|||||||
// Auth header not supported before 2.9
|
// Auth header not supported before 2.9
|
||||||
// Wire protocol v2 not supported before 2.18
|
// Wire protocol v2 not supported before 2.18
|
||||||
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
|
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
|
||||||
exports.MinimumGitVersion = new git_version_1.GitVersion('2.18');
|
exports.MinimumGitVersion = new git_version_1.GitVersion('2.28');
|
||||||
exports.MinimumGitSparseCheckoutVersion = new git_version_1.GitVersion('2.28');
|
|
||||||
function createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
function createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout);
|
return yield GitCommandManager.createCommandManager(workingDirectory, lfs, doSparseCheckout);
|
||||||
@ -500,7 +499,6 @@ class GitCommandManager {
|
|||||||
this.lfs = false;
|
this.lfs = false;
|
||||||
this.doSparseCheckout = false;
|
this.doSparseCheckout = false;
|
||||||
this.workingDirectory = '';
|
this.workingDirectory = '';
|
||||||
this.gitVersion = new git_version_1.GitVersion();
|
|
||||||
}
|
}
|
||||||
branchDelete(remote, branch) {
|
branchDelete(remote, branch) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
@ -526,13 +524,7 @@ class GitCommandManager {
|
|||||||
branchList(remote) {
|
branchList(remote) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const result = [];
|
const result = [];
|
||||||
// Note, this implementation uses "rev-parse --symbolic-full-name" because the output from
|
const args = ['rev-parse', '--symbolic'];
|
||||||
// "branch --list" is more difficult when in a detached HEAD state.
|
|
||||||
// TODO(https://github.com/actions/checkout/issues/786): this implementation uses
|
|
||||||
// "rev-parse --symbolic-full-name" because there is a bug
|
|
||||||
// in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. When
|
|
||||||
// 2.18 is no longer supported, we can switch back to --symbolic.
|
|
||||||
const args = ['rev-parse', '--symbolic-full-name'];
|
|
||||||
if (remote) {
|
if (remote) {
|
||||||
args.push('--remotes=origin');
|
args.push('--remotes=origin');
|
||||||
}
|
}
|
||||||
@ -853,11 +845,6 @@ class GitCommandManager {
|
|||||||
return output.exitCode === 0;
|
return output.exitCode === 0;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
version() {
|
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
|
||||||
return this.gitVersion;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
static createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
static createCommandManager(workingDirectory, lfs, doSparseCheckout) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const result = new GitCommandManager();
|
const result = new GitCommandManager();
|
||||||
@ -909,21 +896,21 @@ class GitCommandManager {
|
|||||||
this.gitPath = yield io.which('git', true);
|
this.gitPath = yield io.which('git', true);
|
||||||
// Git version
|
// Git version
|
||||||
core.debug('Getting git version');
|
core.debug('Getting git version');
|
||||||
this.gitVersion = new git_version_1.GitVersion();
|
let gitVersion = new git_version_1.GitVersion();
|
||||||
let gitOutput = yield this.execGit(['version']);
|
let gitOutput = yield this.execGit(['version']);
|
||||||
let stdout = gitOutput.stdout.trim();
|
let stdout = gitOutput.stdout.trim();
|
||||||
if (!stdout.includes('\n')) {
|
if (!stdout.includes('\n')) {
|
||||||
const match = stdout.match(/\d+\.\d+(\.\d+)?/);
|
const match = stdout.match(/\d+\.\d+(\.\d+)?/);
|
||||||
if (match) {
|
if (match) {
|
||||||
this.gitVersion = new git_version_1.GitVersion(match[0]);
|
gitVersion = new git_version_1.GitVersion(match[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!this.gitVersion.isValid()) {
|
if (!gitVersion.isValid()) {
|
||||||
throw new Error('Unable to determine git version');
|
throw new Error('Unable to determine git version');
|
||||||
}
|
}
|
||||||
// Minimum git version
|
// Minimum git version
|
||||||
if (!this.gitVersion.checkMinimum(exports.MinimumGitVersion)) {
|
if (!gitVersion.checkMinimum(exports.MinimumGitVersion)) {
|
||||||
throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
|
throw new Error(`Minimum required git version is ${exports.MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`);
|
||||||
}
|
}
|
||||||
if (this.lfs) {
|
if (this.lfs) {
|
||||||
// Git-lfs version
|
// Git-lfs version
|
||||||
@ -950,13 +937,8 @@ class GitCommandManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.doSparseCheckout = doSparseCheckout;
|
this.doSparseCheckout = doSparseCheckout;
|
||||||
if (this.doSparseCheckout) {
|
|
||||||
if (!this.gitVersion.checkMinimum(exports.MinimumGitSparseCheckoutVersion)) {
|
|
||||||
throw new Error(`Minimum Git version required for sparse checkout is ${exports.MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Set the user agent
|
// Set the user agent
|
||||||
const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`;
|
const gitHttpUserAgent = `git/${gitVersion} (github-actions-checkout)`;
|
||||||
core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
|
core.debug(`Set git useragent to: ${gitHttpUserAgent}`);
|
||||||
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
|
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent;
|
||||||
});
|
});
|
||||||
@ -1161,7 +1143,6 @@ const path = __importStar(__nccwpck_require__(1017));
|
|||||||
const refHelper = __importStar(__nccwpck_require__(8601));
|
const refHelper = __importStar(__nccwpck_require__(8601));
|
||||||
const stateHelper = __importStar(__nccwpck_require__(8647));
|
const stateHelper = __importStar(__nccwpck_require__(8647));
|
||||||
const urlHelper = __importStar(__nccwpck_require__(9437));
|
const urlHelper = __importStar(__nccwpck_require__(9437));
|
||||||
const git_command_manager_1 = __nccwpck_require__(738);
|
|
||||||
function getSource(settings) {
|
function getSource(settings) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
// Repository URL
|
// Repository URL
|
||||||
@ -1295,11 +1276,7 @@ function getSource(settings) {
|
|||||||
}
|
}
|
||||||
// Sparse checkout
|
// Sparse checkout
|
||||||
if (!settings.sparseCheckout) {
|
if (!settings.sparseCheckout) {
|
||||||
let gitVersion = yield git.version();
|
yield git.disableSparseCheckout();
|
||||||
// no need to disable sparse-checkout if the installed git runtime doesn't even support it.
|
|
||||||
if (gitVersion.checkMinimum(git_command_manager_1.MinimumGitSparseCheckoutVersion)) {
|
|
||||||
yield git.disableSparseCheckout();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
core.startGroup('Setting up sparse checkout');
|
core.startGroup('Setting up sparse checkout');
|
||||||
@ -1798,7 +1775,6 @@ function getInputs() {
|
|||||||
result.sshKnownHosts = core.getInput('ssh-known-hosts');
|
result.sshKnownHosts = core.getInput('ssh-known-hosts');
|
||||||
result.sshStrict =
|
result.sshStrict =
|
||||||
(core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE';
|
(core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE';
|
||||||
result.sshUser = core.getInput('ssh-user');
|
|
||||||
// Persist credentials
|
// Persist credentials
|
||||||
result.persistCredentials =
|
result.persistCredentials =
|
||||||
(core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE';
|
(core.getInput('persist-credentials') || 'false').toUpperCase() === 'TRUE';
|
||||||
@ -2401,8 +2377,7 @@ function getFetchUrl(settings) {
|
|||||||
const encodedOwner = encodeURIComponent(settings.repositoryOwner);
|
const encodedOwner = encodeURIComponent(settings.repositoryOwner);
|
||||||
const encodedName = encodeURIComponent(settings.repositoryName);
|
const encodedName = encodeURIComponent(settings.repositoryName);
|
||||||
if (settings.sshKey) {
|
if (settings.sshKey) {
|
||||||
const user = settings.sshUser.length > 0 ? settings.sshUser : 'git';
|
return `git@${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}`;
|
return `${serviceUrl.origin}/${encodedOwner}/${encodedName}`;
|
||||||
|
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "checkout",
|
"name": "checkout",
|
||||||
"version": "4.1.3",
|
"version": "5.0.0",
|
||||||
"lockfileVersion": 2,
|
"lockfileVersion": 2,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "checkout",
|
"name": "checkout",
|
||||||
"version": "4.1.3",
|
"version": "5.0.0",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@actions/core": "^1.10.0",
|
"@actions/core": "^1.10.0",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "checkout",
|
"name": "checkout",
|
||||||
"version": "4.1.3",
|
"version": "5.0.0",
|
||||||
"description": "checkout action",
|
"description": "checkout action",
|
||||||
"main": "lib/main.js",
|
"main": "lib/main.js",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
@ -12,8 +12,7 @@ import {GitVersion} from './git-version'
|
|||||||
// Auth header not supported before 2.9
|
// Auth header not supported before 2.9
|
||||||
// Wire protocol v2 not supported before 2.18
|
// Wire protocol v2 not supported before 2.18
|
||||||
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
|
// sparse-checkout not [well-]supported before 2.28 (see https://github.com/actions/checkout/issues/1386)
|
||||||
export const MinimumGitVersion = new GitVersion('2.18')
|
export const MinimumGitVersion = new GitVersion('2.28')
|
||||||
export const MinimumGitSparseCheckoutVersion = new GitVersion('2.28')
|
|
||||||
|
|
||||||
export interface IGitCommandManager {
|
export interface IGitCommandManager {
|
||||||
branchDelete(remote: boolean, branch: string): Promise<void>
|
branchDelete(remote: boolean, branch: string): Promise<void>
|
||||||
@ -62,7 +61,6 @@ export interface IGitCommandManager {
|
|||||||
tryDisableAutomaticGarbageCollection(): Promise<boolean>
|
tryDisableAutomaticGarbageCollection(): Promise<boolean>
|
||||||
tryGetFetchUrl(): Promise<string>
|
tryGetFetchUrl(): Promise<string>
|
||||||
tryReset(): Promise<boolean>
|
tryReset(): Promise<boolean>
|
||||||
version(): Promise<GitVersion>
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function createCommandManager(
|
export async function createCommandManager(
|
||||||
@ -86,7 +84,6 @@ class GitCommandManager {
|
|||||||
private lfs = false
|
private lfs = false
|
||||||
private doSparseCheckout = false
|
private doSparseCheckout = false
|
||||||
private workingDirectory = ''
|
private workingDirectory = ''
|
||||||
private gitVersion: GitVersion = new GitVersion()
|
|
||||||
|
|
||||||
// Private constructor; use createCommandManager()
|
// Private constructor; use createCommandManager()
|
||||||
private constructor() {}
|
private constructor() {}
|
||||||
@ -114,16 +111,7 @@ class GitCommandManager {
|
|||||||
|
|
||||||
async branchList(remote: boolean): Promise<string[]> {
|
async branchList(remote: boolean): Promise<string[]> {
|
||||||
const result: string[] = []
|
const result: string[] = []
|
||||||
|
const args = ['rev-parse', '--symbolic']
|
||||||
// Note, this implementation uses "rev-parse --symbolic-full-name" because the output from
|
|
||||||
// "branch --list" is more difficult when in a detached HEAD state.
|
|
||||||
|
|
||||||
// TODO(https://github.com/actions/checkout/issues/786): this implementation uses
|
|
||||||
// "rev-parse --symbolic-full-name" because there is a bug
|
|
||||||
// in Git 2.18 that causes "rev-parse --symbolic" to output symbolic full names. When
|
|
||||||
// 2.18 is no longer supported, we can switch back to --symbolic.
|
|
||||||
|
|
||||||
const args = ['rev-parse', '--symbolic-full-name']
|
|
||||||
if (remote) {
|
if (remote) {
|
||||||
args.push('--remotes=origin')
|
args.push('--remotes=origin')
|
||||||
} else {
|
} else {
|
||||||
@ -484,10 +472,6 @@ class GitCommandManager {
|
|||||||
return output.exitCode === 0
|
return output.exitCode === 0
|
||||||
}
|
}
|
||||||
|
|
||||||
async version(): Promise<GitVersion> {
|
|
||||||
return this.gitVersion
|
|
||||||
}
|
|
||||||
|
|
||||||
static async createCommandManager(
|
static async createCommandManager(
|
||||||
workingDirectory: string,
|
workingDirectory: string,
|
||||||
lfs: boolean,
|
lfs: boolean,
|
||||||
@ -564,23 +548,23 @@ class GitCommandManager {
|
|||||||
|
|
||||||
// Git version
|
// Git version
|
||||||
core.debug('Getting git version')
|
core.debug('Getting git version')
|
||||||
this.gitVersion = new GitVersion()
|
let gitVersion = new GitVersion()
|
||||||
let gitOutput = await this.execGit(['version'])
|
let gitOutput = await this.execGit(['version'])
|
||||||
let stdout = gitOutput.stdout.trim()
|
let stdout = gitOutput.stdout.trim()
|
||||||
if (!stdout.includes('\n')) {
|
if (!stdout.includes('\n')) {
|
||||||
const match = stdout.match(/\d+\.\d+(\.\d+)?/)
|
const match = stdout.match(/\d+\.\d+(\.\d+)?/)
|
||||||
if (match) {
|
if (match) {
|
||||||
this.gitVersion = new GitVersion(match[0])
|
gitVersion = new GitVersion(match[0])
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!this.gitVersion.isValid()) {
|
if (!gitVersion.isValid()) {
|
||||||
throw new Error('Unable to determine git version')
|
throw new Error('Unable to determine git version')
|
||||||
}
|
}
|
||||||
|
|
||||||
// Minimum git version
|
// Minimum git version
|
||||||
if (!this.gitVersion.checkMinimum(MinimumGitVersion)) {
|
if (!gitVersion.checkMinimum(MinimumGitVersion)) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`
|
`Minimum required git version is ${MinimumGitVersion}. Your git ('${this.gitPath}') is ${gitVersion}`
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,15 +597,9 @@ class GitCommandManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
this.doSparseCheckout = doSparseCheckout
|
this.doSparseCheckout = doSparseCheckout
|
||||||
if (this.doSparseCheckout) {
|
|
||||||
if (!this.gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) {
|
|
||||||
throw new Error(
|
|
||||||
`Minimum Git version required for sparse checkout is ${MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Set the user agent
|
// Set the user agent
|
||||||
const gitHttpUserAgent = `git/${this.gitVersion} (github-actions-checkout)`
|
const gitHttpUserAgent = `git/${gitVersion} (github-actions-checkout)`
|
||||||
core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
|
core.debug(`Set git useragent to: ${gitHttpUserAgent}`)
|
||||||
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
|
this.gitEnv['GIT_HTTP_USER_AGENT'] = gitHttpUserAgent
|
||||||
}
|
}
|
||||||
|
@ -9,10 +9,7 @@ import * as path from 'path'
|
|||||||
import * as refHelper from './ref-helper'
|
import * as refHelper from './ref-helper'
|
||||||
import * as stateHelper from './state-helper'
|
import * as stateHelper from './state-helper'
|
||||||
import * as urlHelper from './url-helper'
|
import * as urlHelper from './url-helper'
|
||||||
import {
|
import {IGitCommandManager} from './git-command-manager'
|
||||||
MinimumGitSparseCheckoutVersion,
|
|
||||||
IGitCommandManager
|
|
||||||
} from './git-command-manager'
|
|
||||||
import {IGitSourceSettings} from './git-source-settings'
|
import {IGitSourceSettings} from './git-source-settings'
|
||||||
|
|
||||||
export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
||||||
@ -212,11 +209,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
|||||||
|
|
||||||
// Sparse checkout
|
// Sparse checkout
|
||||||
if (!settings.sparseCheckout) {
|
if (!settings.sparseCheckout) {
|
||||||
let gitVersion = await git.version()
|
await git.disableSparseCheckout()
|
||||||
// no need to disable sparse-checkout if the installed git runtime doesn't even support it.
|
|
||||||
if (gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) {
|
|
||||||
await git.disableSparseCheckout()
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
core.startGroup('Setting up sparse checkout')
|
core.startGroup('Setting up sparse checkout')
|
||||||
if (settings.sparseCheckoutConeMode) {
|
if (settings.sparseCheckoutConeMode) {
|
||||||
|
@ -94,11 +94,6 @@ export interface IGitSourceSettings {
|
|||||||
*/
|
*/
|
||||||
sshStrict: boolean
|
sshStrict: boolean
|
||||||
|
|
||||||
/**
|
|
||||||
* The SSH user to login as
|
|
||||||
*/
|
|
||||||
sshUser: string
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Indicates whether to persist the credentials on disk to enable scripting authenticated git commands
|
* Indicates whether to persist the credentials on disk to enable scripting authenticated git commands
|
||||||
*/
|
*/
|
||||||
|
@ -143,7 +143,6 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
|||||||
result.sshKnownHosts = core.getInput('ssh-known-hosts')
|
result.sshKnownHosts = core.getInput('ssh-known-hosts')
|
||||||
result.sshStrict =
|
result.sshStrict =
|
||||||
(core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'
|
(core.getInput('ssh-strict') || 'true').toUpperCase() === 'TRUE'
|
||||||
result.sshUser = core.getInput('ssh-user')
|
|
||||||
|
|
||||||
// Persist credentials
|
// Persist credentials
|
||||||
result.persistCredentials =
|
result.persistCredentials =
|
||||||
|
@ -12,8 +12,7 @@ export function getFetchUrl(settings: IGitSourceSettings): string {
|
|||||||
const encodedOwner = encodeURIComponent(settings.repositoryOwner)
|
const encodedOwner = encodeURIComponent(settings.repositoryOwner)
|
||||||
const encodedName = encodeURIComponent(settings.repositoryName)
|
const encodedName = encodeURIComponent(settings.repositoryName)
|
||||||
if (settings.sshKey) {
|
if (settings.sshKey) {
|
||||||
const user = settings.sshUser.length > 0 ? settings.sshUser : 'git'
|
return `git@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`
|
||||||
return `${user}@${serviceUrl.hostname}:${encodedOwner}/${encodedName}.git`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// "origin" is SCHEME://HOSTNAME[:PORT]
|
// "origin" is SCHEME://HOSTNAME[:PORT]
|
||||||
|
Reference in New Issue
Block a user