# Contributing to RelSpec Thank you for your interest in contributing to RelSpec. ## Development Setup ### Prerequisites - Go 1.21 or higher - Git - (Optional) golangci-lint for linting - (Optional) Docker for database testing ### Getting Started 1. Clone the repository: ```bash git clone https://github.com/wdevs/relspecgo.git cd relspecgo ``` 2. Install dependencies: ```bash go mod download ``` 3. Run tests: ```bash go test ./... ``` 4. Build the project: ```bash go build -o relspec ./cmd/relspec ``` ## Project Structure ``` relspecgo/ ├── cmd/ # CLI application entry point ├── pkg/ │ ├── readers/ # Input format readers (XML, JSON, DCTX, DB, GORM, Bun) │ ├── writers/ # Output format writers (GORM, Bun, JSON, YAML) │ ├── models/ # Internal data models for relations │ └── transform/ # Transformation and validation logic ├── examples/ # Usage examples and sample files ├── tests/ # Integration tests └── .claude/ # Claude Code configuration and commands ``` ## Adding New Readers To add a new input format reader: 1. Create a new file in `pkg/readers/` (e.g., `myformat_reader.go`) 2. Implement the `Reader` interface: ```go type Reader interface { Read(source string) (*models.Schema, error) } ``` 3. Add tests in `pkg/readers/myformat_reader_test.go` 4. Register the reader in the CLI ## Adding New Writers To add a new output format writer: 1. Create a new file in `pkg/writers/` (e.g., `myformat_writer.go`) 2. Implement the `Writer` interface: ```go type Writer interface { Write(schema *models.Schema, destination string) error } ``` 3. Add tests in `pkg/writers/myformat_writer_test.go` 4. Register the writer in the CLI ## Code Style - Follow standard Go conventions - Use `gofmt` for formatting - Run `go vet` to check for issues - Use meaningful variable and function names - Add comments for exported functions and types ## Testing - Write unit tests for all new functionality - Aim for >80% code coverage - Use table-driven tests where appropriate - Include both positive and negative test cases ### Running Tests ```bash # All tests go test ./... # With coverage go test -cover ./... # Verbose output go test -v ./... # Specific package go test ./pkg/readers/... ``` ## Committing Changes - Write clear, descriptive commit messages - Follow conventional commits format: `type(scope): description` - Types: feat, fix, docs, test, refactor, chore - Example: `feat(readers): add PostgreSQL support` - Keep commits focused and atomic - Reference issues in commit messages when applicable ## Pull Request Process 1. Create a feature branch from `master` 2. Make your changes 3. Add tests for new functionality 4. Ensure all tests pass 5. Update documentation if needed 6. Submit a pull request with a clear description ## Claude Code Commands This project includes Claude Code slash commands for common tasks: - `/test` - Run all tests - `/build` - Build the binary - `/lint` - Run linters - `/coverage` - Generate coverage report ## Questions or Issues? - Open an issue for bugs or feature requests - Start a discussion for questions or ideas - Check existing issues before creating new ones ## License By contributing to RelSpec, you agree that your contributions will be licensed under the Apache License 2.0.