mirror of
https://github.com/anthropics/claude-code-action.git
synced 2026-01-22 22:44:13 +08:00
* actions server * tmp * Replace view_actions_results with additional_permissions input - Changed input from boolean view_actions_results to a more flexible additional_permissions format - Uses newline-separated colon format similar to claude_env (e.g., "actions: read") - Maintains permission checking to warn users when their token lacks required permissions - Updated all tests to use the new format This allows for future extensibility while currently supporting only "actions: read" permission. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Update GitHub Actions MCP server with RUNNER_TEMP and status filtering - Use RUNNER_TEMP environment variable for log storage directory (defaults to /tmp) - Add status parameter to get_ci_status tool to filter workflow runs - Supported statuses: completed, action_required, cancelled, failure, neutral, skipped, stale, success, timed_out, in_progress, queued, requested, waiting, pending - Pass RUNNER_TEMP from install-mcp-server.ts to the MCP server environment 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Add GitHub Actions MCP tools to allowed tools when actions:read is granted - Automatically include github_ci MCP server tools in allowed tools list when actions:read permission is granted - Added mcp__github_ci__get_ci_status, mcp__github_ci__get_workflow_run_details, mcp__github_ci__download_job_log - Simplified permission checking to avoid duplicate parsing logic - Added tests for the new functionality This ensures Claude can use the Actions tools when the server is enabled. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Refactor additional permissions parsing to parseGitHubContext - Moved additional permissions parsing from individual functions to centralized parseGitHubContext - Added parseAdditionalPermissions function to handle newline-separated colon format - Removed redundant additionalPermissions parameter from prepareMcpConfig - Updated tests to use permissions from context instead of passing as parameter - Added comprehensive tests for parseAdditionalPermissions function This centralizes all input parsing logic in one place for better maintainability. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * Remove unnecessary hasActionsReadPermission parameter from createPrompt - Removed hasActionsReadPermission parameter since createPrompt has access to context - Calculate hasActionsReadPermission directly from context.inputs.additionalPermissions inside createPrompt - Simplified prepare.ts by removing intermediate permission check This completes the refactoring to centralize all permission handling through the context object. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * docs: Add documentation for additional_permissions feature - Document the new additional_permissions input that replaces view_actions_results - Add dedicated section explaining CI/CD integration with actions:read permission - Include example workflow showing how to grant GitHub token permissions - Update main workflow example to show optional additional_permissions usage 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com> * roadmap --------- Co-authored-by: Claude <noreply@anthropic.com>
116 lines
3.2 KiB
TypeScript
116 lines
3.2 KiB
TypeScript
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);
|
|
});
|
|
});
|