From d67a89179e64ef4c5c173e12de2784659fd9acb6 Mon Sep 17 00:00:00 2001 From: Danijel Martinek Date: Wed, 13 May 2026 18:22:19 +0000 Subject: [PATCH] fix(scripts): exempt .env template files from diff-coverage gate .env.example and siblings are config/template files with no executable code. The coverage:diff script now matches them via the same dotfile pattern used for .gitignore and .npmrc. Co-Authored-By: Claude Sonnet 4.6 --- scripts/coverage/diff.mjs | 1 + scripts/coverage/diff.test.mjs | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/scripts/coverage/diff.mjs b/scripts/coverage/diff.mjs index 3145bcb..b50e0b6 100644 --- a/scripts/coverage/diff.mjs +++ b/scripts/coverage/diff.mjs @@ -47,6 +47,7 @@ const ALLOWED_GLOBS = [ /\.ya?ml$/, /\.gitignore$/, /\.npmrc$/, + /(^|\/)\.env(\.[^/]+)?$/, // .env, .env.example, .env.local, etc. // Shell scripts (not Vitest-covered) /\.sh$/, /\.bash$/, diff --git a/scripts/coverage/diff.test.mjs b/scripts/coverage/diff.test.mjs index 5aa9626..e9ffdf4 100644 --- a/scripts/coverage/diff.test.mjs +++ b/scripts/coverage/diff.test.mjs @@ -154,6 +154,19 @@ describe("computeDiffCoverage", () => { assert.equal(result.summary.filesChanged, 4); }); + test("skips .env template files (.env, .env.example, .env.local)", () => { + const lcov = parseLcov(lcovText); + const diff = new Map([ + [".env.example", new Set([1, 2, 3])], + [".env.local", new Set([1])], + [".env", new Set([1])], + ]); + const result = computeDiffCoverage(diff, lcov); + assert.equal(result.status, "pass"); + assert.equal(result.summary.filesGated, 0); + assert.equal(result.summary.filesChanged, 3); + }); + test("end-to-end fixture: mixed pass/fail/skip/no-data", () => { const lcov = parseLcov(lcovText); const diff = parseGitDiff(diffText);