Skip to content

Rethink CCPP framework development cycle and branch structure #553

@peverwhee

Description

@peverwhee

Summary

Now that feature/capgen has been merged into main, we have the opportunity (and perhaps necessity) to change the development cycle to:

  1. Speed up the development process;
  2. Ensure changes do not break UFS or CAM-SIMA (or any future host model who wants to use the framework and is willing to put in the resources to consistently test it); and
  3. Make the framework more accessible to other potential partners/users.

NCAR Wish List

  1. Tags for PRs merged into main and proposed development branch; this ensures that older versions of CAM-SIMA will be stable and new updates can be fully tested before being integrated.
  2. Some way to get quick bug fixes into the framework’s (proposed) development branch if necessary (possibly skirting the full UFS or CAM-SIMA testing cycle on occasion if deemed necessary)
  3. No long-lived branches dedicated to specific host applications, due to concerns that this may cause the framework to dis-unify as hosts add features that work for that particular host model but not the other CCPP-enabled host models.

Proposal

  • New “development” branch that is merged into main on some regular schedule (during which time the full UFS, CAM-SIMA, etc. testing suite is run by the maintainers of those models)
    • The development branch will still require unit tests and potentially a subset of host model regression tests to pass before accepting a PR, to ensure no major failure occurs while still allowing for a relatively rapid response to PRs.
  • Framework development branch is tagged when minimal testing completed
    • Host models may use development tags, but should be aware that full testing has not been completed
  • Framework main branch is tagged when all host model and UFS testing completed
    • Host model will use release tags whenever possible

“Regular” workflow:

  1. New framework feature developed (“feature/new” in diagram)
  2. feature/new merged into framework development branch (passed minimal testing)
  3. Tag (ccpp_dev_tag_3 in diagram) made for new feature on development branch
  4. Tag tested in host model development branch
  5. Testing identified bug; bugfix branch created for CCPP-framework
  6. Bugfix merged into framework development branch (passed minimal testing)
  7. Tag (ccpp_dev_tag_n in diagram) made for bugfix
  8. Bugfix tag tested in host model development branch
  9. Host model A testing passed
  10. Host model A can use "ccpp_dev_tag_n"
  11. Framework development merged into main after complete testing suite performed - NCAR and UFS testing (merged at regular cadence)
  12. Framework release tag made
  13. Host model release branch made
  14. End result: host model release branch points to framework release tag

proposed_framework_development_workflow

Metadata

Metadata

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions