Comments (6)
Hi @mkavulich et al., after discussion from the group here at NCAR/CGD, we just wanted to share our overall thoughts:
-
As mentioned in previous meetings, our biggest fear is needing a critical bug fix for some release version of a host model, and then having that be postponed for weeks or months because the PR is waiting on testing from all of the participating host models. Right now, the UFS is the only host model doing offline testing that could hold up a PR, but in the future a PR could be held up by CAM-SIMA testing as well.
One way to avoid this problem is to simply ensure that all testing of the main branch is done within a certain time period (which is easily done if everything is automated), or, if that isn't doable, that PRs can occasionally be labeled "urgent" and fast-tracked within each host model's testing workflow.
However, if speeding up testing (or at least ensuring a hard timeline) isn't feasible, then we'll basically have to have more than one branch, with main still being the branch that has the most rigorous testing (i.e. every participating host institution signs off).
It should also be noted that the overall testing burden will likely continuously increase as more host models add their own required tests to the main branch, so this may become a problem in the future even if we greatly improve our efficiency for the current set of tests. -
Adding new branches/forks for each host model is certainly feasible, but our concern is that it will quickly lead to code divergence, especially if host models find that there isn't really a good reason to push certain features back to main (e.g. "This feature will only ever be used in our host model, so no need to push it back").
Also I think it's important to note that the CCPP-framework arguably shouldn't follow the organization of CCPP-physics. Host models will always have particular science goals or objectives that may cause their physics schemes to be specific to a particular host institution (even if they are still inter-operable from a CCPP software standpoint). However, the goal of the framework is that all host models are using literally the exact same framework code. If we collectively end up using both different physics AND different frameworks then I think the core goal of interoperability will become almost impossible.
-
On the other hand, having a development branch within the NCAR/CCPP-framework repo will both reduce the risk of code divergence and allow for hashes/tags to be created without necessarily waiting for testing from every host model (while still doing at least some minimal testing via the current automated testing system we have now).
Having a development branch may occasionally cause noticeably difficult merges, especially if development is moving quickly, but to be honest the current workflow of only having main will have the exact same problem, as will having separate branches or forks whenever they are synced to main. In other words, I don't think there really is a way to avoid that particular problem.
Given this, assuming there is no way to significantly speed up testing, we are leaning towards having a shared development branch. Of course we are always happy to discuss this further if folks still have concerns. Thanks!
from ccpp-framework.
I like this. The development branch should be named develop
following standard practices.
from ccpp-framework.
This all seems sensible to me, but isn't the governance of development outside of "main" none of our business?
from ccpp-framework.
After further discussion at the framework meeting (see Meeting Minutes for details), we have three options:
- Some version of what is proposed in this issue: a shared "develop" branch that is merged into "main" with some regular cadence
- Separate develop branches for each host model
- Status quo - main branch only
In an effort to keep track of people's ideas, I've started a pro/con chart here. I have populated it with themes and ideas I pulled from our meeting, but feel free to edit with your thoughts. I will post a screenshot of the final list here in this issue when we're "done" for record-keeping; here's what it looks like now:
from ccpp-framework.
@peverwhee Thanks again for listing this all out and organizing the pros and cons. After some time to digest the topic, I've come up with some (mildly rambly) thoughts:
Off the bat, I am leaning towards solution 2 (separate branches for each host model). Specifically, a modified proposition that would use forked repositories rather than simple branches within the main repository: this would bring ccpp-framework more in line with how ccpp-physics is handled, and would allow CESM/SIMA and other individual projects to work at their own development pace and only take contributions from the main branch/repository when they are ready.
My reason for wanting forks is that this will allow for issues and PRs specific to each dycore to be appropriately separated so that A. Issues and PRs will be seen more easily by the people most able to fix them, and B. The main repository will remain less cluttered and easier to maintain.
In order for this to actually work, we would need buy-in from all groups maintaining forks that
- They will follow all CCPP standards in their fork as defined in the CCPP Technical Documentation
- They will run all tests from the main branch on their own fork on a regular basis (preferably these would pass for all changes) and
- They will offer in-kind help to ccpp-framework code managers for any trouble merging changes to the main branch, and make reasonable efforts to adopt any requested changes from ccpp-framework code managers.
As a counterpoint to the testing requirements from the main branch, groups with forks would also have the right to insist on any tests they require being run on all development to the main branch. In fact, the more automated testing at more steps, the better!
As for what kind of cadence to merge changes back into the main repository, I don't really know what makes sense.
from ccpp-framework.
Updated pro/con list with contributions from @mkavulich
from ccpp-framework.
Related Issues (20)
- ccpp_prebuild: (re-)introduce optional attribute
- Update CCPP tech doc: pointer variables are not allowed in CCPP-compliant parameterizations
- Remove run phase requirement from capgen HOT 5
- Update CCPP tech doc: schemes can currently have optional arguments in between regular arguments - follow up with moving opt args to the end HOT 1
- Follow up on formatting discussions in https://github.com/NCAR/ccpp-framework/pull/529
- Post capgen unification: pylint code HOT 3
- VarDictionary doctests broken for python3.12
- Suite-level variables edge case for when variable is used only in run phases HOT 1
- Add "number of instances" dimension to module-level variables to support multi-instance usage HOT 1
- Create citation file for Zenodo DOI
- Complete implementation of optional arguments / active variables in capgen
- Edge case for "none" unit conversions
- Remove requirement that suite files begin with "suite_"
- Need mechanism to support equivalent units HOT 2
- Add new "register" phase HOT 1
- Implement new constituent property/field to track "above the top of model" values
- Standardize ordering of ccpp_error_code and ccpp_error_message HOT 2
- Use absolute paths to dependency source code files HOT 1
- Concatenate errors found during parsing
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from ccpp-framework.