mirror of
https://github.com/actions/checkout.git
synced 2026-03-07 08:51:46 +08:00
Compare commits
4 Commits
9748052ab2
...
9ca351d5a3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
9ca351d5a3 | ||
|
|
09d2acae67 | ||
|
|
7618b1f401 | ||
|
|
b6625bb44a |
11
.github/workflows/test.yml
vendored
11
.github/workflows/test.yml
vendored
@ -155,6 +155,17 @@ jobs:
|
|||||||
- name: Verify submodules true
|
- name: Verify submodules true
|
||||||
run: __test__/verify-submodules-true.sh
|
run: __test__/verify-submodules-true.sh
|
||||||
|
|
||||||
|
# Submodules limited
|
||||||
|
- name: Checkout submodules limited
|
||||||
|
uses: ./
|
||||||
|
with:
|
||||||
|
ref: test-data/v2/submodule-ssh-url
|
||||||
|
path: submodules-true
|
||||||
|
submodules: true
|
||||||
|
submodule-directories: submodule-level-1
|
||||||
|
- name: Verify submodules true
|
||||||
|
run: __test__/verify-submodules-true.sh
|
||||||
|
|
||||||
# Submodules recursive
|
# Submodules recursive
|
||||||
- name: Checkout submodules recursive
|
- name: Checkout submodules recursive
|
||||||
uses: ./
|
uses: ./
|
||||||
|
|||||||
22
README.md
22
README.md
@ -10,6 +10,24 @@ The auth token is persisted in the local git config. This enables your scripts t
|
|||||||
|
|
||||||
When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.
|
When Git 2.18 or higher is not in your PATH, falls back to the REST API to download the files.
|
||||||
|
|
||||||
|
### Note
|
||||||
|
|
||||||
|
Thank you for your interest in this GitHub action, however, right now we are not taking contributions.
|
||||||
|
|
||||||
|
We continue to focus our resources on strategic areas that help our customers be successful while making developers' lives easier. While GitHub Actions remains a key part of this vision, we are allocating resources towards other areas of Actions and are not taking contributions to this repository at this time. The GitHub public roadmap is the best place to follow along for any updates on features we’re working on and what stage they’re in.
|
||||||
|
|
||||||
|
We are taking the following steps to better direct requests related to GitHub Actions, including:
|
||||||
|
|
||||||
|
1. We will be directing questions and support requests to our [Community Discussions area](https://github.com/orgs/community/discussions/categories/actions)
|
||||||
|
|
||||||
|
2. High Priority bugs can be reported through Community Discussions or you can report these to our support team https://support.github.com/contact/bug-report.
|
||||||
|
|
||||||
|
3. Security Issues should be handled as per our [security.md](security.md)
|
||||||
|
|
||||||
|
We will still provide security updates for this project and fix major breaking changes during this time.
|
||||||
|
|
||||||
|
You are welcome to still raise bugs in this repo.
|
||||||
|
|
||||||
# What's new
|
# What's new
|
||||||
|
|
||||||
Please refer to the [release page](https://github.com/actions/checkout/releases/latest) for the latest release notes.
|
Please refer to the [release page](https://github.com/actions/checkout/releases/latest) for the latest release notes.
|
||||||
@ -116,6 +134,10 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||||||
# Default: false
|
# Default: false
|
||||||
submodules: ''
|
submodules: ''
|
||||||
|
|
||||||
|
# A list of submodules to checkout.
|
||||||
|
# Default: null
|
||||||
|
submodule-directories: ''
|
||||||
|
|
||||||
# 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
|
||||||
|
|||||||
@ -813,6 +813,7 @@ async function setup(testName: string): Promise<void> {
|
|||||||
lfs: false,
|
lfs: false,
|
||||||
submodules: false,
|
submodules: false,
|
||||||
nestedSubmodules: false,
|
nestedSubmodules: false,
|
||||||
|
submoduleDirectories: [],
|
||||||
persistCredentials: true,
|
persistCredentials: true,
|
||||||
ref: 'refs/heads/main',
|
ref: 'refs/heads/main',
|
||||||
repositoryName: 'my-repo',
|
repositoryName: 'my-repo',
|
||||||
|
|||||||
@ -21,6 +21,13 @@ describe('input-helper tests', () => {
|
|||||||
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
|
jest.spyOn(core, 'getInput').mockImplementation((name: string) => {
|
||||||
return inputs[name]
|
return inputs[name]
|
||||||
})
|
})
|
||||||
|
// Mock getMultilineInput
|
||||||
|
jest.spyOn(core, 'getMultilineInput').mockImplementation((name: string) => {
|
||||||
|
const input: string[] = (inputs[name] || '')
|
||||||
|
.split('\n')
|
||||||
|
.filter(x => x !== '')
|
||||||
|
return input.map(inp => inp.trim())
|
||||||
|
})
|
||||||
|
|
||||||
// Mock error/warning/info/debug
|
// Mock error/warning/info/debug
|
||||||
jest.spyOn(core, 'error').mockImplementation(jest.fn())
|
jest.spyOn(core, 'error').mockImplementation(jest.fn())
|
||||||
@ -87,6 +94,7 @@ describe('input-helper tests', () => {
|
|||||||
expect(settings.showProgress).toBe(true)
|
expect(settings.showProgress).toBe(true)
|
||||||
expect(settings.lfs).toBe(false)
|
expect(settings.lfs).toBe(false)
|
||||||
expect(settings.ref).toBe('refs/heads/some-ref')
|
expect(settings.ref).toBe('refs/heads/some-ref')
|
||||||
|
expect(settings.submoduleDirectories).toStrictEqual([])
|
||||||
expect(settings.repositoryName).toBe('some-repo')
|
expect(settings.repositoryName).toBe('some-repo')
|
||||||
expect(settings.repositoryOwner).toBe('some-owner')
|
expect(settings.repositoryOwner).toBe('some-owner')
|
||||||
expect(settings.repositoryPath).toBe(gitHubWorkspace)
|
expect(settings.repositoryPath).toBe(gitHubWorkspace)
|
||||||
@ -144,4 +152,13 @@ describe('input-helper tests', () => {
|
|||||||
const settings: IGitSourceSettings = await inputHelper.getInputs()
|
const settings: IGitSourceSettings = await inputHelper.getInputs()
|
||||||
expect(settings.workflowOrganizationId).toBe(123456)
|
expect(settings.workflowOrganizationId).toBe(123456)
|
||||||
})
|
})
|
||||||
|
it('sets submoduleDirectories', async () => {
|
||||||
|
inputs['submodule-directories'] = 'submodule1\nsubmodule2'
|
||||||
|
const settings: IGitSourceSettings = await inputHelper.getInputs()
|
||||||
|
expect(settings.submoduleDirectories).toStrictEqual([
|
||||||
|
'submodule1',
|
||||||
|
'submodule2'
|
||||||
|
])
|
||||||
|
expect(settings.submodules).toBe(true)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|||||||
@ -92,6 +92,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
|
||||||
|
submodule-directories:
|
||||||
|
description: >
|
||||||
|
A list of submodules to checkout.
|
||||||
|
default: null
|
||||||
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
|
||||||
|
|||||||
14
dist/index.js
vendored
14
dist/index.js
vendored
@ -793,10 +793,10 @@ class GitCommandManager {
|
|||||||
yield this.execGit(args);
|
yield this.execGit(args);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
submoduleUpdate(fetchDepth, recursive) {
|
submoduleUpdate(fetchDepth, recursive, submoduleDirectories) {
|
||||||
return __awaiter(this, void 0, void 0, function* () {
|
return __awaiter(this, void 0, void 0, function* () {
|
||||||
const args = ['-c', 'protocol.version=2'];
|
const args = ['-c', 'protocol.version=2'];
|
||||||
args.push('submodule', 'update', '--init', '--force');
|
args.push('submodule', 'update', '--init', '--force', ...submoduleDirectories);
|
||||||
if (fetchDepth > 0) {
|
if (fetchDepth > 0) {
|
||||||
args.push(`--depth=${fetchDepth}`);
|
args.push(`--depth=${fetchDepth}`);
|
||||||
}
|
}
|
||||||
@ -1340,7 +1340,7 @@ function getSource(settings) {
|
|||||||
// Checkout submodules
|
// Checkout submodules
|
||||||
core.startGroup('Fetching submodules');
|
core.startGroup('Fetching submodules');
|
||||||
yield git.submoduleSync(settings.nestedSubmodules);
|
yield git.submoduleSync(settings.nestedSubmodules);
|
||||||
yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules);
|
yield git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules, settings.submoduleDirectories);
|
||||||
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
|
yield git.submoduleForeach('git config --local gc.auto 0', settings.nestedSubmodules);
|
||||||
core.endGroup();
|
core.endGroup();
|
||||||
// Persist credentials
|
// Persist credentials
|
||||||
@ -1801,6 +1801,7 @@ function getInputs() {
|
|||||||
// Submodules
|
// Submodules
|
||||||
result.submodules = false;
|
result.submodules = false;
|
||||||
result.nestedSubmodules = false;
|
result.nestedSubmodules = false;
|
||||||
|
result.submoduleDirectories = [];
|
||||||
const submodulesString = (core.getInput('submodules') || '').toUpperCase();
|
const submodulesString = (core.getInput('submodules') || '').toUpperCase();
|
||||||
if (submodulesString == 'RECURSIVE') {
|
if (submodulesString == 'RECURSIVE') {
|
||||||
result.submodules = true;
|
result.submodules = true;
|
||||||
@ -1809,8 +1810,15 @@ function getInputs() {
|
|||||||
else if (submodulesString == 'TRUE') {
|
else if (submodulesString == 'TRUE') {
|
||||||
result.submodules = true;
|
result.submodules = true;
|
||||||
}
|
}
|
||||||
|
const submoduleDirectories = core.getMultilineInput('submodule-directories');
|
||||||
|
if (submoduleDirectories.length > 0) {
|
||||||
|
result.submoduleDirectories = submoduleDirectories;
|
||||||
|
if (!result.submodules)
|
||||||
|
result.submodules = true;
|
||||||
|
}
|
||||||
core.debug(`submodules = ${result.submodules}`);
|
core.debug(`submodules = ${result.submodules}`);
|
||||||
core.debug(`recursive submodules = ${result.nestedSubmodules}`);
|
core.debug(`recursive submodules = ${result.nestedSubmodules}`);
|
||||||
|
core.debug(`submodule directories = ${result.submoduleDirectories}`);
|
||||||
// Auth token
|
// Auth token
|
||||||
result.authToken = core.getInput('token', { required: true });
|
result.authToken = core.getInput('token', { required: true });
|
||||||
// SSH
|
// SSH
|
||||||
|
|||||||
@ -54,7 +54,11 @@ export interface IGitCommandManager {
|
|||||||
shaExists(sha: string): Promise<boolean>
|
shaExists(sha: string): Promise<boolean>
|
||||||
submoduleForeach(command: string, recursive: boolean): Promise<string>
|
submoduleForeach(command: string, recursive: boolean): Promise<string>
|
||||||
submoduleSync(recursive: boolean): Promise<void>
|
submoduleSync(recursive: boolean): Promise<void>
|
||||||
submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void>
|
submoduleUpdate(
|
||||||
|
fetchDepth: number,
|
||||||
|
recursive: boolean,
|
||||||
|
submoduleDirectories: string[]
|
||||||
|
): Promise<void>
|
||||||
submoduleStatus(): Promise<boolean>
|
submoduleStatus(): Promise<boolean>
|
||||||
tagExists(pattern: string): Promise<boolean>
|
tagExists(pattern: string): Promise<boolean>
|
||||||
tryClean(): Promise<boolean>
|
tryClean(): Promise<boolean>
|
||||||
@ -409,9 +413,19 @@ class GitCommandManager {
|
|||||||
await this.execGit(args)
|
await this.execGit(args)
|
||||||
}
|
}
|
||||||
|
|
||||||
async submoduleUpdate(fetchDepth: number, recursive: boolean): Promise<void> {
|
async submoduleUpdate(
|
||||||
|
fetchDepth: number,
|
||||||
|
recursive: boolean,
|
||||||
|
submoduleDirectories: string[]
|
||||||
|
): Promise<void> {
|
||||||
const args = ['-c', 'protocol.version=2']
|
const args = ['-c', 'protocol.version=2']
|
||||||
args.push('submodule', 'update', '--init', '--force')
|
args.push(
|
||||||
|
'submodule',
|
||||||
|
'update',
|
||||||
|
'--init',
|
||||||
|
'--force',
|
||||||
|
...submoduleDirectories
|
||||||
|
)
|
||||||
if (fetchDepth > 0) {
|
if (fetchDepth > 0) {
|
||||||
args.push(`--depth=${fetchDepth}`)
|
args.push(`--depth=${fetchDepth}`)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -242,7 +242,11 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
|||||||
// Checkout submodules
|
// Checkout submodules
|
||||||
core.startGroup('Fetching submodules')
|
core.startGroup('Fetching submodules')
|
||||||
await git.submoduleSync(settings.nestedSubmodules)
|
await git.submoduleSync(settings.nestedSubmodules)
|
||||||
await git.submoduleUpdate(settings.fetchDepth, settings.nestedSubmodules)
|
await git.submoduleUpdate(
|
||||||
|
settings.fetchDepth,
|
||||||
|
settings.nestedSubmodules,
|
||||||
|
settings.submoduleDirectories
|
||||||
|
)
|
||||||
await git.submoduleForeach(
|
await git.submoduleForeach(
|
||||||
'git config --local gc.auto 0',
|
'git config --local gc.auto 0',
|
||||||
settings.nestedSubmodules
|
settings.nestedSubmodules
|
||||||
|
|||||||
@ -74,6 +74,11 @@ export interface IGitSourceSettings {
|
|||||||
*/
|
*/
|
||||||
nestedSubmodules: boolean
|
nestedSubmodules: boolean
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Indicates which submodule paths to checkout
|
||||||
|
*/
|
||||||
|
submoduleDirectories: string[]
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The auth token to use when fetching the repository
|
* The auth token to use when fetching the repository
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -125,6 +125,7 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
|||||||
// Submodules
|
// Submodules
|
||||||
result.submodules = false
|
result.submodules = false
|
||||||
result.nestedSubmodules = false
|
result.nestedSubmodules = false
|
||||||
|
result.submoduleDirectories = []
|
||||||
const submodulesString = (core.getInput('submodules') || '').toUpperCase()
|
const submodulesString = (core.getInput('submodules') || '').toUpperCase()
|
||||||
if (submodulesString == 'RECURSIVE') {
|
if (submodulesString == 'RECURSIVE') {
|
||||||
result.submodules = true
|
result.submodules = true
|
||||||
@ -132,9 +133,16 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
|||||||
} else if (submodulesString == 'TRUE') {
|
} else if (submodulesString == 'TRUE') {
|
||||||
result.submodules = true
|
result.submodules = true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const submoduleDirectories = core.getMultilineInput('submodule-directories')
|
||||||
|
if (submoduleDirectories.length > 0) {
|
||||||
|
result.submoduleDirectories = submoduleDirectories
|
||||||
|
if (!result.submodules) result.submodules = true
|
||||||
|
}
|
||||||
|
|
||||||
core.debug(`submodules = ${result.submodules}`)
|
core.debug(`submodules = ${result.submodules}`)
|
||||||
core.debug(`recursive submodules = ${result.nestedSubmodules}`)
|
core.debug(`recursive submodules = ${result.nestedSubmodules}`)
|
||||||
|
core.debug(`submodule directories = ${result.submoduleDirectories}`)
|
||||||
// Auth token
|
// Auth token
|
||||||
result.authToken = core.getInput('token', {required: true})
|
result.authToken = core.getInput('token', {required: true})
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user