|
|
# Code Development
|
|
|
|
|
|
## Repository Structure
|
|
|
There are 4 main branches
|
|
|
- release: latest code release
|
|
|
- master: code updates since the last release, should always be runnable/stable code, e.g. could be used in production
|
|
|
- develop: current developments, waiting to be pushed into the master
|
|
|
- foundation: mirror of the latest Foundation master branch merged from upstream
|
|
|
There main branches are:
|
|
|
- `release`: latest code release
|
|
|
- `master`: code updates since the last release, should always be runnable/stable code, e.g. could be used in production
|
|
|
- `develop`: current developments, waiting to be pushed into the `master`
|
|
|
|
|
|
## Workflow
|
|
|
Create a tracking branch to track the 'develop' branch if not already available:
|
|
|
- git branch develop --track remotes/origin/develop
|
|
|
## Prerequisites
|
|
|
If not already installed, download the OpenFOAM-plus and ThirdParty-plus repositories to your local OpenFOAM installation directory:
|
|
|
|
|
|
```
|
|
|
cd ~/OpenFOAM
|
|
|
git clone https://develop.openfoam.com/Development/OpenFOAM-plus.git
|
|
|
git clone https://develop.openfoam.com/Development/ThirdParty-plus.git
|
|
|
```
|
|
|
All new features should target the `develop` branch. To set-up your environment, start from the `develop` branches inside both the main code **and** third-party repositories, e.g. to create local `develop` branches in each repository that track the `develop` branches from upstream at https://develop.openfoam.com
|
|
|
```
|
|
|
cd ThirdParty-plus
|
|
|
git checkout -b develop --track remotes/origin/develop
|
|
|
|
|
|
cd ../OpenFOAM-plus
|
|
|
git checkout -b develop --track remotes/origin/develop
|
|
|
|
|
|
All new code/features/bug-fixes should be created on their own branch, e.g. starting from the develop branch
|
|
|
- git checkout develop
|
|
|
```
|
|
|
|
|
|
Create and move to a new branch
|
|
|
- git checkout -b feature-ABC (or git checkout -b bugfix-ABC etc)
|
|
|
|
|
|
## Workflow
|
|
|
All new code/features/bug-fixes should be created on their own branch, e.g. starting from the `develop` branch
|
|
|
```
|
|
|
git checkout develop
|
|
|
```
|
|
|
Create and move to a new feature branch `feature-ABC`
|
|
|
```
|
|
|
git checkout -b feature-ABC
|
|
|
```
|
|
|
or a bugfix branch `bugfix-ABC`
|
|
|
```
|
|
|
git checkout -b bugfix-ABC
|
|
|
```
|
|
|
Add functionality in the usual way, e.g. adding and committing code changes.
|
|
|
|
|
|
|
|
|
### Submitting for code review
|
|
|
When ready for review, push the branch upstream
|
|
|
- git push -u origin feature-ABC
|
|
|
|
|
|
On logging in to this service, you will be able to submit a merge request, and assign a user from the list of developers. Most merge requests will target the develop branch, unless e.g. hot-fixes which will target the master branch directly.
|
|
|
```
|
|
|
git push -u origin feature-ABC
|
|
|
```
|
|
|
On logging in to this service, you will be able to submit a merge request, and assign a user from the list of developers. Most merge requests will target the `develop` branch, unless e.g. hot-fixes which will target the `master` branch directly.
|
|
|
|
|
|
### Direct addition to the repository
|
|
|
If no code review is required, the feature branch can be merged in the local repository directly and pushed upstream to the relevant branch, e.g.
|
|
|
- git checkout develop
|
|
|
- git merge feature-ABC
|
|
|
If you have the necessary permissions and no code review is required, the feature branch can be merged in the local repository directly and pushed upstream to the relevant branch, e.g.
|
|
|
```
|
|
|
git checkout develop
|
|
|
git merge feature-ABC
|
|
|
```
|
|
|
|
|
|
If the branch is no longer needed, delete it!
|
|
|
- git branch -d feature-ABC
|
|
|
```
|
|
|
git branch -d feature-ABC
|
|
|
```
|
|
|
|
|
|
|
|
|
## Code Merging
|
|
|
Periodically when code in the 'develop' branch is stable, merge the develop branch into the 'master' branch. Similarly, the 'develop' branch will be updated from the 'foundation' branch. |
|
|
\ No newline at end of file |
|
|
The `master` branch should only be updated by features that **do not break backwards compatibility with the latest release** typically comprising bugfixes, and occasional small/modular components that are near *release-ready*. All new capabilities should reside on their own branch until ready to be merged into the `develop` branch. At release the `develop` branch is frozen and tested prior to merging into the `master` branch. |