Compare commits

..

No commits in common. "main" and "v4.1.2" have entirely different histories.
main ... v4.1.2

9 changed files with 31 additions and 101 deletions

View File

@ -19,10 +19,7 @@ jobs:
tag: tag:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
# Note this update workflow can also be used as a rollback tool. - uses: actions/checkout@v3
# For that reason, it's best to pin `actions/checkout` to a known, stable version
# (typically, about two releases back).
- uses: actions/checkout@v4.1.1
with: with:
fetch-depth: 0 fetch-depth: 0
- name: Git config - name: Git config

View File

@ -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 = {

View File

@ -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()
} }
} }

View File

@ -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()
})
}) })

35
dist/index.js vendored
View File

@ -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));
@ -480,9 +480,7 @@ const retryHelper = __importStar(__nccwpck_require__(2155));
const git_version_1 = __nccwpck_require__(3142); 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)
exports.MinimumGitVersion = new git_version_1.GitVersion('2.18'); exports.MinimumGitVersion = new git_version_1.GitVersion('2.18');
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 +498,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* () {
@ -853,11 +850,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 +901,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
@ -951,12 +943,14 @@ class GitCommandManager {
} }
this.doSparseCheckout = doSparseCheckout; this.doSparseCheckout = doSparseCheckout;
if (this.doSparseCheckout) { if (this.doSparseCheckout) {
if (!this.gitVersion.checkMinimum(exports.MinimumGitSparseCheckoutVersion)) { // The `git sparse-checkout` command was introduced in Git v2.25.0
throw new Error(`Minimum Git version required for sparse checkout is ${exports.MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}`); const minimumGitSparseCheckoutVersion = new git_version_1.GitVersion('2.25');
if (!gitVersion.checkMinimum(minimumGitSparseCheckoutVersion)) {
throw new Error(`Minimum Git version required for sparse checkout is ${minimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${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 +1155,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 +1288,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');

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "checkout", "name": "checkout",
"version": "4.1.3", "version": "4.1.2",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "checkout", "name": "checkout",
"version": "4.1.3", "version": "4.1.2",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@actions/core": "^1.10.0", "@actions/core": "^1.10.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "checkout", "name": "checkout",
"version": "4.1.3", "version": "4.1.2",
"description": "checkout action", "description": "checkout action",
"main": "lib/main.js", "main": "lib/main.js",
"scripts": { "scripts": {

View File

@ -11,9 +11,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)
export const MinimumGitVersion = new GitVersion('2.18') export const MinimumGitVersion = new GitVersion('2.18')
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 +60,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 +83,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() {}
@ -484,10 +480,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 +556,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}`
) )
} }
@ -614,14 +606,16 @@ class GitCommandManager {
this.doSparseCheckout = doSparseCheckout this.doSparseCheckout = doSparseCheckout
if (this.doSparseCheckout) { if (this.doSparseCheckout) {
if (!this.gitVersion.checkMinimum(MinimumGitSparseCheckoutVersion)) { // The `git sparse-checkout` command was introduced in Git v2.25.0
const minimumGitSparseCheckoutVersion = new GitVersion('2.25')
if (!gitVersion.checkMinimum(minimumGitSparseCheckoutVersion)) {
throw new Error( throw new Error(
`Minimum Git version required for sparse checkout is ${MinimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${this.gitVersion}` `Minimum Git version required for sparse checkout is ${minimumGitSparseCheckoutVersion}. Your git ('${this.gitPath}') is ${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
} }

View File

@ -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) {