From 21bbf8c0e4ac6f18360981a5a025a60a36f753ef Mon Sep 17 00:00:00 2001 From: Robert Wieczoreck Date: Tue, 7 Sep 2021 22:49:58 +0200 Subject: [PATCH] Add option to fetch tags even if fetch-depth > 0 --- README.md | 4 ++++ __test__/git-auth-helper.test.ts | 1 + __test__/input-helper.test.ts | 1 + action.yml | 3 +++ dist/index.js | 14 +++++++++----- src/git-command-manager.ts | 19 ++++++++++++++----- src/git-source-provider.ts | 2 +- src/git-source-settings.ts | 5 +++++ src/input-helper.ts | 5 +++++ 9 files changed, 43 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 775cee592..6f19989a0 100644 --- a/README.md +++ b/README.md @@ -93,6 +93,10 @@ Refer [here](https://github.com/actions/checkout/blob/v1/README.md) for previous # Default: 1 fetch-depth: '' + # Whether to fetch tags, even if fetch-depth > 0. + # Default: false + fetch-tags: '' + # Whether to download Git-LFS files # Default: false lfs: '' diff --git a/__test__/git-auth-helper.test.ts b/__test__/git-auth-helper.test.ts index e14e948fb..d31b63d76 100644 --- a/__test__/git-auth-helper.test.ts +++ b/__test__/git-auth-helper.test.ts @@ -765,6 +765,7 @@ async function setup(testName: string): Promise { clean: true, commit: '', fetchDepth: 1, + fetchTags: false, lfs: false, submodules: false, nestedSubmodules: false, diff --git a/__test__/input-helper.test.ts b/__test__/input-helper.test.ts index a31b11cfa..db718b1dc 100644 --- a/__test__/input-helper.test.ts +++ b/__test__/input-helper.test.ts @@ -80,6 +80,7 @@ describe('input-helper tests', () => { expect(settings.commit).toBeTruthy() expect(settings.commit).toBe('1234567890123456789012345678901234567890') expect(settings.fetchDepth).toBe(1) + expect(settings.fetchTags).toBe(false) expect(settings.lfs).toBe(false) expect(settings.ref).toBe('refs/heads/some-ref') expect(settings.repositoryName).toBe('some-repo') diff --git a/action.yml b/action.yml index 91d39826c..9792feaaa 100644 --- a/action.yml +++ b/action.yml @@ -56,6 +56,9 @@ inputs: fetch-depth: description: 'Number of commits to fetch. 0 indicates all history for all branches and tags.' default: 1 + fetch-tags: + description: 'Whether to fetch tags, even if fetch-depth > 0.' + default: false lfs: description: 'Whether to download Git-LFS files' default: false diff --git a/dist/index.js b/dist/index.js index 8542f7dfc..dfdf486ba 100644 --- a/dist/index.js +++ b/dist/index.js @@ -6959,10 +6959,10 @@ class GitCommandManager { return output.exitCode === 0; }); } - fetch(refSpec, fetchDepth) { + fetch(refSpec, fetchDepth, fetchTags) { return __awaiter(this, void 0, void 0, function* () { const args = ['-c', 'protocol.version=2', 'fetch']; - if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { + if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !fetchTags) { args.push('--no-tags'); } args.push('--prune', '--progress', '--no-recurse-submodules'); @@ -7040,8 +7040,8 @@ class GitCommandManager { } log1(format) { return __awaiter(this, void 0, void 0, function* () { - var args = format ? ['log', '-1', format] : ['log', '-1']; - var silent = format ? false : true; + const args = format ? ['log', '-1', format] : ['log', '-1']; + const silent = format ? false : true; const output = yield this.execGit(args, false, silent); return output.stdout; }); @@ -7394,7 +7394,7 @@ function getSource(settings) { } else { const refSpec = refHelper.getRefSpec(settings.ref, settings.commit); - yield git.fetch(refSpec, settings.fetchDepth); + yield git.fetch(refSpec, settings.fetchDepth, settings.fetchTags); } core.endGroup(); // Checkout info @@ -17216,6 +17216,10 @@ function getInputs() { result.fetchDepth = 0; } core.debug(`fetch depth = ${result.fetchDepth}`); + // Fetch tags + result.fetchTags = + (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE'; + core.debug(`fetch tags = ${result.fetchTags}`); // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE'; core.debug(`lfs = ${result.lfs}`); diff --git a/src/git-command-manager.ts b/src/git-command-manager.ts index 699a963de..72dea1313 100644 --- a/src/git-command-manager.ts +++ b/src/git-command-manager.ts @@ -25,7 +25,11 @@ export interface IGitCommandManager { add?: boolean ): Promise configExists(configKey: string, globalConfig?: boolean): Promise - fetch(refSpec: string[], fetchDepth?: number): Promise + fetch( + refSpec: string[], + fetchDepth?: number, + fetchTags?: boolean + ): Promise getDefaultBranch(repositoryUrl: string): Promise getWorkingDirectory(): string init(): Promise @@ -170,9 +174,14 @@ class GitCommandManager { return output.exitCode === 0 } - async fetch(refSpec: string[], fetchDepth?: number): Promise { + async fetch( + refSpec: string[], + fetchDepth?: number, + fetchTags?: boolean + ): Promise { const args = ['-c', 'protocol.version=2', 'fetch'] - if (!refSpec.some(x => x === refHelper.tagsRefSpec)) { + + if (!refSpec.some(x => x === refHelper.tagsRefSpec) && !fetchTags) { args.push('--no-tags') } @@ -257,8 +266,8 @@ class GitCommandManager { } async log1(format?: string): Promise { - var args = format ? ['log', '-1', format] : ['log', '-1'] - var silent = format ? false : true + const args = format ? ['log', '-1', format] : ['log', '-1'] + const silent = format ? false : true const output = await this.execGit(args, false, silent) return output.stdout } diff --git a/src/git-source-provider.ts b/src/git-source-provider.ts index 42a12e04e..427479a9d 100644 --- a/src/git-source-provider.ts +++ b/src/git-source-provider.ts @@ -141,7 +141,7 @@ export async function getSource(settings: IGitSourceSettings): Promise { } } else { const refSpec = refHelper.getRefSpec(settings.ref, settings.commit) - await git.fetch(refSpec, settings.fetchDepth) + await git.fetch(refSpec, settings.fetchDepth, settings.fetchTags) } core.endGroup() diff --git a/src/git-source-settings.ts b/src/git-source-settings.ts index 19f46513d..0890f60e8 100644 --- a/src/git-source-settings.ts +++ b/src/git-source-settings.ts @@ -34,6 +34,11 @@ export interface IGitSourceSettings { */ fetchDepth: number + /** + * Fetch tags, even if fetchDepth > 0 (default: false) + */ + fetchTags: boolean + /** * Indicates whether to fetch LFS objects */ diff --git a/src/input-helper.ts b/src/input-helper.ts index 40e6de44e..b65539f68 100644 --- a/src/input-helper.ts +++ b/src/input-helper.ts @@ -89,6 +89,11 @@ export async function getInputs(): Promise { } core.debug(`fetch depth = ${result.fetchDepth}`) + // Fetch tags + result.fetchTags = + (core.getInput('fetch-tags') || 'false').toUpperCase() === 'TRUE' + core.debug(`fetch tags = ${result.fetchTags}`) + // LFS result.lfs = (core.getInput('lfs') || 'false').toUpperCase() === 'TRUE' core.debug(`lfs = ${result.lfs}`)