Skip to content

Commit

Permalink
Add support for SHA256 repositories
Browse files Browse the repository at this point in the history
New input parameter 'repo-sha256' to set the Git object format
to "sha256" when initializing a Git repository.
  • Loading branch information
eliroca committed Dec 18, 2024
1 parent cbb7224 commit 57e16d7
Show file tree
Hide file tree
Showing 7 changed files with 39 additions and 7 deletions.
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,10 @@ 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: ''

# Set Git object format to "sha256" when initializing a Git repository.
# Default: false
repo-sha256: ''
```
<!-- end usage -->
Expand Down
4 changes: 4 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,10 @@ 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
repo-sha256:
description: 'Set Git object format to "sha256" when initializing a Git repository.'
required: false
default: false
outputs:
ref:
description: 'The branch, tag or SHA that was checked out'
Expand Down
15 changes: 12 additions & 3 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -709,9 +709,14 @@ class GitCommandManager {
getWorkingDirectory() {
return this.workingDirectory;
}
init() {
init(repoSHA256) {
return __awaiter(this, void 0, void 0, function* () {
yield this.execGit(['init', this.workingDirectory]);
const args = ['init'];
if (repoSHA256) {
args.push(`--object-format=sha256`);
}
args.push(this.workingDirectory);
yield this.execGit(args);
});
}
isDetached() {
Expand Down Expand Up @@ -1236,7 +1241,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(settings.repoSHA256);
yield git.remoteAdd('origin', repositoryUrl);
core.endGroup();
}
Expand Down Expand Up @@ -1831,6 +1836,10 @@ 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}`);
// Set Git object format to "sha256" when initializing a Git repository.
result.repoSHA256 =
(core.getInput('repo-sha256') || 'false').toUpperCase() === 'TRUE';
core.debug(`Repo object format sha256 = ${result.repoSHA256}`);
return result;
});
}
Expand Down
11 changes: 8 additions & 3 deletions src/git-command-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@ export interface IGitCommandManager {
): Promise<void>
getDefaultBranch(repositoryUrl: string): Promise<string>
getWorkingDirectory(): string
init(): Promise<void>
init(repoSHA256?: boolean): Promise<void>
isDetached(): Promise<boolean>
lfsFetch(ref: string): Promise<void>
lfsInstall(): Promise<void>
Expand Down Expand Up @@ -327,8 +327,13 @@ class GitCommandManager {
return this.workingDirectory
}

async init(): Promise<void> {
await this.execGit(['init', this.workingDirectory])
async init(repoSHA256?: boolean): Promise<void> {
const args = ['init']
if (repoSHA256) {
args.push(`--object-format=sha256`)
}
args.push(this.workingDirectory)
await this.execGit(args)
}

async isDetached(): Promise<boolean> {
Expand Down
2 changes: 1 addition & 1 deletion src/git-source-provider.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(settings.repoSHA256)
await git.remoteAdd('origin', repositoryUrl)
core.endGroup()
}
Expand Down
5 changes: 5 additions & 0 deletions src/git-source-settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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

/**
* Set Git object format to "sha256" when initializing a Git repository
*/
repoSHA256: boolean
}
5 changes: 5 additions & 0 deletions src/input-helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -161,5 +161,10 @@ export async function getInputs(): Promise<IGitSourceSettings> {
result.githubServerUrl = core.getInput('github-server-url')
core.debug(`GitHub Host URL = ${result.githubServerUrl}`)

// Set Git object format to "sha256" when initializing a Git repository.
result.repoSHA256 =
(core.getInput('repo-sha256') || 'false').toUpperCase() === 'TRUE'
core.debug(`Repo object format sha256 = ${result.repoSHA256}`)

return result
}

0 comments on commit 57e16d7

Please sign in to comment.