Some checks failed
CI / Test (1.24) (push) Successful in -25m43s
CI / Test (1.25) (push) Successful in -25m39s
CI / Build (push) Successful in -25m54s
CI / Lint (push) Successful in -25m43s
Integration Tests / Integration Tests (push) Failing after -26m1s
Release / Build and Release (push) Successful in -24m59s
191 lines
6.6 KiB
Markdown
191 lines
6.6 KiB
Markdown
# RelSpec
|
|
|
|
[](https://git.warky.dev/wdevs/relspecgo/releases/latest)
|
|
[](https://git.warky.dev/wdevs/relspecgo/actions/workflows/ci.yml)
|
|
[](https://git.warky.dev/wdevs/relspecgo/actions/workflows/integration-tests.yml)
|
|
[](https://go.dev/dl/)
|
|
[](LICENSE)
|
|
|
|
> Database Relations Specification Tool for Go
|
|
|
|
RelSpec is a comprehensive database relations management tool that reads, transforms, and writes database table specifications across multiple formats and ORMs.
|
|
|
|
## Overview
|
|
|
|
RelSpec provides bidirectional conversion, comparison, and validation of database specification formats, allowing you to:
|
|
- Inspect live databases and extract their structure
|
|
- Validate schemas against configurable rules and naming conventions
|
|
- Convert between different ORM models (GORM, Bun, etc.)
|
|
- Transform legacy schema definitions (Clarion DCTX, XML, JSON, etc.)
|
|
- Generate standardized specification files (JSON, YAML, etc.)
|
|
- Compare database schemas and track changes
|
|
|
|

|
|
|
|
## Features
|
|
|
|
### Readers (Input Formats)
|
|
|
|
RelSpec can read database schemas from multiple sources:
|
|
|
|
#### ORM Models
|
|
- [GORM](pkg/readers/gorm/README.md) - Go GORM model definitions
|
|
- [Bun](pkg/readers/bun/README.md) - Go Bun model definitions
|
|
- [Drizzle](pkg/readers/drizzle/README.md) - TypeScript Drizzle ORM schemas
|
|
- [Prisma](pkg/readers/prisma/README.md) - Prisma schema language
|
|
- [TypeORM](pkg/readers/typeorm/README.md) - TypeScript TypeORM entities
|
|
|
|
#### Database Inspection
|
|
- [PostgreSQL](pkg/readers/pgsql/README.md) - Direct PostgreSQL database introspection
|
|
|
|
#### Schema Formats
|
|
- [DBML](pkg/readers/dbml/README.md) - Database Markup Language (dbdiagram.io)
|
|
- [DCTX](pkg/readers/dctx/README.md) - Clarion database dictionary format
|
|
- [DrawDB](pkg/readers/drawdb/README.md) - DrawDB JSON format
|
|
- [GraphQL](pkg/readers/graphql/README.md) - GraphQL Schema Definition Language (SDL)
|
|
- [JSON](pkg/readers/json/README.md) - RelSpec canonical JSON format
|
|
- [YAML](pkg/readers/yaml/README.md) - RelSpec canonical YAML format
|
|
|
|
### Writers (Output Formats)
|
|
|
|
RelSpec can write database schemas to multiple formats:
|
|
|
|
#### ORM Models
|
|
- [GORM](pkg/writers/gorm/README.md) - Generate GORM-compatible Go structs
|
|
- [Bun](pkg/writers/bun/README.md) - Generate Bun-compatible Go structs
|
|
- [Drizzle](pkg/writers/drizzle/README.md) - Generate Drizzle ORM TypeScript schemas
|
|
- [Prisma](pkg/writers/prisma/README.md) - Generate Prisma schema files
|
|
- [TypeORM](pkg/writers/typeorm/README.md) - Generate TypeORM TypeScript entities
|
|
|
|
#### Database DDL
|
|
- [PostgreSQL](pkg/writers/pgsql/README.md) - PostgreSQL DDL (CREATE TABLE, etc.)
|
|
|
|
#### Schema Formats
|
|
- [DBML](pkg/writers/dbml/README.md) - Database Markup Language
|
|
- [DCTX](pkg/writers/dctx/README.md) - Clarion database dictionary format
|
|
- [DrawDB](pkg/writers/drawdb/README.md) - DrawDB JSON format
|
|
- [GraphQL](pkg/writers/graphql/README.md) - GraphQL Schema Definition Language (SDL)
|
|
- [JSON](pkg/writers/json/README.md) - RelSpec canonical JSON format
|
|
- [YAML](pkg/writers/yaml/README.md) - RelSpec canonical YAML format
|
|
|
|
### Inspector (Schema Validation)
|
|
|
|
RelSpec includes a powerful schema validation and linting tool:
|
|
|
|
- [Inspector](pkg/inspector/README.md) - Validate database schemas against configurable rules
|
|
- Enforce naming conventions (snake_case, camelCase, custom patterns)
|
|
- Check primary key and foreign key standards
|
|
- Detect missing indexes on foreign keys
|
|
- Prevent use of SQL reserved keywords
|
|
- Ensure schema integrity (missing PKs, orphaned FKs, circular dependencies)
|
|
- Support for custom validation rules
|
|
- Multiple output formats (Markdown with colors, JSON)
|
|
- CI/CD integration ready
|
|
|
|
## Use of AI
|
|
[Rules and use of AI](./AI_USE.md)
|
|
|
|
## Installation
|
|
|
|
```bash
|
|
go get github.com/wdevs/relspecgo
|
|
|
|
go install -v git.warky.dev/wdevs/relspecgo/cmd/relspec@latest
|
|
```
|
|
|
|
## Usage
|
|
|
|
### Schema Conversion
|
|
|
|
```bash
|
|
# Convert PostgreSQL database to GORM models
|
|
relspec convert --from pgsql --from-conn "postgres://user:pass@localhost/mydb" \
|
|
--to gorm --to-path models/ --package models
|
|
|
|
# Convert GORM models to Bun
|
|
relspec convert --from gorm --from-path models.go \
|
|
--to bun --to-path bun_models.go --package models
|
|
|
|
# Export database schema to JSON
|
|
relspec convert --from pgsql --from-conn "postgres://..." \
|
|
--to json --to-path schema.json
|
|
|
|
# Convert DBML to PostgreSQL SQL
|
|
relspec convert --from dbml --from-path schema.dbml \
|
|
--to pgsql --to-path schema.sql
|
|
```
|
|
|
|
### Schema Validation
|
|
|
|
```bash
|
|
# Validate a PostgreSQL database with default rules
|
|
relspec inspect --from pgsql --from-conn "postgres://user:pass@localhost/mydb"
|
|
|
|
# Validate DBML file with custom rules
|
|
relspec inspect --from dbml --from-path schema.dbml --rules .relspec-rules.yaml
|
|
|
|
# Generate JSON validation report
|
|
relspec inspect --from json --from-path db.json \
|
|
--output-format json --output report.json
|
|
|
|
# Validate specific schema only
|
|
relspec inspect --from pgsql --from-conn "..." --schema public
|
|
```
|
|
|
|
### Schema Comparison
|
|
|
|
```bash
|
|
# Compare two database schemas
|
|
relspec diff --from pgsql --from-conn "postgres://localhost/db1" \
|
|
--to pgsql --to-conn "postgres://localhost/db2"
|
|
```
|
|
|
|
## Project Structure
|
|
|
|
```
|
|
relspecgo/
|
|
├── cmd/
|
|
│ └── relspec/ # CLI application (convert, inspect, diff, scripts)
|
|
├── pkg/
|
|
│ ├── readers/ # Input format readers (DBML, GORM, PostgreSQL, etc.)
|
|
│ ├── writers/ # Output format writers (GORM, Bun, SQL, etc.)
|
|
│ ├── inspector/ # Schema validation and linting
|
|
│ ├── diff/ # Schema comparison
|
|
│ ├── models/ # Internal data models
|
|
│ ├── transform/ # Transformation logic
|
|
│ └── pgsql/ # PostgreSQL utilities (keywords, data types)
|
|
├── examples/ # Usage examples
|
|
└── tests/ # Test files
|
|
```
|
|
|
|
## Todo
|
|
|
|
[Todo List of Features](./TODO.md)
|
|
|
|
## Development
|
|
|
|
### Prerequisites
|
|
- Go 1.21 or higher
|
|
- Access to test databases (optional)
|
|
|
|
### Building
|
|
|
|
```bash
|
|
go build -o relspec ./cmd/relspec
|
|
```
|
|
|
|
### Testing
|
|
|
|
```bash
|
|
go test ./...
|
|
```
|
|
|
|
## License
|
|
|
|
Apache License 2.0 - See [LICENSE](LICENSE) for details.
|
|
|
|
Copyright 2025 Warky Devs
|
|
|
|
## Contributing
|
|
|
|
Contributions welcome. Please open an issue or submit a pull request. |