Skip to content

Commit d375bc4

Browse files
authored
chore: Adding claude integration (#551)
* chore: Adding CLAUDE doc file * adding claude CI files
1 parent 99cb646 commit d375bc4

3 files changed

Lines changed: 215 additions & 0 deletions

File tree

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
name: Claude Code Review
2+
3+
on:
4+
pull_request:
5+
types: [opened, synchronize]
6+
# Optional: Only run on specific file changes
7+
# paths:
8+
# - "src/**/*.ts"
9+
# - "src/**/*.tsx"
10+
# - "src/**/*.js"
11+
# - "src/**/*.jsx"
12+
13+
jobs:
14+
claude-review:
15+
# Optional: Filter by PR author
16+
# if: |
17+
# github.event.pull_request.user.login == 'external-contributor' ||
18+
# github.event.pull_request.user.login == 'new-developer' ||
19+
# github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR'
20+
21+
runs-on: ubuntu-latest
22+
permissions:
23+
contents: read
24+
pull-requests: read
25+
issues: read
26+
id-token: write
27+
28+
steps:
29+
- name: Checkout repository
30+
uses: actions/checkout@v4
31+
with:
32+
fetch-depth: 1
33+
34+
- name: Run Claude Code Review
35+
id: claude-review
36+
uses: anthropics/claude-code-action@beta
37+
with:
38+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
39+
40+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
41+
# model: "claude-opus-4-20250514"
42+
43+
# Direct prompt for automated review (no @claude mention needed)
44+
direct_prompt: |
45+
Please review this pull request and provide feedback on:
46+
- Code quality and best practices
47+
- Potential bugs or issues
48+
- Performance considerations
49+
- Security concerns
50+
- Test coverage
51+
52+
Be constructive and helpful in your feedback.
53+
54+
# Optional: Customize review based on file types
55+
# direct_prompt: |
56+
# Review this PR focusing on:
57+
# - For TypeScript files: Type safety and proper interface usage
58+
# - For API endpoints: Security, input validation, and error handling
59+
# - For React components: Performance, accessibility, and best practices
60+
# - For tests: Coverage, edge cases, and test quality
61+
62+
# Optional: Different prompts for different authors
63+
# direct_prompt: |
64+
# ${{ github.event.pull_request.author_association == 'FIRST_TIME_CONTRIBUTOR' &&
65+
# 'Welcome! Please review this PR from a first-time contributor. Be encouraging and provide detailed explanations for any suggestions.' ||
66+
# 'Please provide a thorough code review focusing on our coding standards and best practices.' }}
67+
68+
# Optional: Add specific tools for running tests or linting
69+
# allowed_tools: "Bash(npm run test),Bash(npm run lint),Bash(npm run typecheck)"
70+
71+
# Optional: Skip review for certain conditions
72+
# if: |
73+
# !contains(github.event.pull_request.title, '[skip-review]') &&
74+
# !contains(github.event.pull_request.title, '[WIP]')

.github/workflows/claude.yml

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
name: Claude Code
2+
3+
on:
4+
issue_comment:
5+
types: [created]
6+
pull_request_review_comment:
7+
types: [created]
8+
issues:
9+
types: [opened, assigned]
10+
pull_request_review:
11+
types: [submitted]
12+
13+
jobs:
14+
claude:
15+
if: |
16+
(github.event_name == 'issue_comment' && contains(github.event.comment.body, '@claude')) ||
17+
(github.event_name == 'pull_request_review_comment' && contains(github.event.comment.body, '@claude')) ||
18+
(github.event_name == 'pull_request_review' && contains(github.event.review.body, '@claude')) ||
19+
(github.event_name == 'issues' && (contains(github.event.issue.body, '@claude') || contains(github.event.issue.title, '@claude')))
20+
runs-on: ubuntu-latest
21+
permissions:
22+
contents: read
23+
pull-requests: read
24+
issues: read
25+
id-token: write
26+
steps:
27+
- name: Checkout repository
28+
uses: actions/checkout@v4
29+
with:
30+
fetch-depth: 1
31+
32+
- name: Run Claude Code
33+
id: claude
34+
uses: anthropics/claude-code-action@beta
35+
with:
36+
anthropic_api_key: ${{ secrets.ANTHROPIC_API_KEY }}
37+
38+
# Optional: Specify model (defaults to Claude Sonnet 4, uncomment for Claude Opus 4)
39+
# model: "claude-opus-4-20250514"
40+
41+
# Optional: Customize the trigger phrase (default: @claude)
42+
# trigger_phrase: "/claude"
43+
44+
# Optional: Trigger when specific user is assigned to an issue
45+
# assignee_trigger: "claude-bot"
46+
47+
# Optional: Allow Claude to run specific commands
48+
# allowed_tools: "Bash(npm install),Bash(npm run build),Bash(npm run test:*),Bash(npm run lint:*)"
49+
50+
# Optional: Add custom instructions for Claude to customize its behavior for your project
51+
# custom_instructions: |
52+
# Follow our coding standards
53+
# Ensure all new code has tests
54+
# Use TypeScript for new files
55+
56+
# Optional: Custom environment variables for Claude
57+
# claude_env: |
58+
# NODE_ENV: test

CLAUDE.md

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
# CLAUDE.md
2+
3+
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
4+
5+
## Project Overview
6+
7+
This is a **Go FTP server library** (`ftpserver` package) that provides a complete RFC 959-compliant FTP server implementation with TLS, IPv6, and extended command support. The library uses a **driver-based architecture** where users implement interfaces to customize file system operations and authentication.
8+
9+
## Architecture
10+
11+
### Core Driver Pattern
12+
The library centers around three main interfaces:
13+
- **MainDriver**: Authentication, client lifecycle, TLS configuration
14+
- **ClientDriver**: File system operations (based on `afero.Fs`)
15+
- **ClientContext**: Client connection metadata and context
16+
17+
### Key Components
18+
- **Server Core** (`server.go`): Main server with command mapping system
19+
- **Client Handler** (`client_handler.go`): Per-client connection management and protocol state machine
20+
- **Command Handlers**: Organized by functionality (`handle_*.go` files)
21+
- **Transfer System**: Separate active (`transfer_active.go`) and passive (`transfer_pasv.go`) mode implementations
22+
23+
## Common Commands
24+
25+
### Development
26+
```bash
27+
# Build the library
28+
go build -v ./...
29+
30+
# Run full test suite with race detection and coverage
31+
go test -parallel 20 -v -race -coverprofile=coverage.txt -covermode=atomic ./...
32+
33+
# Lint code
34+
golangci-lint run
35+
```
36+
37+
### Testing Specific Components
38+
```bash
39+
# Test individual handlers
40+
go test -v -run TestHandle
41+
42+
# Test transfers specifically
43+
go test -v -run TestTransfer
44+
45+
# Run benchmarks
46+
go test -bench=.
47+
```
48+
49+
## File Organization
50+
51+
### Command Handler Structure
52+
- `handle_auth.go`: Authentication commands (USER, PASS, AUTH, PBSZ, PROT)
53+
- `handle_files.go`: File operations (STOR, RETR, LIST, NLST, MLST, MLSD)
54+
- `handle_dirs.go`: Directory operations (CWD, CDUP, MKD, RMD, PWD)
55+
- `handle_misc.go`: System commands (SYST, FEAT, NOOP, QUIT, HELP)
56+
57+
### Core Files
58+
- `driver.go`: Interface definitions and driver extensions
59+
- `client_handler.go`: Main protocol implementation and state management
60+
- `server.go`: Server initialization and command routing
61+
- `errors.go`: FTP-specific error codes and handling
62+
63+
## Testing Architecture
64+
65+
The test suite uses a **reference driver implementation** (`driver_test.go`) with:
66+
- Mock file system using `afero.NewBasePathFs` with temp directories
67+
- Integration tests that simulate real FTP client interactions
68+
- Comprehensive coverage of all command handlers and transfer modes
69+
- Race condition testing for concurrent operations
70+
71+
## Key Dependencies
72+
73+
- `github.com/spf13/afero`: File system abstraction for driver implementations
74+
- `github.com/fclairamb/go-log`: Logging abstraction supporting multiple frameworks
75+
76+
## Code Conventions
77+
78+
- **No global state**: All server instances are isolated
79+
- **Interface-based design**: Extensive use of optional interfaces for extensibility
80+
- **Error handling**: Custom FTP error types with appropriate status codes
81+
- **Concurrency**: Clean goroutine management without sleep/panic patterns
82+
- **Line length**: 120 characters maximum (enforced by linter)
83+
- **Function length**: 80 lines maximum (enforced by linter)

0 commit comments

Comments
 (0)