Files
relspecgo/CONTRIBUTING.md
Hein b9650739bf
Some checks are pending
CI / Test (1.23) (push) Waiting to run
CI / Test (1.24) (push) Waiting to run
CI / Test (1.25) (push) Waiting to run
CI / Lint (push) Waiting to run
CI / Build (push) Waiting to run
init
2025-12-16 13:12:43 +02:00

3.3 KiB

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:
git clone https://github.com/wdevs/relspecgo.git
cd relspecgo
  1. Install dependencies:
go mod download
  1. Run tests:
go test ./...
  1. Build the project:
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:
type Reader interface {
    Read(source string) (*models.Schema, error)
}
  1. Add tests in pkg/readers/myformat_reader_test.go
  2. 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:
type Writer interface {
    Write(schema *models.Schema, destination string) error
}
  1. Add tests in pkg/writers/myformat_writer_test.go
  2. 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

# 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.