Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Allow configuration of submodule.fetchJobs and fetch.parallel #1569

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Allow configuration of fetch.parallel (#2)
  • Loading branch information
pecigonzalo authored Dec 14, 2023
commit 4475b1ceed89a6de6a7e044bcc53aead585b0404
2 changes: 1 addition & 1 deletion .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -157,7 +157,7 @@ jobs:
ref: test-data/v2/submodule-ssh-url
path: submodules-true
submodules: recursive
submodulesFetchJobs: "10"
submodules-fetch-jobs: "10"
- name: Verify submodules true
run: __test__/verify-submodules-with-jobs.sh

8 changes: 7 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -94,6 +94,12 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
# Default: false
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.
# Default: true
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
# will give some reasonable default. If unset, it defaults to 1.
# Default: 1
submodulesFetchJobs: ''
submodules-fetch-jobs: ''

# Add repository path as safe.directory for Git global config by running `git
# config --global --add safe.directory <path>`
3 changes: 2 additions & 1 deletion __test__/git-auth-helper.test.ts
Original file line number Diff line number Diff line change
@@ -807,11 +807,12 @@ async function setup(testName: string): Promise<void> {
sparseCheckoutConeMode: true,
fetchDepth: 1,
fetchTags: false,
fetchParallel: 1,
showProgress: true,
lfs: false,
submodules: false,
nestedSubmodules: false,
submodulesFetchJobs: '1',
submodulesFetchJobs: 1,
persistCredentials: true,
ref: 'refs/heads/main',
repositoryName: 'my-repo',
7 changes: 6 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
@@ -73,6 +73,11 @@ inputs:
fetch-tags:
description: 'Whether to fetch tags, even if fetch-depth > 0.'
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:
description: 'Whether to show progress status output when fetching.'
default: true
@@ -88,7 +93,7 @@ inputs:
When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are
converted to HTTPS.
default: false
submodulesFetchJobs:
submodules-fetch-jobs:
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.
default: 1
20 changes: 16 additions & 4 deletions dist/index.js
Original file line number Diff line number Diff line change
@@ -1243,6 +1243,7 @@ function getSource(settings) {
}
// Fetch
core.startGroup('Fetching the repository');
yield git.config('fetch.parallel', settings.fetchParallel.toString(), true);
const fetchOptions = {};
if (settings.filter) {
fetchOptions.filter = settings.filter;
@@ -1304,7 +1305,7 @@ function getSource(settings) {
core.endGroup();
// Checkout 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.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
@@ -1753,6 +1754,12 @@ function getInputs() {
result.fetchTags =
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE';
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
result.showProgress =
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE';
@@ -1771,12 +1778,17 @@ function getInputs() {
else if (submodulesString == '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(`recursive submodules = ${result.nestedSubmodules}`);
core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`);
core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`);
// Auth token
result.authToken = core.getInput('token', { required: true });
result.authToken = core.getInput('token', {
required: true
});
// SSH
result.sshKey = core.getInput('ssh-key');
result.sshKnownHosts = core.getInput('ssh-known-hosts');
7 changes: 6 additions & 1 deletion src/git-source-provider.ts
Original file line number Diff line number Diff line change
@@ -153,6 +153,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {

// Fetch
core.startGroup('Fetching the repository')
await git.config('fetch.parallel', settings.fetchParallel.toString(), true)
Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is this the right place to set it?

const fetchOptions: {
filter?: string
fetchDepth?: number
@@ -232,7 +233,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {

// Checkout 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.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
await git.submoduleForeach(
7 changes: 6 additions & 1 deletion src/git-source-settings.ts
Original file line number Diff line number Diff line change
@@ -54,6 +54,11 @@ export interface IGitSourceSettings {
*/
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
*/
@@ -77,7 +82,7 @@ export interface IGitSourceSettings {
/**
* Indicates the number of parallel jobs to use when fetching submodules
*/
submodulesFetchJobs: string
submodulesFetchJobs: number

/**
* The auth token to use when fetching the repository
22 changes: 19 additions & 3 deletions src/input-helper.ts
Original file line number Diff line number Diff line change
@@ -113,6 +113,15 @@ export async function getInputs(): Promise<IGitSourceSettings> {
(core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'
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
result.showProgress =
(core.getInput('show-progress') || 'true').toUpperCase() === 'TRUE'
@@ -132,13 +141,20 @@ export async function getInputs(): Promise<IGitSourceSettings> {
} else if (submodulesString == '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(`recursive submodules = ${result.nestedSubmodules}`)
core.debug(`submodules fetchJobs= ${result.submodulesFetchJobs}`)
core.debug(`submodules submodules-fetch-jobs = ${result.submodulesFetchJobs}`)

// Auth token
result.authToken = core.getInput('token', {required: true})
result.authToken = core.getInput('token', {
required: true
})

// SSH
result.sshKey = core.getInput('ssh-key')