aboutsummaryrefslogtreecommitdiff
path: root/CLAUDE.md
blob: 4336c2026e8e14d5d35a99a0bc7d01010a6b00a5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
# CLAUDE.md

This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.

## Project Overview

This is `go-git-server`, an experimental Git HTTP server in Go that provides authentication and authorization for Git repositories. It wraps the built-in `git-http-backend` CGI process to maintain compatibility while adding security features.

## Key Architecture

- **Main Entry Point**: `cmd/main.go` - HTTP server with middleware stack
- **Core Components**:
  - `internal/git/handler.go` - Git HTTP backend CGI wrapper
  - `internal/authz/` - Authentication/authorization middleware using Casbin
  - `internal/admin/` - Administrative services and configuration management
- **Configuration**: Uses Casbin for RBAC with auth model (`auth_model.ini`) and policy files
- **Authentication**: Token-based system with bcrypt hashing stored in CSV format
- **Authorization**: Role-based access control with roles like admin, maintainers, bots

## Common Commands

### Development
```bash
# Run tests and linting
just test

# Build the application
just build <version>

# Run server locally with debug mode
just debug-run

# Run specific test with debugger
just debug-test <package> <function>

# Run server with sample data
just run [repo_path]
```

### Testing
```bash
# Run all tests with coverage
just test

# Coverage is automatically generated in temp directories
```

### Building and Deployment
```bash
# Create new version and build
just release <part>  # where part is: patch, minor, major, or latest

# Build Docker image
just docker-build

# Local Kubernetes deployment
just local-deploy

# Clean build artifacts
just clean
```

### Token Management
```bash
# Generate new authentication token
go run cmd/tokentool/main.go -generate -name <username>

# List existing tokens
go run cmd/tokentool/main.go -list

# Generate token directly from main binary
./main -g
```

## Development Notes

- **Go Version**: Requires Go 1.24+
- **Dependencies**: Uses Casbin for authorization, go-git for Git operations
- **Testing**: Uses standard Go testing with coverage reporting
- **Linting**: Uses golangci-lint
- **Build System**: Uses `just` (justfile) for task automation
- **Container**: Designed for Kubernetes deployment with minimal dependencies

## Configuration Files

- `gitserver.yaml` - Server configuration and repository definitions
- `auth_model.ini` - Casbin authentication model
- `policy.csv` - Casbin authorization policies
- `tokens.csv` - Authentication tokens (format: access_id,friendly_name,hash)

## Code Conventions

From `CONVENTIONS.md`:
- Prefer idiomatic Go code
- Minimize dependencies
- Expert-level Git and Go programming expected
- Building a proxy server for `git-http-backend`