Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Updates BuildBot, now links to GH

"Being a committer does not [only (wink)] mean you commit code, it means you are committed to the project."

Info
titleRepositoy structure

After the svn tag "beforeSvnRestructuring" the repository structure has changed, please refer to history for information before this tag

...


Table of Contents

The committers of OFBiz are a core group of developers those contributors who have the ability to commit changes into the OFBiz source code repository. As the project has grown over the years, there have been more committers of projects, so we thought it would be a good idea to define what the roles and responsibilities of the committers are. These points below are based on discussions we recently had on the developers' list:

...

Info
titleCommitters responsibility

The OFBiz project will next release 2 products: the framework (which for now includes applications) and the plugins. It is the responsibility of committers to maintain both products. So committers should checkout the framework and include the plugins using the Gradle pullAllPluginsSource.

It is the also responsibility of committers to help fellow contributors to achieve a successful resolution of issues in JIRA.

Committers should try, as much as possible, to avoid that patch files submitted to issues grow stale. It is a waste of effort and precious time on the part of a fellow contributor when patches grow stale, as rework needs to be done. Timely evaluation of patch files prevents the need for rework and re-evaluation. Showing interest in the work of fellow contributors builds better relationships and a healty community.

When doing so, an efficient rule of thumb for productivity is the Ten minutes rule: if you can commit a patch in less than 10 minutes then just do it! Of course not don't do that all the day long. (wink)

Another important responsibility of a committer is participating in voting, especially the ones for new releases..

...

  1. Use a SVN 1.8 or newer client. Because we use repo dictated configCommitters should set up their SVN client to use and no longer need the official OFBIZ Subversion client configuration file
  2. Committers should review contributions to ensure that they follow good coding standards, are well-commented and understandable, and follow our coding conventions
  3. , at least for OFBiz (you might need it for other purposes...)
  4. When a committer adds a new file type, it must be put it as a svn:auto-prop at the OFBiz root level in ASF Subversion repo. Here is a commit example: http://svn.apache.org/viewvc?view=revision&revision=1840885
  5. Committers should review contributions to ensure that they follow good coding standards, are well-commented and understandable, and follow our coding conventions
  6. The commit message should follow the general Commit message template.
    1. Committers should write a meaningful description of the feature being committed in the commit log so other developers and committers could understand what is happening.

      Note
      titleHere are some commit comments examples of badness taken from an Adam's message in dev ML
      • Fixed bug (reported by $user)? from $location.
        When reading history, the full discussion leading up to a proper bug fix is not important. But a description of the bug, and the solution, are necessary.
        Quite often, when trying to find a bug, the original sources are not available. All you have at your disposable is the installed system image. The changelog describing the software installed
    The commit message should follow the general Commit message template.
    1. Committers should write a meaningful description of the feature being committed in the commit log so other developers and committers could understand what is happening.

      Note
      titleHere are some commit comments examples of badness taken from an Adam's message in dev ML
      • Fixed bug (reported by $user)? from $location.
        When reading history, the full discussion leading up to a proper bug fix is not important. But a description of the bug, and the solution, are necessary.
        Quite often, when trying to find a bug, the original sources are not available. All you have at your disposable is the installed system image. The changelog describing the software installed very often accompanies the installation. It's quite possible that no outside access is available. Embedded system deployments do this quite frequently.
        When scanning a changelog for possible hints into why something is/isn't working, if I have to switch back and forth from the target system, and an external system, to figure out what is going on, then it will leave a sour taste in my mouth. Going forward, I would be reluctant to recommend the software again.
        Additionally, no one is you. There are 6 billion other people on this planet, and you are the only one who knows what you are thinking. We can't read minds. It becomes even more difficult to do so, 2-3(or more) years in down the road. So, describe what you have done at the time you have done it.
        Also, not everone knows how jira works. Or confluence. Or AutoConfigMaintenceWidgetApplication. What you may thing as a sensible cross-reference(OFBIZ-####, debbugs ####) may mean nothing to the person reading your changelog.
      • I did some things in FooClass, FooImpl, some more stuff in BarWidget, and yet more interesting tidbits in YellowSubmarine; basically, stuff all over the place.
        This bad changelog is not about poor descriptions of the changes. It's about listing multiple, 100% completely separate improvements/fixes into a single commit.
        If there were 10 lines changed, and 1 line was not related, it's possible that you could still notice that 1 extra line. But if you have 1000 lines changes, and there are 3 groups of changes, and they are all intermingled, it becomes very difficult to verify that each separate change was actually implemented correctly.
        It's much better to split up such changes, and commit them separately. There are several ways to do this. svk/hg/git can be used to mirror svn, have local changes, then push when you are done. You can use multiple svn checkouts, and redo your changes, one step at a time.


Warning
titleNo patches when moving files

Patches should never be used to move files. The diff and patch commands (even "svn di" and "svn patch") are unable to keep the information about moved files, only deleted and created.

So we must not apply patches with files relocations. We not only lose history when doing so, but also annotations

...


All committers must do the following to ensure licensing compliance

...

  1. Only bugfixes should be backported to active release branches (if they happen also there).
  2. Bugfixes should be backported by the committer who did the bugfix in trunk, if possible.
  3. If the committer does not, for an a reason, backport the bugfix, he should leave the original issue open with a remark that a backport is needed and a short explanation why he does not do the backport.
  4. Issues which that need a back port backport should be labelled as "back portbackport-needed". In this way we are able to spot issues to be backported, especially before a release is on it's way. 
  5. In no case should the Jira issue be closed without doing 1. or 2.
  6. When you backport something, if you know that it should not be backported in older releases, please pass the information.

 

Christian Carlow asked

Should committers download the entire ofbiz repository to help with backporting?

...

ofbiz/
ofbiz/trunk
ofbiz/release14.12
ofbiz/release13.07
ofbiz/release12.04
ofbiz/site

...


Is there a standard procedure new committers should follow for backporting?

 


Here is a simple workflow to backport a commit to a branch. 

...

Handling deprecated services

We tag code deprecated deprecated services as a part of a release and  these code branch using the "<deprecated" element. Deprecated services will be removed from the next release branch when this new branch is created.

Lets say we set Release 17.XX a service as deprecated for a service, this service  for release branch R18. This service will be part of Release17.XX R18 and will be removed in next Release 18.XX
Imagine we are the 30 december 2019 and we next release branch R19.

For instance, imagine we decide to create a new releasenext to be released R19 branch.
We have on trunk :

  • addCatalogMember deprecated since="next releaseUpcoming Branch"
  • deleteWorkEffortAssignment deprecated since="18.12"

We prepare When we create the R19 release branch, we have change on trunk :

  • addCatalogMember deprecated since="19.12xx"
  • deleteWorkEffortAssignment deprecated since="18.12"

We create the stable branche, and after clean the trunk. Now on trunk we have Before creating the new R19 branch we remove the services deprecated since R18. So the trunk contains only:

  • addCatalogMember deprecated since="19.12xx"

On this basis we create the R19 branch.

An so on...

Following changes

...

Please take the time to correctly fill the different Jira fields we now use for our releases change logs.

  • Specifiy in Resolution :
    • Improvements : use either Done or Implemented Status as you feel right
    • New features : use the Implemented Status
    • Bug : use the Fixed Status
    • Of course you might also use other status (like duplicate, won't fix, invalid, etc.) when needed...

 

  • Specify in the Fix Version/s the codebase(s) to which you have committed the patch/fix :
    •  you can select from the dropdown one or more of the items under the "Unreleased Versions" group in the top part of the drop down box;
    •  you should never use one of the items in the "Released Versions"  section (bottom part);
    •  if the commit is only done (ie not backported) on "Trunk" then select "Upcoming Release";
    •  if you are backporting/committing to a release branch then select the latest (next) release version in that branch available in the dropdown. No needs then to put also "Upcoming Release", it's implied.

For example at the moment the valid items for the Fix Version/s field are :

  • 16.11.02 (for commits to the branch named release16.11)
  • Upcoming Branch (only for commits only done to trunk, ie when not backporting)
  • Priority: much of the time you can pick what seems to fit. Beware that the default is Major and it does not always fit. As a committer don't hesitate to change the priority if it was set by a contributor and does not respect the rules below.
    • The Blocker priority can be used when something really blocks OFBiz to start, so it should rarely be used. There are certainly other cases where it can be used, notably when an issue blocks a release.
    • Critical - A feature of critical importance is faulty. A workaround is possible, or a quick fix could be applied after release. While you usually would not release with a critical fault present, it's conceivable.

  • Specifiy in Resolution :
    • Improvements : use either Done or Implemented Status as you feel right
    • New features : use the Implemented Status
    • Bug : use the Fixed Status
    • Of course you might also use other status (like duplicate, won't fix, invalid, etc.) when needed...
  • Specify in Affects Version/s: pick the version/s which is/are affected
  • Specify in the Fix Version/s the codebase(s) to which you have committed the patch/fix. Please don't set the "Fix Version/s" before closing, only the "Affects Version/s".
    •  you can select from the dropdown one or more of the items under the "Unreleased Versions" group in the top part of the drop down box;
    •  you should never use one of the items in the "Released Versions"  section (bottom part);
    •  if the commit is only done on "Trunk" (ie not backported) then select "Upcoming Release". For an improvement or a new feature only the "Upcoming Release" version must be used because it's the only possibility offered to you. I think it's good to set even before closing so that nobody will use a wrong version there see this thread;
    •  if you are backporting/committing to a release branch then select the latest (next) release version in that branch available in the dropdown. No needs then to put also "Upcoming Release", it's implied.

For example at the moment the valid items for the Fix Version/s field are :

  • 16.11.05 (for commits to the branch named release16.11)
  • 17.12.01 (for commits to the branch named release17.12)
  • Upcoming Branch (only for commits only done to trunk, ie when not backporting)
Info
titleClosing issue
As per our conventions, when the reporter or the assignee, or even another person who has reviewed, decides the issue is implemented, done or fixed (or any other resolution type) the issue should be CLOSED.


After some time the following Jira reports will contain very useful information :

...

Using Buildbot

Here is a small documentation whith most aspects to know

Code of conduct

The ASF has a Code of conduct, it's good to know and remember it. Though for miscellaneous reason you become a committer for life, please note this:  "When somebody leaves or disengages from the project they should tell people they are leaving and take the proper steps to ensure that others can pick up where they left off."