This document outlines standards and best practices for managing multiple repositories across Bayat projects. It provides guidelines for ensuring consistency, facilitating collaboration, and maintaining efficiency when working with a distributed codebase.
As projects grow in complexity, they often span multiple repositories. This document addresses the challenges of working across repositories:
- Consistency: Ensure uniform structure and practices across all repositories
- Discoverability: Make repositories and their relationships easily discoverable
- Integration: Facilitate smooth integration between related repositories
- Governance: Manage permissions and access across multiple repositories
- Automation: Standardize CI/CD across repositories
Repositories should be classified based on their relationships:
- Independent: Standalone repositories with no direct dependencies
- Service Group: Repositories that collectively form a service or product
- Library-Consumer: Repositories that consume shared libraries
- Platform-Extension: Repositories that extend a platform
Document repository relationships:
# Related Repositories
## Dependencies
- [shared-lib](https://github.com/bayat/shared-lib) - Core utilities used by this service
- [design-system](https://github.com/bayat/design-system) - UI components
## Related Services
- [auth-service](https://github.com/bayat/auth-service) - Authentication service used by this application
- [data-service](https://github.com/bayat/data-service) - Data processing service
## Extensions
- [plugin-analytics](https://github.com/bayat/plugin-analytics) - Analytics plugin for this platform
Enforce consistent naming across repositories:
- Repository Names: Follow the naming conventions in \1\2)
- Branch Names: Use the same branch naming strategy across repositories
- Tag Names: Standardize version tags to maintain consistency
Maintain consistent structure across related repositories:
- Directory Organization: Use similar directory structures
- Configuration Files: Standardize configuration file locations and formats
- Entry Points: Consistent application entry points and patterns
Apply consistent documentation patterns:
- README Structure: Use a standard README template across repositories
- API Documentation: Document interfaces consistently
- Cross-Repository References: Use absolute links to reference other repositories
Implement synchronized version management:
- Version Alignment: Align version numbers for related components
- Changelogs: Cross-reference changes that affect multiple repositories
- Release Coordination: Coordinate releases of interdependent repositories
Manage changes across repositories:
- Change Impact Analysis: Document cross-repository impact
- Atomic Changes: Group related changes across repositories
- Rollback Strategy: Ensure changes can be rolled back consistently
Streamline cross-repository development:
- Feature Branches: Coordinate feature branches across repositories
- Pull Request Strategy: Link related pull requests
- Review Process: Include context about cross-repository changes
Implement repository discovery mechanisms:
- Repository Registry: Maintain a central registry of repositories
- Metadata Standards: Define consistent metadata for repositories
- Tagging System: Tag repositories by domain, team, and purpose
Standardize CI/CD across repositories:
- Shared Workflows: Use shared workflow templates
- Coordinated Builds: Trigger related builds
- Integration Testing: Test across repository boundaries
Manage cross-repository dependencies:
- Dependency Visualization: Map dependencies between repositories
- Version Constraints: Document version compatibility
- Update Automation: Automate dependency updates
Standardize permission management:
- Role Definitions: Define standard roles across repositories
- Team-Based Access: Organize access by team rather than individuals
- Service Accounts: Use service accounts for automation
Enforce consistent policies:
- Branch Protection: Apply consistent branch protection rules
- Code Owners: Define ownership across repositories
- Security Policies: Implement uniform security practices
{
"repositories": [
{
"name": "user-service",
"url": "https://github.com/bayat/user-service",
"description": "User management microservice",
"owner": "identity-team",
"domain": "identity",
"type": "service",
"related": ["auth-service", "profile-service"],
"dependencies": ["common-lib", "event-bus"],
"consumers": ["web-app", "mobile-app"]
}
]
}
# .github/workflows/cross-repo-pr.yml
name: Cross-Repository Pull Request
on:
pull_request:
types: [opened, synchronize]
jobs:
check-related-repos:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Check for changes requiring updates in related repos
id: check-dependencies
run: ./scripts/check-cross-repo-impact.sh
- name: Notify about cross-repository impact
if: steps.check-dependencies.outputs.has_impact == 'true'
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: 'This PR may require changes in related repositories: ' +
'${{ steps.check-dependencies.outputs.affected_repos }}'
})
- Repository Map: Maintain a visual map of repository relationships
- Onboarding Guide: Create cross-repository onboarding documentation
- Change Templates: Provide templates for cross-repository changes
- Impact Analysis: Require impact analysis for significant changes
- Dependency Checks: Automate checks for cross-repository compatibility
For organizations transitioning to improved multi-repository management:
- Inventory: Catalog all existing repositories
- Classification: Classify repositories by relationship
- Standardization: Apply consistent standards incrementally
- Automation: Implement cross-repository automation
- Documentation: Update documentation to reflect relationships
A reference implementation of these standards is available in the cross-repo-tools repository, including:
- Repository discovery and visualization tools
- Cross-repository CI/CD templates
- Impact analysis scripts
- Dependency management utilities
- \1\2)
- \1\2)
- \1\2)
- \1\2#monorepo-dependency-management)