From 57d34076e0bc44a281ec66e6132f6fb616b12aaf Mon Sep 17 00:00:00 2001 From: Josh Dales Date: Wed, 17 May 2023 07:05:19 -0400 Subject: [PATCH] Better check for empty configs in checkAll --- __tests__/fixtures/any_and_all.yml | 6 ++++++ __tests__/main.test.ts | 20 +++++++++++++++----- dist/index.js | 6 +++--- src/labeler.ts | 10 +++++----- 4 files changed, 29 insertions(+), 13 deletions(-) create mode 100644 __tests__/fixtures/any_and_all.yml diff --git a/__tests__/fixtures/any_and_all.yml b/__tests__/fixtures/any_and_all.yml new file mode 100644 index 000000000..5b8901e5b --- /dev/null +++ b/__tests__/fixtures/any_and_all.yml @@ -0,0 +1,6 @@ +tests: + - any: + - head-branch: ['^tests/', '^test/'] + - changed-files: ['tests/**/*'] + - all: + - changed-files: ['!tests/requirements.txt'] diff --git a/__tests__/main.test.ts b/__tests__/main.test.ts index 783acf69b..9efc87c9e 100644 --- a/__tests__/main.test.ts +++ b/__tests__/main.test.ts @@ -17,7 +17,8 @@ const getPullMock = jest.spyOn(gh.rest.pulls, 'get'); const yamlFixtures = { 'branches.yml': fs.readFileSync('__tests__/fixtures/branches.yml'), 'only_pdfs.yml': fs.readFileSync('__tests__/fixtures/only_pdfs.yml'), - 'not_supported.yml': fs.readFileSync('__tests__/fixtures/not_supported.yml') + 'not_supported.yml': fs.readFileSync('__tests__/fixtures/not_supported.yml'), + 'any_and_all.yml': fs.readFileSync('__tests__/fixtures/any_and_all.yml') }; afterAll(() => jest.restoreAllMocks()); @@ -167,9 +168,9 @@ describe('run', () => { }); }); - it('can support multiple branches by providing an array', async () => { - github.context.payload.pull_request!.head = {ref: 'array/123'}; - usingLabelerConfigYaml('branches.yml'); + it('adds a label when matching any and all patterns are provided', async () => { + usingLabelerConfigYaml('any_and_all.yml'); + mockGitHubResponseChangedFiles('tests/test.ts'); await run(); expect(addLabelsMock).toHaveBeenCalledTimes(1); @@ -177,9 +178,18 @@ describe('run', () => { owner: 'monalisa', repo: 'helloworld', issue_number: 123, - labels: ['array-branch'] + labels: ['tests'] }); }); + + it('does not add a label when not all any and all patterns are matched', async () => { + usingLabelerConfigYaml('any_and_all.yml'); + mockGitHubResponseChangedFiles('tests/requirements.txt'); + await run(); + + expect(addLabelsMock).toHaveBeenCalledTimes(0); + expect(removeLabelMock).toHaveBeenCalledTimes(0); + }); }); function usingLabelerConfigYaml(fixtureName: keyof typeof yamlFixtures): void { diff --git a/dist/index.js b/dist/index.js index 14db90c44..71af26a98 100644 --- a/dist/index.js +++ b/dist/index.js @@ -439,7 +439,8 @@ function checkMatch(changedFiles, matchConfig) { // equivalent to "Array.some()" but expanded for debugging and clarity function checkAny(matchConfigs, changedFiles) { core.debug(` checking "any" patterns`); - if (!matchConfigs.length) { + if (!matchConfigs.length || + !matchConfigs.some(configOption => Object.keys(configOption).length)) { core.debug(` no "any" patterns to check`); return false; } @@ -468,8 +469,7 @@ exports.checkAny = checkAny; function checkAll(matchConfigs, changedFiles) { core.debug(` checking "all" patterns`); if (!matchConfigs.length || - // Make sure that all the configs have keys that we can check for - !matchConfigs.some(configOption => ALLOWED_CONFIG_KEYS.includes(Object.keys(configOption)[0]))) { + !matchConfigs.some(configOption => Object.keys(configOption).length)) { core.debug(` no "all" patterns to check`); return false; } diff --git a/src/labeler.ts b/src/labeler.ts index 72bce2003..ca6a113b8 100644 --- a/src/labeler.ts +++ b/src/labeler.ts @@ -225,7 +225,10 @@ export function checkAny( changedFiles: string[] ): boolean { core.debug(` checking "any" patterns`); - if (!matchConfigs.length) { + if ( + !matchConfigs.length || + !matchConfigs.some(configOption => Object.keys(configOption).length) + ) { core.debug(` no "any" patterns to check`); return false; } @@ -262,10 +265,7 @@ export function checkAll( core.debug(` checking "all" patterns`); if ( !matchConfigs.length || - // Make sure that all the configs have keys that we can check for - !matchConfigs.some(configOption => - ALLOWED_CONFIG_KEYS.includes(Object.keys(configOption)[0]) - ) + !matchConfigs.some(configOption => Object.keys(configOption).length) ) { core.debug(` no "all" patterns to check`); return false;