Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Separation between master (default) and develop branch #14

Closed
jamal919 opened this issue May 4, 2020 · 7 comments
Closed

Separation between master (default) and develop branch #14

jamal919 opened this issue May 4, 2020 · 7 comments

Comments

@jamal919
Copy link
Member

jamal919 commented May 4, 2020

In the SCHISM repo, all new modifications are added to the master branch directly (like svn). As master branch is also the default branch. It means anytime someone is trying to use the model - she/he will get a different version of the code for each git clone command.

In many other community model I have noticed that they manage a so called develop branch for continuous integration of the new developments and keep the master branch frozen till the next release. For example NOAA-WW3 model - https://github.com/NOAA-EMC/WW3

Given the user community of SCHISM is growing out from modellers to users, I propose that after the next big release, we also reorganize the development in this fashion so that the typical git clone command yields the same version of code (effectively last release version till then) until the next release comes out.

@brey
Copy link
Contributor

brey commented May 4, 2020

I agree with @jamal919 that having tagged versions (or releases) is important in reproducibility of runs based on SCHISM. Also, in operational settings, a frozen version could be implemented for a long time before various tests and hindcasts allow for an update. The way it is now, one has to tag their forks themselves which could create confusion.

As Joseph mentioned, if the code is indeed functional at any given time, then you should create occasional releases referencing the corresponding new features.

@water-e
Copy link

water-e commented May 4, 2020

I agree with the issue, but I think we have all the plumbing to so this. Perhaps we could get a start on this by getting a release branch done within 2 days?

There is no need for a change in branch strategies just for stable releases. The strategy we originally vetted, Trunk Based Development (see trunkbaseddevelopment.com) is really fine for that as long as it is fully utilized.

A "stable release" in the TBD model is done in two steps. First, you create a release branch every once in a while and the feature set and interface is frozen but perhaps still honed for a bit. The release branch is a space for curators and maintainers, not for the main development. The release branch is also not a complete release, but rather a "parent" of releases -- it has only the major and minor version number, e.g. 5.9. The actual releases are tags (5.9.0, 5.9.1 etc) are made off this branch. Risky dev continues on master and any bug fix in master that are worthy get an isolated commit and are cherry-picked to the release branch. Release branches are never folded back in to master, and that is their key virtue ... you aren't developing things that require reintegration.

There are other branching styles (checkout GitFlow, GitHubFlow, Trunk Based Development and Branching By Abstraction). The one usually associated with 'develop' is GitFlow. GitFlow is considered the most complex, and that isn't necessarily a good fit for our culture, but I say that in some ignorance ... I have limited experience with one project where it worked out fine but there was someone collecting $100K per year to make it work.

@jreniel
Copy link
Member

jreniel commented May 4, 2020 via email

@water-e
Copy link

water-e commented May 4, 2020

This is a good point, but a tag is almost like a hash ... Jaime pointed out it is really a commit an mutable, but this is esoteric compared to our current woes. At DWR we like having the occasional anointed version number we could describe over the phone, although there are times we've saved ourselves with a full hash when it wasn't a tag and you don't have to have the agreement of the community. Plus it is perfectly unambiguous.

There are good reasons for semantic version numbers. I like knowing the sequence of tags 5.10.1, 5.10.2 is a "feature frozen" set and hashes, while great as ID numbers, don't convey organization of the work.

@jreniel
Copy link
Member

jreniel commented May 4, 2020 via email

@jamal919
Copy link
Member Author

jamal919 commented May 7, 2020

Thanks all for participating in this discussion. I am happy with the direction we are going finally adopting a branching strategy for named versions. Since Joseph just posted the v5.8 branch, I will consider this issue to be resolved and close it. Thanks again to all.

@jamal919 jamal919 closed this as completed May 7, 2020
@josephzhang8
Copy link
Member

josephzhang8 commented May 7, 2020 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants