From a07726acb9e2adaa3fdea93f7c0a230288ce9bfc Mon Sep 17 00:00:00 2001 From: Chris Z <535257617@qq.com> Date: Wed, 27 May 2026 16:28:54 +0800 Subject: [PATCH] ci: support list-style ci-filter patterns (#29137) Co-authored-by: Declan Carroll --- .../actions/ci-filter/__tests__/ci-filter.test.ts | 15 +++++++++++++++ .github/actions/ci-filter/ci-filter.mjs | 3 ++- 2 files changed, 17 insertions(+), 1 deletion(-) 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; }