-
Notifications
You must be signed in to change notification settings - Fork 2
UFS Development: Branching and Contributions
The UFS development process is inspired by the Gitflow branching strategy, which provides clear protocols for code management and development work that keep development on track, particularly in a complex forecasting system like the UFS. Within an authoritative repository, Gitflow organizes development using a series of branches with strict functions:
-
develop
: This is the main development branch. All code development uses this branch for syncing and coordination. -
master
/main
: This branch represents the mature part of the code development. It will be either released to the public or put into operations. It is updated less frequently than thedevelop
branch and follows a strict testing protocol before it is updated. -
release
: A release branch is created oncedevelop
branch code is ready to be "frozen" for (a) release to the community or (b) transition to operations. Exhaustive testing is performed on the release branch to discover and correct any bugs. Relevant changes are merged back todevelop
to ensure that bug fixes get back to the main development trunk. -
feature
: Branches where developers work on new functionality and code enhancements (created off of thedevelop
branch). -
bugfix
: Branches that address a problem, or "bug", in thedevelop
branch code. They are fixes to existing functionality rather than new features and are merged intodevelop
once finished and tested. -
hotfix
: Bugfix branches that provide immediate fixes to released code. These branches should be deleted after the code in them is tested and merged back todevelop
/master
/release
branches.
Generally, proposed changes to any branch are reviewed by code managers and merged after an appropriate number of reviewers have provided a favorable review and all required tests have passed.
Contributions to UFS repositories are made via a Fork and Pull Request (PR) model. GitHub provides a thorough description of this contribution model in their Contributing to a Project Quickstart, but the steps, with respect to UFS contributions, can be summarized as:
-
Fork the desired repository into your personal GitHub account.
-
Clone your fork onto your development system.
-
Create a branch in your clone for your changes. Typically, this will be a
feature
,bugfix
, ortext
(documentation-only) branch. -
Make, commit, and push changes in your clone / to your fork.
-
When work is complete, create a pull request to merge your changes into the
develop
branch of the authoritative repository.
For future contributions, developers may delete and then recreate their fork or configure the authoritative repository as a remote repository on their clone and sync upstream changes to stay up-to-date with the official repository.
Note that these are general guidelines for UFS code management. The code management principles for specific repositories are set by the code managers for those repositories, and developers should refer directly to them.
Thank you to the Unified Workflow (UW) Development Team for their summary of the Fork and Pull Request model.
Supported Platforms and Compilers
Development Roles and Processes
Conventions and Policies
Wiki Links
Applications (include workflow)
- UFS Short-Range Weather Application
- UFS Land Data Assimilation System
- UFS Medium-Range Weather Application
Models
- UFS Weather Model
- UFS Subseasonal to Seasonal Model
- UFS Hurricane Analysis and Forecast System Model
Utilities
- spack-stack - builds bundled UFS dependencies
- UFS_UTILS - UFS pre-processing utilities
- UPP - UFS post-processing utilities