Thanks for your interest! Here's how to get started.
git clone https://github.com/AzimMahmud/dbshift.git
cd dbshift
dotnet restore
dotnet build
dotnet testRequirements:
- .NET 8 SDK (pinned by
global.json) - PowerShell 7+ (Windows) or bash (Linux/macOS) for the build scripts
src/
├── DbShift.Core/ domain model, no dependencies
├── DbShift.Engine/ script parser, migration executor, in-memory doubles
├── DbShift.Infrastructure/ providers, relational implementations, config loading
├── DbShift.Reports/ status/audit report generation
└── DbShift.CLI/ executable, argument parsing, Spectre.Console UI
tests/
└── DbShift.Engine.Tests/ 15+ tests for ScriptParser + MigrationExecutor
- Language: C# 12, nullable enabled, file-scoped namespaces.
- Style: Follow existing patterns. No BOM, LF line endings.
- Warnings:
TreatWarningsAsErrorsis enforced. Your code must compile with zero warnings. - Tests: Every PR should include or update tests.
dotnet testmust pass. - No comments: Production code should be self-documenting. Use meaningful names.
- Fork and create a feature branch from
main. - Make your changes. Keep them focused — one change per PR.
- Run
dotnet buildanddotnet test— both must pass cleanly. - If adding a new command, add it to the help table and docs.
- Open a PR against
main.
- Create a class implementing
IDatabaseProviderinInfrastructure/Database/Providers/. - Add the NuGet package reference to
DbShift.Infrastructure.csproj. - Register it in
DatabaseProviderFactory.CreateProvider(). - Add the provider config value to the README table.
- Update provider-specific SQL helpers in
NewCommand.cs.
Follow Conventional Commits:
feat: add SQLite provider support
fix: resolve duplicate version detection in ScriptParser
docs: update README with new command table
ci: add macOS to build matrix
Before submitting:
- Code builds with zero warnings
- All existing tests pass
- New tests added for any new behaviour
- Documentation updated (README, docs/, or inline XML docs)
- CHANGELOG.md updated under "Unreleased"
- PR title follows Conventional Commits
Open a Discussion or an Issue.