From 2df67d2c33f313da2e450a1941b585a8ee2e0cfa Mon Sep 17 00:00:00 2001 From: Sahil Gupta <66163158+sahilempire@users.noreply.github.com> Date: Fri, 7 Aug 2026 20:25:32 +0530 Subject: [PATCH] fix: match label_trigger case-insensitively (#1576) label_trigger used a case-sensitive exact comparison, so a workflow configured with label_trigger: "claude-task" did not fire when an issue received a label named "Claude-Task" (the same label name with different casing). GitHub label names are unique without regard to case, so comparing without case is unambiguous. It also matches the trigger_phrase check in the same function, which is already case-insensitive. Compare labelName and labelTrigger with toLowerCase(), and add a test covering a mixed-case label. Fixes #1571 --- src/github/validation/trigger.ts | 5 ++++- test/trigger-validation.test.ts | 14 ++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/github/validation/trigger.ts b/src/github/validation/trigger.ts index 01724e0f..41c9e327 100644 --- a/src/github/validation/trigger.ts +++ b/src/github/validation/trigger.ts @@ -38,7 +38,10 @@ export function checkContainsTrigger(context: ParsedGitHubContext): boolean { if (isIssuesEvent(context) && context.eventAction === "labeled") { const labelName = (context.payload as any).label?.name || ""; - if (labelTrigger && labelName === labelTrigger) { + if ( + labelTrigger && + labelName.toLowerCase() === labelTrigger.toLowerCase() + ) { console.log(`Issue labeled with trigger label '${labelTrigger}'`); return true; } diff --git a/test/trigger-validation.test.ts b/test/trigger-validation.test.ts index 27516432..611b6fc3 100644 --- a/test/trigger-validation.test.ts +++ b/test/trigger-validation.test.ts @@ -134,6 +134,20 @@ describe("checkContainsTrigger", () => { expect(checkContainsTrigger(context)).toBe(false); }); + it("should return true when the labeled name differs only in case from the trigger", () => { + const context = { + ...mockIssueLabeledContext, + payload: { + ...mockIssueLabeledContext.payload, + label: { + ...(mockIssueLabeledContext.payload as any).label, + name: "Claude-Task", + }, + }, + } as ParsedGitHubContext; + expect(checkContainsTrigger(context)).toBe(true); + }); + it("should return false for non-labeled events", () => { const context = { ...mockIssueLabeledContext,