Setting up a Repository
Step 1: Do You Really Need a New Repository?
Default approach: Use existing repositories (monorepo)
Before creating a new repository, consider adding your project to one of our existing repositories. This approach offers several benefits:
- Shared infrastructure - Leverage existing CI/CD, secrets, and tooling
- Reduced maintenance - No need to duplicate devenv configurations
- Better collaboration - All related projects in one place
- Simplified dependency management - Shared libraries and utilities
When to Use Existing Repositories
- Data pipelines → Add to
datadrivet-infra-opendatastack - Web applications → Add to existing web projects repository
- Utilities and scripts → Add to
datadrivet-infra-opendatastack - Experiments and prototypes → Add to appropriate existing repository
Step 2: Valid Reasons for a New Repository
Create a new repository ONLY if you have a compelling reason:
✅ Good Reasons for New Repository
- Different technology stack - Requires fundamentally different toolchain (e.g., Go project when existing repos are Python)
- Different deployment model - Needs separate CI/CD pipeline or deployment target
- Different access control - Requires different team permissions or security boundaries
- External collaboration - Will be shared with external parties or open-sourced
- Different lifecycle - Has significantly different release cadence or maintenance schedule
- Regulatory/compliance - Must be isolated due to compliance requirements
❌ Poor Reasons for New Repository
- “It feels cleaner” - Organization preference without technical merit
- “Different programming language” - Many monorepos successfully handle multiple languages
- “It’s a new feature” - Features should typically be part of existing applications
- “Different team” - Teams can share repositories with proper folder organization using github CODEOWNERS
Step 3: Creating a New Repository (If Justified)
If you have a valid reason from Step 2, create your repository using our template:
Use the Template Repository
- Navigate to datadrivet-template
- Click “Use this template” → “Create a new repository”
- Configure your new repository:
- Owner:
knowit-solutions-cocreate - Repository name: Follow naming convention
datadrivet-[purpose] - Description: Clear description of the repository’s purpose
- Visibility: Private (unless specifically needs to be public)
- Owner:
- Click “Create repository from template”
Initial Setup
After creating from template:
git clone git@github.com:knowit-solutions-cocreate/your-new-repo.git
cd your-new-repo
direnv allow
The template includes:
- Pre-configured
devenv.yaml - SOPS secrets management setup
- Common development scripts
- GitHub Actions workflows
- Pre-commit hooks
Add Team Members
- Each team member follows the Getting Started guide
- Each member generates their age key using
setup-age-key - Add their public keys to
.sops.yaml - Create PR with the new keys
- Admin runs
updatekeysto grant access to secrets - Merge the PR
Step 4: Documentation Requirements
Document your decision in the repository README:
## Why This Repository Exists
**Justification for separate repository:** [Explain which criteria from "Valid
Reasons" above applies]
**Considered alternatives:**
- Adding to datadrivet-infra-opendatastack: [why not suitable]
- Adding to [other-repo]: [why not suitable]
Need Help Deciding?
If you’re unsure whether your project needs a new repository:
- Review existing repositories in Existing Repositories
- Discuss with the Datadrivet team:
- Jimmy Flatting
Remember: When in doubt, start with the existing datadrivet-infra-opendatastack. You can always
refactor later if a genuine need emerges.