mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-22 22:44:13 +08:00
refactor: complete v1.0 simplification by removing all legacy inputs
- Remove all backward compatibility for v1.0 simplification - Remove 10 legacy inputs from base-action/action.yml - Remove 9 legacy inputs from main action.yml - Simplify ClaudeOptions type to just timeoutMinutes and claudeArgs - Remove all legacy option handling from prepareRunConfig - Update tests to remove references to deleted fields - Remove obsolete test file github/context.test.ts - Clean up types to remove customInstructions, allowedTools, disallowedTools Users now use claudeArgs exclusively for CLI control.
This commit is contained in:
@@ -330,12 +330,11 @@ describe("generatePrompt", () => {
|
||||
expect(prompt).toContain("pull request opened");
|
||||
});
|
||||
|
||||
test("should include custom instructions when provided", async () => {
|
||||
test("should generate prompt for issue comment without custom fields", async () => {
|
||||
const envVars: PreparedContext = {
|
||||
repository: "owner/repo",
|
||||
claudeCommentId: "12345",
|
||||
triggerPhrase: "@claude",
|
||||
customInstructions: "Always use TypeScript",
|
||||
eventData: {
|
||||
eventName: "issue_comment",
|
||||
commentId: "67890",
|
||||
@@ -354,7 +353,9 @@ describe("generatePrompt", () => {
|
||||
mockTagMode,
|
||||
);
|
||||
|
||||
expect(prompt).toContain("CUSTOM INSTRUCTIONS:\nAlways use TypeScript");
|
||||
// Verify prompt generates successfully without custom instructions
|
||||
expect(prompt).toContain("@claude please fix this");
|
||||
expect(prompt).not.toContain("CUSTOM INSTRUCTIONS");
|
||||
});
|
||||
|
||||
test("should use override_prompt when provided", async () => {
|
||||
|
||||
@@ -1,115 +0,0 @@
|
||||
import { describe, it, expect } from "bun:test";
|
||||
import {
|
||||
parseMultilineInput,
|
||||
parseAdditionalPermissions,
|
||||
} from "../../src/github/context";
|
||||
|
||||
describe("parseMultilineInput", () => {
|
||||
it("should parse a comma-separated string", () => {
|
||||
const input = `Bash(bun install),Bash(bun test:*),Bash(bun typecheck)`;
|
||||
const result = parseMultilineInput(input);
|
||||
expect(result).toEqual([
|
||||
"Bash(bun install)",
|
||||
"Bash(bun test:*)",
|
||||
"Bash(bun typecheck)",
|
||||
]);
|
||||
});
|
||||
|
||||
it("should parse multiline string", () => {
|
||||
const input = `Bash(bun install)
|
||||
Bash(bun test:*)
|
||||
Bash(bun typecheck)`;
|
||||
const result = parseMultilineInput(input);
|
||||
expect(result).toEqual([
|
||||
"Bash(bun install)",
|
||||
"Bash(bun test:*)",
|
||||
"Bash(bun typecheck)",
|
||||
]);
|
||||
});
|
||||
|
||||
it("should parse comma-separated multiline line", () => {
|
||||
const input = `Bash(bun install),Bash(bun test:*)
|
||||
Bash(bun typecheck)`;
|
||||
const result = parseMultilineInput(input);
|
||||
expect(result).toEqual([
|
||||
"Bash(bun install)",
|
||||
"Bash(bun test:*)",
|
||||
"Bash(bun typecheck)",
|
||||
]);
|
||||
});
|
||||
|
||||
it("should ignore comments", () => {
|
||||
const input = `Bash(bun install),
|
||||
Bash(bun test:*) # For testing
|
||||
# For type checking
|
||||
Bash(bun typecheck)
|
||||
`;
|
||||
const result = parseMultilineInput(input);
|
||||
expect(result).toEqual([
|
||||
"Bash(bun install)",
|
||||
"Bash(bun test:*)",
|
||||
"Bash(bun typecheck)",
|
||||
]);
|
||||
});
|
||||
|
||||
it("should parse an empty string", () => {
|
||||
const input = "";
|
||||
const result = parseMultilineInput(input);
|
||||
expect(result).toEqual([]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("parseAdditionalPermissions", () => {
|
||||
it("should parse single permission", () => {
|
||||
const input = "actions: read";
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.get("actions")).toBe("read");
|
||||
expect(result.size).toBe(1);
|
||||
});
|
||||
|
||||
it("should parse multiple permissions", () => {
|
||||
const input = `actions: read
|
||||
packages: write
|
||||
contents: read`;
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.get("actions")).toBe("read");
|
||||
expect(result.get("packages")).toBe("write");
|
||||
expect(result.get("contents")).toBe("read");
|
||||
expect(result.size).toBe(3);
|
||||
});
|
||||
|
||||
it("should handle empty string", () => {
|
||||
const input = "";
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.size).toBe(0);
|
||||
});
|
||||
|
||||
it("should handle whitespace and empty lines", () => {
|
||||
const input = `
|
||||
actions: read
|
||||
|
||||
packages: write
|
||||
`;
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.get("actions")).toBe("read");
|
||||
expect(result.get("packages")).toBe("write");
|
||||
expect(result.size).toBe(2);
|
||||
});
|
||||
|
||||
it("should ignore lines without colon separator", () => {
|
||||
const input = `actions: read
|
||||
invalid line
|
||||
packages: write`;
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.get("actions")).toBe("read");
|
||||
expect(result.get("packages")).toBe("write");
|
||||
expect(result.size).toBe(2);
|
||||
});
|
||||
|
||||
it("should trim whitespace around keys and values", () => {
|
||||
const input = " actions : read ";
|
||||
const result = parseAdditionalPermissions(input);
|
||||
expect(result.get("actions")).toBe("read");
|
||||
expect(result.size).toBe(1);
|
||||
});
|
||||
});
|
||||
@@ -28,12 +28,8 @@ describe("prepareMcpConfig", () => {
|
||||
triggerPhrase: "@claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
};
|
||||
@@ -552,7 +548,6 @@ describe("prepareMcpConfig", () => {
|
||||
...mockPRContext,
|
||||
inputs: {
|
||||
...mockPRContext.inputs,
|
||||
additionalPermissions: new Map([["actions", "read"]]),
|
||||
useCommitSigning: true,
|
||||
},
|
||||
};
|
||||
@@ -621,10 +616,6 @@ describe("prepareMcpConfig", () => {
|
||||
...mockPRContext,
|
||||
inputs: {
|
||||
...mockPRContext.inputs,
|
||||
additionalPermissions: new Map([
|
||||
["actions", "read"],
|
||||
["future", "permission"],
|
||||
]),
|
||||
},
|
||||
};
|
||||
|
||||
@@ -653,7 +644,6 @@ describe("prepareMcpConfig", () => {
|
||||
...mockPRContext,
|
||||
inputs: {
|
||||
...mockPRContext.inputs,
|
||||
additionalPermissions: new Map([["actions", "read"]]),
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -15,16 +15,8 @@ const defaultInputs = {
|
||||
triggerPhrase: "/claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
anthropicModel: "claude-3-7-sonnet-20250219",
|
||||
allowedTools: [] as string[],
|
||||
disallowedTools: [] as string[],
|
||||
customInstructions: "",
|
||||
useBedrock: false,
|
||||
useVertex: false,
|
||||
timeoutMinutes: 30,
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map<string, string>(),
|
||||
useCommitSigning: false,
|
||||
};
|
||||
|
||||
|
||||
@@ -64,12 +64,8 @@ describe("checkWritePermissions", () => {
|
||||
triggerPhrase: "@claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
|
||||
@@ -270,33 +270,23 @@ describe("parseEnvVarsWithContext", () => {
|
||||
});
|
||||
});
|
||||
|
||||
describe("optional fields", () => {
|
||||
test("should include custom instructions when provided", () => {
|
||||
describe("context generation", () => {
|
||||
test("should generate context without legacy fields", () => {
|
||||
process.env = BASE_ENV;
|
||||
const contextWithCustomInstructions = createMockContext({
|
||||
const context = createMockContext({
|
||||
...mockPullRequestCommentContext,
|
||||
inputs: {
|
||||
...mockPullRequestCommentContext.inputs,
|
||||
customInstructions: "Be concise",
|
||||
},
|
||||
});
|
||||
const result = prepareContext(contextWithCustomInstructions, "12345");
|
||||
const result = prepareContext(context, "12345");
|
||||
|
||||
expect(result.customInstructions).toBe("Be concise");
|
||||
});
|
||||
|
||||
test("should include allowed tools when provided", () => {
|
||||
process.env = BASE_ENV;
|
||||
const contextWithAllowedTools = createMockContext({
|
||||
...mockPullRequestCommentContext,
|
||||
inputs: {
|
||||
...mockPullRequestCommentContext.inputs,
|
||||
allowedTools: ["Tool1", "Tool2"],
|
||||
},
|
||||
});
|
||||
const result = prepareContext(contextWithAllowedTools, "12345");
|
||||
|
||||
expect(result.allowedTools).toBe("Tool1,Tool2");
|
||||
// Verify context is created without legacy fields
|
||||
expect(result.repository).toBe("test-owner/test-repo");
|
||||
expect(result.claudeCommentId).toBe("12345");
|
||||
expect(result.triggerPhrase).toBe("/claude");
|
||||
expect((result as any).customInstructions).toBeUndefined();
|
||||
expect((result as any).allowedTools).toBeUndefined();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -32,12 +32,8 @@ describe("checkContainsTrigger", () => {
|
||||
triggerPhrase: "/claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
@@ -63,12 +59,8 @@ describe("checkContainsTrigger", () => {
|
||||
triggerPhrase: "/claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
@@ -278,12 +270,8 @@ describe("checkContainsTrigger", () => {
|
||||
triggerPhrase: "@claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
@@ -310,12 +298,8 @@ describe("checkContainsTrigger", () => {
|
||||
triggerPhrase: "@claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
@@ -342,12 +326,8 @@ describe("checkContainsTrigger", () => {
|
||||
triggerPhrase: "@claude",
|
||||
assigneeTrigger: "",
|
||||
labelTrigger: "",
|
||||
allowedTools: [],
|
||||
disallowedTools: [],
|
||||
customInstructions: "",
|
||||
branchPrefix: "claude/",
|
||||
useStickyComment: false,
|
||||
additionalPermissions: new Map(),
|
||||
useCommitSigning: false,
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user