mirror of
https://code.forgejo.org/actions/checkout.git
synced 2024-11-28 06:59:16 +01:00
Allow configuration of submodule.fetchJobs
This commit is contained in:
parent
b4ffde65f4
commit
2bd5ef5487
11 changed files with 271 additions and 102 deletions
11
.github/workflows/test.yml
vendored
11
.github/workflows/test.yml
vendored
|
@ -150,6 +150,17 @@ jobs:
|
||||||
- name: Verify submodules recursive
|
- name: Verify submodules recursive
|
||||||
run: __test__/verify-submodules-recursive.sh
|
run: __test__/verify-submodules-recursive.sh
|
||||||
|
|
||||||
|
# Submodules fetchJobs
|
||||||
|
- name: Checkout submodules true
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
ref: test-data/v2/submodule-ssh-url
|
||||||
|
path: submodules-true
|
||||||
|
submodules: recursive
|
||||||
|
submodulesFetchJobs: "10"
|
||||||
|
- name: Verify submodules true
|
||||||
|
run: __test__/verify-submodules-with-jobs.sh
|
||||||
|
|
||||||
# Basic checkout using REST API
|
# Basic checkout using REST API
|
||||||
- name: Remove basic
|
- name: Remove basic
|
||||||
if: runner.os != 'windows'
|
if: runner.os != 'windows'
|
||||||
|
|
|
@ -111,6 +111,12 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
||||||
# Default: false
|
# Default: false
|
||||||
submodules: ''
|
submodules: ''
|
||||||
|
|
||||||
|
# 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
|
||||||
|
submodulesFetchJobs: ''
|
||||||
|
|
||||||
# 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>`
|
||||||
# Default: true
|
# Default: true
|
||||||
|
|
|
@ -811,6 +811,7 @@ async function setup(testName: string): Promise<void> {
|
||||||
lfs: false,
|
lfs: false,
|
||||||
submodules: false,
|
submodules: false,
|
||||||
nestedSubmodules: false,
|
nestedSubmodules: false,
|
||||||
|
submodulesFetchJobs: '1',
|
||||||
persistCredentials: true,
|
persistCredentials: true,
|
||||||
ref: 'refs/heads/main',
|
ref: 'refs/heads/main',
|
||||||
repositoryName: 'my-repo',
|
repositoryName: 'my-repo',
|
||||||
|
|
33
__test__/verify-submodules-with-jobs.sh
Executable file
33
__test__/verify-submodules-with-jobs.sh
Executable file
|
@ -0,0 +1,33 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [ ! -f "./submodules-recursive/regular-file.txt" ]; then
|
||||||
|
echo "Expected regular file does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "./submodules-recursive/submodule-level-1/submodule-file.txt" ]; then
|
||||||
|
echo "Expected submodule file does not exist"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "./submodules-recursive/submodule-level-1/submodule-level-2/nested-submodule-file.txt" ]; then
|
||||||
|
echo "Expected nested submodule file does not exists"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Testing fetchJobs exists"
|
||||||
|
git config --local --get-regexp submodules.fetchJobs | grep 10
|
||||||
|
if [ "$?" != "0" ]; then
|
||||||
|
echo "Failed to validate fetchJobs configuration"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Testing persisted credential"
|
||||||
|
pushd ./submodules-recursive/submodule-level-1/submodule-level-2
|
||||||
|
git config --local --name-only --get-regexp http.+extraheader && git fetch
|
||||||
|
if [ "$?" != "0" ]; then
|
||||||
|
echo "Failed to validate persisted credential"
|
||||||
|
popd
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
popd
|
|
@ -88,6 +88,10 @@ 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:
|
||||||
|
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
|
||||||
set-safe-directory:
|
set-safe-directory:
|
||||||
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
|
||||||
default: true
|
default: true
|
||||||
|
|
3
dist/index.js
vendored
3
dist/index.js
vendored
|
@ -1304,6 +1304,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.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);
|
||||||
|
@ -1770,8 +1771,10 @@ function getInputs() {
|
||||||
else if (submodulesString == 'TRUE') {
|
else if (submodulesString == 'TRUE') {
|
||||||
result.submodules = true;
|
result.submodules = true;
|
||||||
}
|
}
|
||||||
|
result.submodulesFetchJobs = core.getInput('submodulesFetchJobs') || '1';
|
||||||
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}`);
|
||||||
// Auth token
|
// Auth token
|
||||||
result.authToken = core.getInput('token', { required: true });
|
result.authToken = core.getInput('token', { required: true });
|
||||||
// SSH
|
// SSH
|
||||||
|
|
78
flake.lock
Normal file
78
flake.lock
Normal file
|
@ -0,0 +1,78 @@
|
||||||
|
{
|
||||||
|
"nodes": {
|
||||||
|
"flake-utils": {
|
||||||
|
"inputs": {
|
||||||
|
"systems": "systems"
|
||||||
|
},
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1701680307,
|
||||||
|
"narHash": "sha256-kAuep2h5ajznlPMD9rnQyffWG8EM/C73lejGofXvdM8=",
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"rev": "4022d587cbbfd70fe950c1e2083a02621806a725",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "numtide",
|
||||||
|
"repo": "flake-utils",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1702485969,
|
||||||
|
"narHash": "sha256-pGHfPZK6pGCPo42f1sylwjmJfjqZM6DXX4ZJM4JUP1Y=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "750644b56300bfa3312710e47ab087904e0c655b",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-23.11-small",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"nixpkgs-unstable": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1702483393,
|
||||||
|
"narHash": "sha256-xdZ+69I2z5ywVtJHW3+BQ99rKFDPkyaPNznstw+gfS8=",
|
||||||
|
"owner": "nixos",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"rev": "224b3a5ad9a960e4a6e3cd59233c1616164c5ef5",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nixos",
|
||||||
|
"ref": "nixos-unstable-small",
|
||||||
|
"repo": "nixpkgs",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": {
|
||||||
|
"inputs": {
|
||||||
|
"flake-utils": "flake-utils",
|
||||||
|
"nixpkgs": "nixpkgs",
|
||||||
|
"nixpkgs-unstable": "nixpkgs-unstable"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"systems": {
|
||||||
|
"locked": {
|
||||||
|
"lastModified": 1681028828,
|
||||||
|
"narHash": "sha256-Vy1rq5AaRuLzOxct8nz4T6wlgyUR7zLU309k9mBC768=",
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"rev": "da67096a3b9bf56a91d16901293e51ba5b49a27e",
|
||||||
|
"type": "github"
|
||||||
|
},
|
||||||
|
"original": {
|
||||||
|
"owner": "nix-systems",
|
||||||
|
"repo": "default",
|
||||||
|
"type": "github"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"root": "root",
|
||||||
|
"version": 7
|
||||||
|
}
|
25
flake.nix
Normal file
25
flake.nix
Normal file
|
@ -0,0 +1,25 @@
|
||||||
|
{
|
||||||
|
description = "A Nix wrapped development environment";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:nixos/nixpkgs/nixos-23.11-small";
|
||||||
|
nixpkgs-unstable.url = "github:nixos/nixpkgs/nixos-unstable-small";
|
||||||
|
flake-utils.url = "github:numtide/flake-utils";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { self, nixpkgs, nixpkgs-unstable, flake-utils }:
|
||||||
|
flake-utils.lib.eachDefaultSystem (system:
|
||||||
|
let
|
||||||
|
pkgs = nixpkgs.legacyPackages.${system};
|
||||||
|
pkgs-unstable = nixpkgs-unstable.legacyPackages.${system};
|
||||||
|
in
|
||||||
|
{
|
||||||
|
devShell = pkgs.mkShell
|
||||||
|
rec {
|
||||||
|
buildInputs = with pkgs;
|
||||||
|
[
|
||||||
|
nodePackages.typescript-language-server
|
||||||
|
];
|
||||||
|
};
|
||||||
|
});
|
||||||
|
}
|
|
@ -232,6 +232,7 @@ 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.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(
|
||||||
|
|
|
@ -74,6 +74,11 @@ export interface IGitSourceSettings {
|
||||||
*/
|
*/
|
||||||
nestedSubmodules: boolean
|
nestedSubmodules: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates the number of parallel jobs to use when fetching submodules
|
||||||
|
*/
|
||||||
|
submodulesFetchJobs: string
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The auth token to use when fetching the repository
|
* The auth token to use when fetching the repository
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -132,8 +132,10 @@ 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'
|
||||||
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}`)
|
||||||
|
|
||||||
// Auth token
|
// Auth token
|
||||||
result.authToken = core.getInput('token', {required: true})
|
result.authToken = core.getInput('token', {required: true})
|
||||||
|
|
Loading…
Reference in a new issue