diff --git a/.github/actions/ci-filter/__tests__/ci-filter.test.ts b/.github/actions/ci-filter/__tests__/ci-filter.test.ts index cfc3c17a3b2..a2845f9373f 100644 --- a/.github/actions/ci-filter/__tests__/ci-filter.test.ts +++ b/.github/actions/ci-filter/__tests__/ci-filter.test.ts @@ -93,6 +93,14 @@ describe('parseFilters', () => { assert.deepEqual(filters.get('non-python'), ['**', '!packages/@n8n/task-runner-python/**']); }); + it('parses YAML-list-style multi-line filter', () => { + const input = `db: + - packages/@n8n/db/** + - packages/cli/**`; + const filters = parseFilters(input); + assert.deepEqual(filters.get('db'), ['packages/@n8n/db/**', 'packages/cli/**']); + }); + it('parses mixed single and multi-line', () => { const input = `non-python: ** @@ -159,6 +167,13 @@ describe('evaluateFilter', () => { assert.equal(evaluateFilter(files, patterns), true); }); + it('list-style parsed db filter matches db package changes', () => { + const filters = parseFilters(`db: + - packages/@n8n/db/** + - packages/cli/**`); + assert.equal(evaluateFilter(['packages/@n8n/db/src/index.ts'], filters.get('db') ?? []), true); + }); + it('non-.github files with workflows filter returns false', () => { const files = ['packages/cli/src/index.ts']; const patterns = ['.github/**']; diff --git a/.github/actions/ci-filter/ci-filter.mjs b/.github/actions/ci-filter/ci-filter.mjs index d447078a936..1f9a20e034d 100644 --- a/.github/actions/ci-filter/ci-filter.mjs +++ b/.github/actions/ci-filter/ci-filter.mjs @@ -74,7 +74,8 @@ export function parseFilters(input) { if (currentFilter && rawLine.match(/^\s/)) { const patterns = filters.get(currentFilter); - if (patterns) patterns.push(line); + const pattern = line.startsWith('- ') ? line.slice(2).trim() : line; + if (patterns && pattern) patterns.push(pattern); continue; }