feat: make show-progress control checkout verbosity, not just fetch

Previously checkout/checkoutDetach always ran with --progress
regardless of the show-progress input, and settings.showProgress
was never propagated into fetchOptions. Thread showProgress through
checkout and checkoutDetach so they use --quiet when show-progress
is false, giving a genuinely quiet checkout when show-progress: false
is set.

Ported from schlags/checkout (show-progress-required branch) onto
current actions/checkout main.
This commit is contained in:
Andrew Mehta 2026-09-24 16:08:29 -06:00
parent f548e57e54
commit 2f547d07f2
7 changed files with 33 additions and 17 deletions

View File

@ -141,7 +141,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# Default: false
fetch-tags: ''
# Whether to show progress status output when fetching.
# Whether to show progress status output for git operations.
# Default: true
show-progress: ''

View File

@ -78,7 +78,7 @@ inputs:
description: 'Whether to fetch tags, even if fetch-depth > 0.'
default: false
show-progress:
description: 'Whether to show progress status output when fetching.'
description: 'Whether to show progress status output for git operations.'
default: true
lfs:
description: 'Whether to download Git-LFS files'

15
dist/index.js vendored
View File

@ -35701,8 +35701,8 @@ class GitCommandManager {
const sparseCheckoutPath = external_path_namespaceObject.join(this.workingDirectory, output.stdout.trimRight());
await external_fs_namespaceObject.promises.appendFile(sparseCheckoutPath, `\n${sparseCheckout.join('\n')}\n`);
}
async checkout(ref, startPoint) {
const args = ['checkout', '--progress', '--force'];
async checkout(ref, startPoint, showProgress) {
const args = ['checkout', showProgress ? '--progress' : '--quiet', '--force'];
if (startPoint) {
args.push('-B', ref, startPoint);
}
@ -35711,8 +35711,8 @@ class GitCommandManager {
}
await this.execGit(args);
}
async checkoutDetach() {
const args = ['checkout', '--detach'];
async checkoutDetach(showProgress) {
const args = ['checkout', '--detach', showProgress ? '--progress' : '--quiet'];
await this.execGit(args);
}
async config(configKey, configValue, globalConfig, add, configFile) {
@ -36127,7 +36127,7 @@ async function prepareExistingDirectory(git, repositoryPath, repositoryUrl, clea
startGroup('Removing previously created refs, to avoid conflicts');
// Checkout detached HEAD
if (!(await git.isDetached())) {
await git.checkoutDetach();
await git.checkoutDetach(false);
}
// Remove all refs/heads/*
let branches = await git.branchList(false);
@ -41807,6 +41807,9 @@ async function getSource(settings) {
// Fetch
startGroup('Fetching the repository');
const fetchOptions = {};
if (settings.showProgress) {
fetchOptions.showProgress = true;
}
if (settings.filter) {
fetchOptions.filter = settings.filter;
}
@ -41877,7 +41880,7 @@ async function getSource(settings) {
}
// Checkout
startGroup('Checking out the ref');
await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint);
await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint, settings.showProgress);
endGroup();
// Submodules
if (settings.submodules) {

View File

@ -22,8 +22,8 @@ export interface IGitCommandManager {
disableSparseCheckout(): Promise<void>
sparseCheckout(sparseCheckout: string[]): Promise<void>
sparseCheckoutNonConeMode(sparseCheckout: string[]): Promise<void>
checkout(ref: string, startPoint: string): Promise<void>
checkoutDetach(): Promise<void>
checkout(ref: string, startPoint: string, showProgress: boolean): Promise<void>
checkoutDetach(showProgress: boolean): Promise<void>
config(
configKey: string,
configValue: string,
@ -220,8 +220,12 @@ class GitCommandManager {
)
}
async checkout(ref: string, startPoint: string): Promise<void> {
const args = ['checkout', '--progress', '--force']
async checkout(
ref: string,
startPoint: string,
showProgress: boolean
): Promise<void> {
const args = ['checkout', showProgress ? '--progress' : '--quiet', '--force']
if (startPoint) {
args.push('-B', ref, startPoint)
} else {
@ -231,8 +235,8 @@ class GitCommandManager {
await this.execGit(args)
}
async checkoutDetach(): Promise<void> {
const args = ['checkout', '--detach']
async checkoutDetach(showProgress: boolean): Promise<void> {
const args = ['checkout', '--detach', showProgress ? '--progress' : '--quiet']
await this.execGit(args)
}

View File

@ -49,7 +49,7 @@ export async function prepareExistingDirectory(
core.startGroup('Removing previously created refs, to avoid conflicts')
// Checkout detached HEAD
if (!(await git.isDetached())) {
await git.checkoutDetach()
await git.checkoutDetach(false)
}
// Remove all refs/heads/*

View File

@ -179,6 +179,10 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
showProgress?: boolean
} = {}
if (settings.showProgress) {
fetchOptions.showProgress = true
}
if (settings.filter) {
fetchOptions.filter = settings.filter
} else if (settings.sparseCheckout) {
@ -268,7 +272,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Checkout
core.startGroup('Checking out the ref')
await git.checkout(checkoutInfo.ref, checkoutInfo.startPoint)
await git.checkout(
checkoutInfo.ref,
checkoutInfo.startPoint,
settings.showProgress
)
core.endGroup()
// Submodules

View File

@ -55,7 +55,8 @@ export interface IGitSourceSettings {
fetchTags: boolean
/**
* Indicates whether to use the --progress option when fetching
* Indicates whether to show progress status output for git operations.
* When false, git commands use --quiet to suppress verbose output.
*/
showProgress: boolean