146 lines
3.3 KiB
Markdown
146 lines
3.3 KiB
Markdown
# 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.
|