Allow configuration of fetch.parallel (#2)

This commit is contained in:
Gonzalo Peci 2023-12-14 16:17:43 +01:00 committed by GitHub
parent edc3278d02
commit 4475b1ceed
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
8 changed files with 63 additions and 13 deletions

View file

@ -157,7 +157,7 @@ jobs:
ref: test-data/v2/submodule-ssh-url ref: test-data/v2/submodule-ssh-url
path: submodules-true path: submodules-true
submodules: recursive submodules: recursive
submodulesFetchJobs: "10" submodules-fetch-jobs: "10"
- name: Verify submodules true - name: Verify submodules true
run: __test__/verify-submodules-with-jobs.sh run: __test__/verify-submodules-with-jobs.sh

View file

@ -94,6 +94,12 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# Default: false # Default: false
fetch-tags: '' fetch-tags: ''
# Specifies the maximal number of fetch operations to be run in parallel at a time
# (submodules, or remotes when the --multiple option of git-fetch is in effect). A
# value of 0 will give some reasonable default. If unset, it defaults to 1.
# Default: 1
fetch-parallel: ''
# Whether to show progress status output when fetching. # Whether to show progress status output when fetching.
# Default: true # Default: true
show-progress: '' show-progress: ''
@ -115,7 +121,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# integer allows up to that number of submodules fetched in parallel. A value of 0 # integer allows up to that number of submodules fetched in parallel. A value of 0
# will give some reasonable default. If unset, it defaults to 1. # will give some reasonable default. If unset, it defaults to 1.
# Default: 1 # Default: 1
submodulesFetchJobs: '' submodules-fetch-jobs: ''
# Add repository path as safe.directory for Git global config by running `git # Add repository path as safe.directory for Git global config by running `git
# config --global --add safe.directory <path>` # config --global --add safe.directory <path>`

View file

@ -807,11 +807,12 @@ async function setup(testName: string): Promise<void> {
sparseCheckoutConeMode: true, sparseCheckoutConeMode: true,
fetchDepth: 1, fetchDepth: 1,
fetchTags: false, fetchTags: false,
fetchParallel: 1,
showProgress: true, showProgress: true,
lfs: false, lfs: false,
submodules: false, submodules: false,
nestedSubmodules: false, nestedSubmodules: false,
submodulesFetchJobs: '1', submodulesFetchJobs: 1,
persistCredentials: true, persistCredentials: true,
ref: 'refs/heads/main', ref: 'refs/heads/main',
repositoryName: 'my-repo', repositoryName: 'my-repo',

View file

@ -73,6 +73,11 @@ inputs:
fetch-tags: fetch-tags:
description: 'Whether to fetch tags, even if fetch-depth > 0.' description: 'Whether to fetch tags, even if fetch-depth > 0.'
default: false default: false
fetch-parallel:
description: >
Specifies the maximal number of fetch operations to be run in parallel at a time (submodules, or remotes when the --multiple option of git-fetch is in effect).
A value of 0 will give some reasonable default. If unset, it defaults to 1.
default: 1
show-progress: show-progress:
description: 'Whether to show progress status output when fetching.' description: 'Whether to show progress status output when fetching.'
default: true default: true
@ -88,7 +93,7 @@ inputs:
When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are
converted to HTTPS. converted to HTTPS.
default: false default: false
submodulesFetchJobs: submodules-fetch-jobs:
description: > description: >
Specifies how many submodules are fetched/cloned at the same time. A positive integer allows up to that number of submodules fetched in parallel. A value of 0 will give some reasonable default. If unset, it defaults to 1. Specifies how many submodules are fetched/cloned at the same time. A positive integer allows up to that number of submodules fetched in parallel. A value of 0 will give some reasonable default. If unset, it defaults to 1.
default: 1 default: 1

20
dist/index.js vendored
View file

@ -1243,6 +1243,7 @@ function getSource(settings) {
} }
// Fetch // Fetch
core.startGroup('Fetching the repository'); core.startGroup('Fetching the repository');
yield git.config('fetch.parallel', settings.fetchParallel.toString(), true);
const fetchOptions = {}; const fetchOptions = {};
if (settings.filter) { if (settings.filter) {
fetchOptions.filter = settings.filter; fetchOptions.filter = settings.filter;
@ -1304,7 +1305,7 @@ function getSource(settings) {
core.endGroup(); core.endGroup();
// Checkout submodules // Checkout submodules
core.startGroup('Fetching submodules'); core.startGroup('Fetching submodules');
yield git.config('submodule.fetchJobs', settings.submodulesFetchJobs); yield git.config('submodule.fetchJobs', settings.submodulesFetchJobs.toString(), true);
yield git.submoduleSync(settings.nestedSubmodules); yield git.submoduleSync(settings.nestedSubmodules);
yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules); yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules); yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
@ -1753,6 +1754,12 @@ function getInputs() {
result.fetchTags = result.fetchTags =
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'; (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
core.debug(`fetch tags = ${result.fetchTags}`); core.debug(`fetch tags = ${result.fetchTags}`);
// Fetch tags
result.fetchParallel = Math.floor(Number(core.getInput('fetch-parallel') || '1'));
if (isNaN(result.fetchParallel) || result.fetchParallel < 0) {
result.fetchParallel = 0;
}
core.debug(`fetch parallel = ${result.fetchParallel}`);
// Show fetch progress // Show fetch progress
result.showProgress = result.showProgress =
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'; (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE';
@ -1771,12 +1778,17 @@ function getInputs() {
else if (submodulesString == 'TRUE') { else if (submodulesString == 'TRUE') {
result.submodules = true; result.submodules = true;
} }
result.submodulesFetchJobs = core.getInput('submodulesFetchJobs') || '1'; result.submodulesFetchJobs = Math.floor(Number(core.getInput('submodules-fetch-jobs') || '1'));
if (isNaN(result.submodulesFetchJobs) || result.submodulesFetchJobs < 0) {
result.submodulesFetchJobs = 0;
}
core.debug(`submodules = ${result.submodules}`); core.debug(`submodules = ${result.submodules}`);
core.debug(`recursive submodules = ${result.nestedSubmodules}`); core.debug(`recursive submodules = ${result.nestedSubmodules}`);
core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`); core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`);
// Auth token // Auth token
result.authToken = core.getInput('token', { required: true }); result.authToken = core.getInput('token', {
required: true
});
// SSH // SSH
result.sshKey = core.getInput('ssh-key'); result.sshKey = core.getInput('ssh-key');
result.sshKnownHosts = core.getInput('ssh-known-hosts'); result.sshKnownHosts = core.getInput('ssh-known-hosts');

View file

@ -153,6 +153,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Fetch // Fetch
core.startGroup('Fetching the repository') core.startGroup('Fetching the repository')
await git.config('fetch.parallel', settings.fetchParallel.toString(), true)
const fetchOptions: { const fetchOptions: {
filter?: string filter?: string
fetchDepth?: number fetchDepth?: number
@ -232,7 +233,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
// Checkout submodules // Checkout submodules
core.startGroup('Fetching submodules') core.startGroup('Fetching submodules')
await git.config('submodule.fetchJobs', settings.submodulesFetchJobs) await git.config(
'submodule.fetchJobs',
settings.submodulesFetchJobs.toString(),
true
)
await git.submoduleSync(settings.nestedSubmodules) await git.submoduleSync(settings.nestedSubmodules)
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules) await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
await git.submoduleForeach( await git.submoduleForeach(

View file

@ -54,6 +54,11 @@ export interface IGitSourceSettings {
*/ */
fetchTags: boolean fetchTags: boolean
/**
* Indicates the maximal number of fetch operations to be run in parallel at a time
*/
fetchParallel: number
/** /**
* Indicates whether to use the --progress option when fetching * Indicates whether to use the --progress option when fetching
*/ */
@ -77,7 +82,7 @@ export interface IGitSourceSettings {
/** /**
* Indicates the number of parallel jobs to use when fetching submodules * Indicates the number of parallel jobs to use when fetching submodules
*/ */
submodulesFetchJobs: string submodulesFetchJobs: number
/** /**
* The auth token to use when fetching the repository * The auth token to use when fetching the repository

View file

@ -113,6 +113,15 @@ export async function getInputs(): Promise<IGitSourceSettings> {
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE' (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'
core.debug(`fetch tags = ${result.fetchTags}`) core.debug(`fetch tags = ${result.fetchTags}`)
// Fetch tags
result.fetchParallel = Math.floor(
Number(core.getInput('fetch-parallel') || '1')
)
if (isNaN(result.fetchParallel) || result.fetchParallel < 0) {
result.fetchParallel = 0
}
core.debug(`fetch parallel = ${result.fetchParallel}`)
// Show fetch progress // Show fetch progress
result.showProgress = result.showProgress =
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE' (core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'
@ -132,13 +141,20 @@ export async function getInputs(): Promise<IGitSourceSettings> {
} else if (submodulesString == 'TRUE') { } else if (submodulesString == 'TRUE') {
result.submodules = true result.submodules = true
} }
result.submodulesFetchJobs = core.getInput('submodulesFetchJobs') || '1' result.submodulesFetchJobs = Math.floor(
Number(core.getInput('submodules-fetch-jobs') || '1')
)
if (isNaN(result.submodulesFetchJobs) || result.submodulesFetchJobs < 0) {
result.submodulesFetchJobs = 0
}
core.debug(`submodules = ${result.submodules}`) core.debug(`submodules = ${result.submodules}`)
core.debug(`recursive submodules = ${result.nestedSubmodules}`) core.debug(`recursive submodules = ${result.nestedSubmodules}`)
core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`) core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`)
// Auth token // Auth token
result.authToken = core.getInput('token', {required: true}) result.authToken = core.getInput('token', {
required: true
})
// SSH // SSH
result.sshKey = core.getInput('ssh-key') result.sshKey = core.getInput('ssh-key')