From 898a4ef8c7f2879d9ecacead028132909462ab27 Mon Sep 17 00:00:00 2001 From: mbruhin <47482924+mbruhin@users.noreply.github.com> Date: Wed, 14 May 2025 10:22:08 -0600 Subject: [PATCH] update filter and consolidate logic Signed-off-by: mbruhin <47482924+mbruhin@users.noreply.github.com> --- .../src/actions/bitbucketCloudPullRequest.ts | 5 ++--- .../src/actions/bitbucketServerPullRequest.ts | 5 ++--- plugins/scaffolder-node/src/actions/index.ts | 2 +- .../scaffolder-node/src/actions/util.test.ts | 22 +++++++++++++++++++ plugins/scaffolder-node/src/actions/util.ts | 9 ++++++++ 5 files changed, 36 insertions(+), 7 deletions(-) diff --git a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/bitbucketCloudPullRequest.ts b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/bitbucketCloudPullRequest.ts index eba9c74a6a..5a30df24f9 100644 --- a/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/bitbucketCloudPullRequest.ts +++ b/plugins/scaffolder-backend-module-bitbucket-cloud/src/actions/bitbucketCloudPullRequest.ts @@ -23,6 +23,7 @@ import { addFiles, cloneRepo, parseRepoUrl, + filterGitFiles, } from '@backstage/plugin-scaffolder-node'; import { Config } from '@backstage/config'; import fs from 'fs-extra'; @@ -413,9 +414,7 @@ export function createPublishBitbucketCloudPullRequestAction(options: { // copy files fs.cpSync(sourceDir, tempDir, { recursive: true, - filter: path => { - return !(path.indexOf('.git') > -1); - }, + filter: filterGitFiles, }); await addFiles({ diff --git a/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServerPullRequest.ts b/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServerPullRequest.ts index 71c16beaa7..9176471913 100644 --- a/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServerPullRequest.ts +++ b/plugins/scaffolder-backend-module-bitbucket-server/src/actions/bitbucketServerPullRequest.ts @@ -26,6 +26,7 @@ import { addFiles, cloneRepo, parseRepoUrl, + filterGitFiles, } from '@backstage/plugin-scaffolder-node'; import { Config } from '@backstage/config'; import fs from 'fs-extra'; @@ -453,9 +454,7 @@ export function createPublishBitbucketServerPullRequestAction(options: { // copy files fs.cpSync(sourceDir, tempDir, { recursive: true, - filter: path => { - return !(path.indexOf('.git') > -1); - }, + filter: filterGitFiles, }); await addFiles({ diff --git a/plugins/scaffolder-node/src/actions/index.ts b/plugins/scaffolder-node/src/actions/index.ts index c1c8551c53..041d57328a 100644 --- a/plugins/scaffolder-node/src/actions/index.ts +++ b/plugins/scaffolder-node/src/actions/index.ts @@ -33,4 +33,4 @@ export { createBranch, cloneRepo, } from './gitHelpers'; -export { parseRepoUrl, getRepoSourceDirectory } from './util'; +export { parseRepoUrl, getRepoSourceDirectory, filterGitFiles } from './util'; diff --git a/plugins/scaffolder-node/src/actions/util.test.ts b/plugins/scaffolder-node/src/actions/util.test.ts index 4b1e787bbc..2e0a464304 100644 --- a/plugins/scaffolder-node/src/actions/util.test.ts +++ b/plugins/scaffolder-node/src/actions/util.test.ts @@ -244,4 +244,26 @@ describe('scaffolder action utils', () => { }); }); }); + + describe('filterGitFiles', () => { + it('should filter .git directory and its contents but keep other files', () => { + // Import the function to test + const { filterGitFiles } = require('./util'); + + // Should filter out .git directory + expect(filterGitFiles('.git')).toBe(false); + + // Should filter out .git directory in subdirectories + expect(filterGitFiles('subdir/.git')).toBe(false); + + // Should filter out files inside .git directory + expect(filterGitFiles('.git/config')).toBe(false); + expect(filterGitFiles('subdir/.git/config')).toBe(false); + + // Should keep .gitignore and other non-.git-directory files + expect(filterGitFiles('.gitignore')).toBe(true); + expect(filterGitFiles('src/components/GitHubIcon.js')).toBe(true); + expect(filterGitFiles('.github/workflows/ci.yml')).toBe(true); + }); + }); }); diff --git a/plugins/scaffolder-node/src/actions/util.ts b/plugins/scaffolder-node/src/actions/util.ts index 12f73b0c6c..da86befdc7 100644 --- a/plugins/scaffolder-node/src/actions/util.ts +++ b/plugins/scaffolder-node/src/actions/util.ts @@ -186,3 +186,12 @@ export const parseSchemas = ( outputSchema: action.schema.output, }; }; + +/** + * Filter function to exclude the .git directory and its contents + * while keeping other files like .gitignore + * @public + */ +export function filterGitFiles(path: string): boolean { + return !(path.endsWith('.git') || path.includes('.git/')); +}