Skip to content

Commit dfc974e

Browse files
committed
Add support for SHA256 repositories
New input parameter to specify the git object format when initializing a git repository.
1 parent 85e6279 commit dfc974e

8 files changed

+148
-117
lines changed

README.md

+4
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,10 @@ Please refer to the [release page](https://github.com/actions/checkout/releases/
126126
# running from unless specified. Example URLs are https://github.com or
127127
# https://my-ghes-server.example.com
128128
github-server-url: ''
129+
130+
# Specify the Git object format for repository initialization (sha1, sha256).
131+
# Default: null
132+
object-format: ''
129133
```
130134
<!-- end usage -->
131135

__test__/git-auth-helper.test.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -824,7 +824,8 @@ async function setup(testName: string): Promise<void> {
824824
sshUser: '',
825825
workflowOrganizationId: 123456,
826826
setSafeDirectory: true,
827-
githubServerUrl: githubServerUrl
827+
githubServerUrl: githubServerUrl,
828+
objectFormat: undefined
828829
}
829830
}
830831

action.yml

+113-109
Original file line numberDiff line numberDiff line change
@@ -1,109 +1,113 @@
1-
name: 'Checkout'
2-
description: 'Checkout a Git repository at a particular version'
3-
inputs:
4-
repository:
5-
description: 'Repository name with owner. For example, actions/checkout'
6-
default: ${{ github.repository }}
7-
ref:
8-
description: >
9-
The branch, tag or SHA to checkout. When checking out the repository that
10-
triggered a workflow, this defaults to the reference or SHA for that
11-
event. Otherwise, uses the default branch.
12-
token:
13-
description: >
14-
Personal access token (PAT) used to fetch the repository. The PAT is configured
15-
with the local git config, which enables your scripts to run authenticated git
16-
commands. The post-job step removes the PAT.
17-
18-
19-
We recommend using a service account with the least permissions necessary.
20-
Also when generating a new PAT, select the least scopes necessary.
21-
22-
23-
[Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
24-
default: ${{ github.token }}
25-
ssh-key:
26-
description: >
27-
SSH key used to fetch the repository. The SSH key is configured with the local
28-
git config, which enables your scripts to run authenticated git commands.
29-
The post-job step removes the SSH key.
30-
31-
32-
We recommend using a service account with the least permissions necessary.
33-
34-
35-
[Learn more about creating and using
36-
encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
37-
ssh-known-hosts:
38-
description: >
39-
Known hosts in addition to the user and global host key database. The public
40-
SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
41-
`ssh-keyscan github.com`. The public key for github.com is always implicitly added.
42-
ssh-strict:
43-
description: >
44-
Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
45-
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
46-
configure additional hosts.
47-
default: true
48-
ssh-user:
49-
description: >
50-
The user to use when connecting to the remote SSH host. By default 'git' is used.
51-
default: git
52-
persist-credentials:
53-
description: 'Whether to configure the token or SSH key with the local git config'
54-
default: true
55-
path:
56-
description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
57-
clean:
58-
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
59-
default: true
60-
filter:
61-
description: >
62-
Partially clone against a given filter.
63-
Overrides sparse-checkout if set.
64-
default: null
65-
sparse-checkout:
66-
description: >
67-
Do a sparse checkout on given patterns.
68-
Each pattern should be separated with new lines.
69-
default: null
70-
sparse-checkout-cone-mode:
71-
description: >
72-
Specifies whether to use cone-mode when doing a sparse checkout.
73-
default: true
74-
fetch-depth:
75-
description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
76-
default: 1
77-
fetch-tags:
78-
description: 'Whether to fetch tags, even if fetch-depth > 0.'
79-
default: false
80-
show-progress:
81-
description: 'Whether to show progress status output when fetching.'
82-
default: true
83-
lfs:
84-
description: 'Whether to download Git-LFS files'
85-
default: false
86-
submodules:
87-
description: >
88-
Whether to checkout submodules: `true` to checkout submodules or `recursive` to
89-
recursively checkout submodules.
90-
91-
92-
When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are
93-
converted to HTTPS.
94-
default: false
95-
set-safe-directory:
96-
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
97-
default: true
98-
github-server-url:
99-
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
100-
required: false
101-
outputs:
102-
ref:
103-
description: 'The branch, tag or SHA that was checked out'
104-
commit:
105-
description: 'The commit SHA that was checked out'
106-
runs:
107-
using: node20
108-
main: dist/index.js
109-
post: dist/index.js
1+
name: 'Checkout'
2+
description: 'Checkout a Git repository at a particular version'
3+
inputs:
4+
repository:
5+
description: 'Repository name with owner. For example, actions/checkout'
6+
default: ${{ github.repository }}
7+
ref:
8+
description: >
9+
The branch, tag or SHA to checkout. When checking out the repository that
10+
triggered a workflow, this defaults to the reference or SHA for that
11+
event. Otherwise, uses the default branch.
12+
token:
13+
description: >
14+
Personal access token (PAT) used to fetch the repository. The PAT is configured
15+
with the local git config, which enables your scripts to run authenticated git
16+
commands. The post-job step removes the PAT.
17+
18+
19+
We recommend using a service account with the least permissions necessary.
20+
Also when generating a new PAT, select the least scopes necessary.
21+
22+
23+
[Learn more about creating and using encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
24+
default: ${{ github.token }}
25+
ssh-key:
26+
description: >
27+
SSH key used to fetch the repository. The SSH key is configured with the local
28+
git config, which enables your scripts to run authenticated git commands.
29+
The post-job step removes the SSH key.
30+
31+
32+
We recommend using a service account with the least permissions necessary.
33+
34+
35+
[Learn more about creating and using
36+
encrypted secrets](https://help.github.com/en/actions/automating-your-workflow-with-github-actions/creating-and-using-encrypted-secrets)
37+
ssh-known-hosts:
38+
description: >
39+
Known hosts in addition to the user and global host key database. The public
40+
SSH keys for a host may be obtained using the utility `ssh-keyscan`. For example,
41+
`ssh-keyscan github.com`. The public key for github.com is always implicitly added.
42+
ssh-strict:
43+
description: >
44+
Whether to perform strict host key checking. When true, adds the options `StrictHostKeyChecking=yes`
45+
and `CheckHostIP=no` to the SSH command line. Use the input `ssh-known-hosts` to
46+
configure additional hosts.
47+
default: true
48+
ssh-user:
49+
description: >
50+
The user to use when connecting to the remote SSH host. By default 'git' is used.
51+
default: git
52+
persist-credentials:
53+
description: 'Whether to configure the token or SSH key with the local git config'
54+
default: true
55+
path:
56+
description: 'Relative path under $GITHUB_WORKSPACE to place the repository'
57+
clean:
58+
description: 'Whether to execute `git clean -ffdx && git reset --hard HEAD` before fetching'
59+
default: true
60+
filter:
61+
description: >
62+
Partially clone against a given filter.
63+
Overrides sparse-checkout if set.
64+
default: null
65+
sparse-checkout:
66+
description: >
67+
Do a sparse checkout on given patterns.
68+
Each pattern should be separated with new lines.
69+
default: null
70+
sparse-checkout-cone-mode:
71+
description: >
72+
Specifies whether to use cone-mode when doing a sparse checkout.
73+
default: true
74+
fetch-depth:
75+
description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.'
76+
default: 1
77+
fetch-tags:
78+
description: 'Whether to fetch tags, even if fetch-depth > 0.'
79+
default: false
80+
show-progress:
81+
description: 'Whether to show progress status output when fetching.'
82+
default: true
83+
lfs:
84+
description: 'Whether to download Git-LFS files'
85+
default: false
86+
submodules:
87+
description: >
88+
Whether to checkout submodules: `true` to checkout submodules or `recursive` to
89+
recursively checkout submodules.
90+
91+
92+
When the `ssh-key` input is not provided, SSH URLs beginning with `git@github.com:` are
93+
converted to HTTPS.
94+
default: false
95+
set-safe-directory:
96+
description: Add repository path as safe.directory for Git global config by running `git config --global --add safe.directory <path>`
97+
default: true
98+
github-server-url:
99+
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
100+
required: false
101+
object-format:
102+
description: 'Specify the Git object format for repository initialization (sha1, sha256).'
103+
required: false
104+
default: null
105+
outputs:
106+
ref:
107+
description: 'The branch, tag or SHA that was checked out'
108+
commit:
109+
description: 'The commit SHA that was checked out'
110+
runs:
111+
using: node20
112+
main: dist/index.js
113+
post: dist/index.js

dist/index.js

+11-3
Original file line numberDiff line numberDiff line change
@@ -709,9 +709,14 @@ class GitCommandManager {
709709
getWorkingDirectory() {
710710
return this.workingDirectory;
711711
}
712-
init() {
712+
init(objectFormat) {
713713
return __awaiter(this, void 0, void 0, function* () {
714-
yield this.execGit(['init', this.workingDirectory]);
714+
const args = ['init'];
715+
if (objectFormat) {
716+
args.push(`--object-format=${objectFormat}`);
717+
}
718+
args.push(this.workingDirectory);
719+
yield this.execGit(args);
715720
});
716721
}
717722
isDetached() {
@@ -1236,7 +1241,7 @@ function getSource(settings) {
12361241
// Initialize the repository
12371242
if (!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))) {
12381243
core.startGroup('Initializing the repository');
1239-
yield git.init();
1244+
yield git.init(settings.objectFormat);
12401245
yield git.remoteAdd('origin', repositoryUrl);
12411246
core.endGroup();
12421247
}
@@ -1831,6 +1836,9 @@ function getInputs() {
18311836
// Determine the GitHub URL that the repository is being hosted from
18321837
result.githubServerUrl = core.getInput('github-server-url');
18331838
core.debug(`GitHub Host URL = ${result.githubServerUrl}`);
1839+
// Retrieve the Git object format for initializing a Git repository.
1840+
result.objectFormat = core.getInput('object-format');
1841+
core.debug(`git object format = ${result.objectFormat}`);
18341842
return result;
18351843
});
18361844
}

src/git-command-manager.ts

+8-3
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ export interface IGitCommandManager {
4242
): Promise<void>
4343
getDefaultBranch(repositoryUrl: string): Promise<string>
4444
getWorkingDirectory(): string
45-
init(): Promise<void>
45+
init(objectFormat?: string): Promise<void>
4646
isDetached(): Promise<boolean>
4747
lfsFetch(ref: string): Promise<void>
4848
lfsInstall(): Promise<void>
@@ -327,8 +327,13 @@ class GitCommandManager {
327327
return this.workingDirectory
328328
}
329329

330-
async init(): Promise<void> {
331-
await this.execGit(['init', this.workingDirectory])
330+
async init(objectFormat?: string): Promise<void> {
331+
const args = ['init']
332+
if (objectFormat) {
333+
args.push(`--object-format=${objectFormat}`)
334+
}
335+
args.push(this.workingDirectory)
336+
await this.execGit(args)
332337
}
333338

334339
async isDetached(): Promise<boolean> {

src/git-source-provider.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ export async function getSource(settings: IGitSourceSettings): Promise<void> {
110110
!fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git'))
111111
) {
112112
core.startGroup('Initializing the repository')
113-
await git.init()
113+
await git.init(settings.objectFormat)
114114
await git.remoteAdd('origin', repositoryUrl)
115115
core.endGroup()
116116
}

src/git-source-settings.ts

+5
Original file line numberDiff line numberDiff line change
@@ -118,4 +118,9 @@ export interface IGitSourceSettings {
118118
* User override on the GitHub Server/Host URL that hosts the repository to be cloned
119119
*/
120120
githubServerUrl: string | undefined
121+
122+
/**
123+
* Specify the Git object format for repository initialization (sha1, sha256).
124+
*/
125+
objectFormat: string | undefined
121126
}

src/input-helper.ts

+4
Original file line numberDiff line numberDiff line change
@@ -161,5 +161,9 @@ export async function getInputs(): Promise<IGitSourceSettings> {
161161
result.githubServerUrl = core.getInput('github-server-url')
162162
core.debug(`GitHub Host URL = ${result.githubServerUrl}`)
163163

164+
// Retrieve the Git object format for initializing a Git repository.
165+
result.objectFormat = core.getInput('object-format')
166+
core.debug(`git object format = ${result.objectFormat}`)
167+
164168
return result
165169
}

0 commit comments

Comments
 (0)