# Repository Rules
## Branching strategy
### Main Branches
- **`main`**: This branch contains the stable, production-ready code.
Only thoroughly tested and approved changes are merged here.
- **`dev`**: This is the integration branch for features and fixes.
All new development work is merged here before it goes to `main`.
### Supporting Branches
- **Feature Branches**: Used for developing new features.
These branches are created from `dev` and merged back into `dev` once the feature is complete.
- Naming convention: `feature/feature-name`
- **Bugfix Branches**: Used for fixing bugs. These branches are also created
from `dev` and merged back into `dev` after the fix.
- Naming convention: `bugfix/bug-name`
- **Release Branches**: When preparing for a new release, a release branch is created from `dev`.
This branch is used for final testing and minor bug fixes before merging into `main`.
- Naming convention: `release/x.y.z`
- **Hotfix Branches**: For critical fixes that need to be applied to the production code immediately.
These branches are created from `main` and merged back into both `main` and `dev`.
- Naming convention: `hotfix/x.y.z`
### Workflow Example
#### Feature Development
- Create a feature branch from `dev`:
`git checkout -b feature/new-feature dev`
- Develop the feature and commit changes.
- Merge the feature branch back into `dev`:
`git checkout dev && git merge feature/new-feature`
- Delete the feature branch:
`git branch -d feature/new-feature`
#### Release Preparation
- Create a release branch from `dev`:
`git checkout -b release/1.0.0 dev`
- Perform final testing and bug fixes.
- Merge the release branch into `main`:
`git checkout main && git merge release/1.0.0`
- Tag the release:
`git tag -a v1.0.0 -m "Release 1.0.0"`
- Merge the release branch back into `dev`:
`git checkout dev && git merge release/1.0.0`
- Delete the release branch:
`git branch -d release/1.0.0`
#### Hotfix
- Create a hotfix branch from `main`:
`git checkout -b hotfix/1.0.1 main`
- Apply the hotfix and commit changes.
- Merge the hotfix branch into `main`:
`git checkout main && git merge hotfix/1.0.1`
- Tag the hotfix:
`git tag -a v1.0.1 -m "Hotfix 1.0.1"`
- Merge the hotfix branch into `dev`:
`git checkout dev && git merge hotfix/1.0.1`
- Delete the hotfix branch:
`git branch -d hotfix/1.0.1`
## Merge Requests
Merge request must follow the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) naming rules.