Add label trigger functionality to Claude Code Action (#177)

- introduced a new input parameter `label_trigger` in `action.yml` to allow triggering actions based on specific labels applied to issues.
- Enhanced the context preparation and event handling in the code to support the new labled event.
This commit is contained in:
Tomohiro Ishibashi
2025-06-26 02:25:26 +09:00
committed by GitHub
parent c831be8f54
commit b0d9b8c4cd
10 changed files with 182 additions and 2 deletions

View File

@@ -6,6 +6,7 @@ import { describe, it, expect } from "bun:test";
import {
createMockContext,
mockIssueAssignedContext,
mockIssueLabeledContext,
mockIssueCommentContext,
mockIssueOpenedContext,
mockPullRequestReviewContext,
@@ -29,6 +30,7 @@ describe("checkContainsTrigger", () => {
inputs: {
triggerPhrase: "/claude",
assigneeTrigger: "",
labelTrigger: "",
directPrompt: "Fix the bug in the login form",
allowedTools: [],
disallowedTools: [],
@@ -55,6 +57,7 @@ describe("checkContainsTrigger", () => {
inputs: {
triggerPhrase: "/claude",
assigneeTrigger: "",
labelTrigger: "",
directPrompt: "",
allowedTools: [],
disallowedTools: [],
@@ -107,6 +110,39 @@ describe("checkContainsTrigger", () => {
});
});
describe("label trigger", () => {
it("should return true when issue is labeled with the trigger label", () => {
const context = mockIssueLabeledContext;
expect(checkContainsTrigger(context)).toBe(true);
});
it("should return false when issue is labeled with a different label", () => {
const context = {
...mockIssueLabeledContext,
payload: {
...mockIssueLabeledContext.payload,
label: {
...(mockIssueLabeledContext.payload as any).label,
name: "bug",
},
},
} as ParsedGitHubContext;
expect(checkContainsTrigger(context)).toBe(false);
});
it("should return false for non-labeled events", () => {
const context = {
...mockIssueLabeledContext,
eventAction: "opened",
payload: {
...mockIssueLabeledContext.payload,
action: "opened",
},
} as ParsedGitHubContext;
expect(checkContainsTrigger(context)).toBe(false);
});
});
describe("issue body and title trigger", () => {
it("should return true when issue body contains trigger phrase", () => {
const context = mockIssueOpenedContext;
@@ -232,6 +268,7 @@ describe("checkContainsTrigger", () => {
inputs: {
triggerPhrase: "@claude",
assigneeTrigger: "",
labelTrigger: "",
directPrompt: "",
allowedTools: [],
disallowedTools: [],
@@ -259,6 +296,7 @@ describe("checkContainsTrigger", () => {
inputs: {
triggerPhrase: "@claude",
assigneeTrigger: "",
labelTrigger: "",
directPrompt: "",
allowedTools: [],
disallowedTools: [],
@@ -286,6 +324,7 @@ describe("checkContainsTrigger", () => {
inputs: {
triggerPhrase: "@claude",
assigneeTrigger: "",
labelTrigger: "",
directPrompt: "",
allowedTools: [],
disallowedTools: [],