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
This commit is contained in:
Sahil Gupta
2026-08-07 07:55:32 -07:00
committed by GitHub
parent d573b167d3
commit 2df67d2c33
2 changed files with 18 additions and 1 deletions
+4 -1
View File
@@ -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;
}
+14
View File
@@ -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,