Contributor and Development Docs
Get started
- Set up GitLab's development environment with GitLab Development Kit (GDK)
- GitLab contributing guide
- Architecture of GitLab
- Rake tasks for development
Processes
- GitLab core team & GitLab Inc. contribution process
- Generate a changelog entry with
bin/changelog
- Code review guidelines for reviewing code and having code reviewed
- Database review guidelines for reviewing database-related changes and complex SQL queries
- Pipelines for the GitLab project
- Guidelines for implementing Enterprise Edition features
- Security process for developers
- Requesting access to Chatops on GitLab.com (for GitLabbers)
- Danger bot
UX and Frontend guides
- GitLab Design System for building GitLab with existing CSS styles and elements
- Frontend guidelines
- Emoji guide
Backend guides
- GitLab utilities
- Issuable-like Rails models
- Logging
- API styleguide Use this styleguide if you are contributing to the API
- GraphQL API styleguide Use this styleguide if you are contributing to the GraphQL API
- Sidekiq guidelines for working with Sidekiq workers
- Working with Gitaly
- Manage feature flags
- Licensed feature availability
- View sent emails or preview mailers
- Shell commands in the GitLab codebase
Gemfile
guidelines- Pry debugging
- Sidekiq debugging
- Accessing session data
- Gotchas to avoid
- Avoid modules with instance variables if possible
- How to dump production data to staging
- Working with the GitHub importer
- Import/Export development documentation
- Elasticsearch integration docs
- Working with Merge Request diffs
- Kubernetes integration guidelines
- Permissions
- Prometheus metrics
- Guidelines for reusing abstractions
- DeclarativePolicy framework
- How Git object deduplication works in GitLab
- Geo development
- Routing
- Repository mirroring
- Git LFS
- Developing against interacting components or features
- File uploads
- Auto DevOps development guide
- Mass Inserting Models
- Cycle Analytics development guide
Performance guides
- Instrumentation for Ruby code running in production environments
- Performance guidelines for writing code, benchmarks, and certain patterns to avoid
- Merge request performance guidelines for ensuring merge requests do not negatively impact GitLab performance
- Profiling a URL, measuring performance using Sherlock, or tracking down N+1 queries using Bullet
Database guides
Tooling
- Understanding EXPLAIN plans
-
explain.depesz.com for visualising the output
of
EXPLAIN
- pgFormatter a PostgreSQL SQL syntax beautifier
Migrations
- What requires downtime?
- SQL guidelines for working with SQL queries
- Migrations style guide for creating safe SQL migrations
- Testing Rails migrations guide
- Post deployment migrations
- Background migrations
- Swapping tables
- Deleting migrations
Debugging
- Tracing the source of an SQL query using query comments with Marginalia
Best practices
- Merge Request checklist
- Adding database indexes
- Foreign keys & associations
- Single table inheritance
- Polymorphic associations
- Serializing data
- Hash indexes
- Storing SHA1 hashes as binary
- Iterating tables in batches
- Ordering table columns
- Verifying database capabilities
- Database Debugging and Troubleshooting
- Query Count Limits
- Database helper modules
- Code comments
- Creating enums
Case studies
Integration guides
Testing guides
Documentation guides
Internationalization (i18n) guides
Event tracking guides
Experiment Guide
Build guides
Compliance
- Licensing for ensuring license compliance