From 488933c9711c901f0e0d8cd2b481cc85f1ea173c Mon Sep 17 00:00:00 2001 From: Elisei Roca Date: Sat, 5 Apr 2025 11:11:19 +0200 Subject: [PATCH] Add support for SHA256 repositories New input parameter to specify the git object format when initializing a git repository. --- README.md | 3 +++ __test__/git-auth-helper.test.ts | 3 ++- action.yml | 3 +++ dist/index.js | 14 +++++++++++--- src/git-command-manager.ts | 11 ++++++++--- src/git-source-provider.ts | 2 +- src/git-source-settings.ts | 5 +++++ src/input-helper.ts | 4 ++++ 8 files changed, 37 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 64dc025..95ebfbf 100644 --- a/README.md +++ b/README.md @@ -126,6 +126,9 @@ 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: '' + + # Specify the Git object format for repository initialization (sha1, sha256). + object-format: '' ``` diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index 7633704..26f0330 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -824,7 +824,8 @@ async function setup(testName: string): Promise { sshUser: '', workflowOrganizationId: 123456, setSafeDirectory: true, - githubServerUrl: githubServerUrl + githubServerUrl: githubServerUrl, + objectFormat: undefined } } diff --git a/action.yml b/action.yml index 6842eb8..8272c08 100644 --- a/action.yml +++ b/action.yml @@ -98,6 +98,9 @@ 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: 'Specify the Git object format for repository initialization (sha1, sha256).' + required: false outputs: ref: description: 'The branch, tag or SHA that was checked out' diff --git a/dist/index.js b/dist/index.js index b0db713..ee7eabd 100644 --- a/dist/index.js +++ b/dist/index.js @@ -709,9 +709,14 @@ class GitCommandManager { getWorkingDirectory() { return this.workingDirectory; } - init() { + init(objectFormat) { return __awaiter(this, void 0, void 0, function* () { - yield this.execGit(['init', this.workingDirectory]); + const args = ['init']; + if (objectFormat) { + args.push(`--object-format=${objectFormat}`); + } + args.push(this.workingDirectory); + yield this.execGit(args); }); } isDetached() { @@ -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.objectFormat); yield git.remoteAdd('origin', repositoryUrl); core.endGroup(); } @@ -1831,6 +1836,9 @@ 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}`); + // Retrieve the Git object format for initializing a Git repository. + result.objectFormat = core.getInput('object-format'); + core.debug(`git object format = ${result.objectFormat}`); return result; }); } diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 8e42a38..605e337 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -42,7 +42,7 @@ export interface IGitCommandManager { ): Promise getDefaultBranch(repositoryUrl: string): Promise getWorkingDirectory(): string - init(): Promise + init(objectFormat?: string): Promise isDetached(): Promise lfsFetch(ref: string): Promise lfsInstall(): Promise @@ -327,8 +327,13 @@ class GitCommandManager { return this.workingDirectory } - async init(): Promise { - await this.execGit(['init', this.workingDirectory]) + async init(objectFormat?: string): Promise { + const args = ['init'] + if (objectFormat) { + args.push(`--object-format=${objectFormat}`) + } + args.push(this.workingDirectory) + await this.execGit(args) } async isDetached(): Promise { diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 2d35138..5a2fd27 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -110,7 +110,7 @@ export async function getSource(settings: IGitSourceSettings): Promise { !fsHelper.directoryExistsSync(path.join(settings.repositoryPath, '.git')) ) { core.startGroup('Initializing the repository') - await git.init() + await git.init(settings.objectFormat) await git.remoteAdd('origin', repositoryUrl) core.endGroup() } diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts index 4e41ac3..257194d 100644 --- a/src/git-source-settings.ts +++ b/src/git-source-settings.ts @@ -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 + + /** + * Specify the Git object format for repository initialization (sha1, sha256). + */ + objectFormat: string | undefined } diff --git a/src/input-helper.ts b/src/input-helper.ts index 059232f..01cf5ab 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -161,5 +161,9 @@ export async function getInputs(): Promise { result.githubServerUrl = core.getInput('github-server-url') core.debug(`GitHub Host URL = ${result.githubServerUrl}`) + // Retrieve the Git object format for initializing a Git repository. + result.objectFormat = core.getInput('object-format') + core.debug(`git object format = ${result.objectFormat}`) + return result }