mirror of
https://code.forgejo.org/actions/checkout.git
synced 2025-03-12 04:25:22 +01:00
Add objectFormat setting to allow init()ing a repo with sha256
This commit is contained in:
parent
85e6279cec
commit
b9de40a228
9 changed files with 81 additions and 8 deletions
14
README.md
14
README.md
|
@ -126,6 +126,11 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||
# running from unless specified. Example URLs are https://github.com or
|
||||
# https://my-ghes-server.example.com
|
||||
github-server-url: ''
|
||||
|
||||
# Use the given object format when creating local repository. Specifically, use
|
||||
# 'sha256' to checkout a SHA-256 repository.
|
||||
# Default: null
|
||||
object-format: ''
|
||||
```
|
||||
<!-- end usage -->
|
||||
|
||||
|
@ -144,6 +149,7 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
|
|||
- [Checkout pull request on closed event](#Checkout-pull-request-on-closed-event)
|
||||
- [Push a commit using the built-in token](#Push-a-commit-using-the-built-in-token)
|
||||
- [Push a commit to a PR using the built-in token](#Push-a-commit-to-a-PR-using-the-built-in-token)
|
||||
- [Checkout SHA-256 repository](#checkout-sha-256-repository)
|
||||
|
||||
## Fetch only the root files
|
||||
|
||||
|
@ -323,6 +329,14 @@ permissions:
|
|||
contents: read
|
||||
```
|
||||
|
||||
## Checkout SHA-256 repository
|
||||
|
||||
```yaml
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
object-format: sha256
|
||||
```
|
||||
|
||||
# License
|
||||
|
||||
The scripts and documentation in this project are released under the [MIT License](LICENSE)
|
||||
|
|
|
@ -824,7 +824,8 @@ async function setup(testName: string): Promise<void> {
|
|||
sshUser: '',
|
||||
workflowOrganizationId: 123456,
|
||||
setSafeDirectory: true,
|
||||
githubServerUrl: githubServerUrl
|
||||
githubServerUrl: githubServerUrl,
|
||||
objectFormat: undefined
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -375,4 +375,25 @@ describe('Test fetchDepth and fetchTags options', () => {
|
|||
expect.any(Object)
|
||||
)
|
||||
})
|
||||
|
||||
it('should call execGit with the correct arguments when sha256 is used', async () => {
|
||||
jest.spyOn(exec, 'exec').mockImplementation(mockExec)
|
||||
|
||||
const workingDirectory = 'test'
|
||||
const lfs = false
|
||||
const doSparseCheckout = false
|
||||
git = await commandManager.createCommandManager(
|
||||
workingDirectory,
|
||||
lfs,
|
||||
doSparseCheckout
|
||||
)
|
||||
|
||||
await git.init({objectFormat: 'sha256'})
|
||||
|
||||
expect(mockExec).toHaveBeenCalledWith(
|
||||
expect.any(String),
|
||||
['init', '--object-format=sha256', 'test'],
|
||||
expect.any(Object)
|
||||
)
|
||||
})
|
||||
})
|
||||
|
|
|
@ -98,6 +98,11 @@ inputs:
|
|||
github-server-url:
|
||||
description: The base URL for the GitHub instance that you are trying to clone from, will use environment defaults to fetch from the same instance that the workflow is running from unless specified. Example URLs are https://github.com or https://my-ghes-server.example.com
|
||||
required: false
|
||||
object-format:
|
||||
description: >
|
||||
Use the given object format when creating local repository. Specifically, use
|
||||
'sha256' to checkout a SHA-256 repository.
|
||||
default: null
|
||||
outputs:
|
||||
ref:
|
||||
description: 'The branch, tag or SHA that was checked out'
|
||||
|
|
18
dist/index.js
vendored
18
dist/index.js
vendored
|
@ -709,9 +709,13 @@ class GitCommandManager {
|
|||
getWorkingDirectory() {
|
||||
return this.workingDirectory;
|
||||
}
|
||||
init() {
|
||||
init(options) {
|
||||
return __awaiter(this, void 0, void 0, function* () {
|
||||
yield this.execGit(['init', this.workingDirectory]);
|
||||
yield this.execGit([
|
||||
'init',
|
||||
...((options === null || options === void 0 ? void 0 : options.objectFormat) ? [`--object-format=${options.objectFormat}`] : []),
|
||||
this.workingDirectory
|
||||
]);
|
||||
});
|
||||
}
|
||||
isDetached() {
|
||||
|
@ -1236,7 +1240,7 @@ function getSource(settings) {
|
|||
// Initialize the repository
|
||||
if (!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))) {
|
||||
core.startGroup('Initializing the repository');
|
||||
yield git.init();
|
||||
yield git.init({ objectFormat: settings.objectFormat });
|
||||
yield git.remoteAdd('origin', repositoryUrl);
|
||||
core.endGroup();
|
||||
}
|
||||
|
@ -1831,6 +1835,14 @@ function getInputs() {
|
|||
// Determine the GitHub URL that the repository is being hosted from
|
||||
result.githubServerUrl = core.getInput('github-server-url');
|
||||
core.debug(`GitHub Host URL = ${result.githubServerUrl}`);
|
||||
// Object format
|
||||
const objectFormat = core.getInput('object-format');
|
||||
if (objectFormat) {
|
||||
if (objectFormat != 'sha1' && objectFormat != 'sha256') {
|
||||
throw Error(`Invalid object format '${objectFormat}'`);
|
||||
}
|
||||
result.objectFormat = objectFormat;
|
||||
}
|
||||
return result;
|
||||
});
|
||||
}
|
||||
|
|
|
@ -42,7 +42,7 @@ export interface IGitCommandManager {
|
|||
): Promise<void>
|
||||
getDefaultBranch(repositoryUrl: string): Promise<string>
|
||||
getWorkingDirectory(): string
|
||||
init(): Promise<void>
|
||||
init(options?: {objectFormat?: string}): Promise<void>
|
||||
isDetached(): Promise<boolean>
|
||||
lfsFetch(ref: string): Promise<void>
|
||||
lfsInstall(): Promise<void>
|
||||
|
@ -327,8 +327,14 @@ class GitCommandManager {
|
|||
return this.workingDirectory
|
||||
}
|
||||
|
||||
async init(): Promise<void> {
|
||||
await this.execGit(['init', this.workingDirectory])
|
||||
async init(options?: {objectFormat?: string}): Promise<void> {
|
||||
await this.execGit([
|
||||
'init',
|
||||
...(options?.objectFormat
|
||||
? [`--object-format=${options.objectFormat}`]
|
||||
: []),
|
||||
this.workingDirectory
|
||||
])
|
||||
}
|
||||
|
||||
async isDetached(): Promise<boolean> {
|
||||
|
|
|
@ -110,7 +110,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
|
|||
!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))
|
||||
) {
|
||||
core.startGroup('Initializing the repository')
|
||||
await git.init()
|
||||
await git.init({objectFormat: settings.objectFormat})
|
||||
await git.remoteAdd('origin', repositoryUrl)
|
||||
core.endGroup()
|
||||
}
|
||||
|
|
|
@ -118,4 +118,9 @@ export interface IGitSourceSettings {
|
|||
* User override on the GitHub Server/Host URL that hosts the repository to be cloned
|
||||
*/
|
||||
githubServerUrl: string | undefined
|
||||
|
||||
/**
|
||||
* Object format used for the repo, if it is not default
|
||||
*/
|
||||
objectFormat: 'sha1' | 'sha256' | undefined
|
||||
}
|
||||
|
|
|
@ -161,5 +161,14 @@ export async function getInputs(): Promise<IGitSourceSettings> {
|
|||
result.githubServerUrl = core.getInput('github-server-url')
|
||||
core.debug(`GitHub Host URL = ${result.githubServerUrl}`)
|
||||
|
||||
// Object format
|
||||
const objectFormat = core.getInput('object-format')
|
||||
if (objectFormat) {
|
||||
if (objectFormat != 'sha1' && objectFormat != 'sha256') {
|
||||
throw Error(`Invalid object format '${objectFormat}'`)
|
||||
}
|
||||
result.objectFormat = objectFormat
|
||||
}
|
||||
|
||||
return result
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue