Skip to content

Automation

Dan Ibanez edited this page Aug 30, 2016 · 5 revisions

Our automation system attempts to balance multiple needs:

  1. Provide developers with minimal workflow restriction
  2. Ensure personal copies are merged to a central location
  3. Ensure users receive stable software
  4. Ensure our public and private versions are well coordinated

The software repository setup is as follows:

  1. Each repository has exactly two branches: master and develop.
  2. All developers can modify the develop branch at will, without restriction.
  3. No developer may directly modify the master branch.
  4. Every day, an automated process will perform regression tests on both branches, and post the results online.
  5. Every day, an automated process will merge all changes from the develop branch to the master branch if and only if the resulting master regression tests pass.
  6. Specific to SCOREC software, an automated process will merge all changes from the open-source master to the private master, if and only if the private regression tests pass.
  7. A select group of owners may modify master for the limited purposes of repairing the automated system, and repairing merge conflicts from the open-source to the private repository.

The following image illustrates the system:

AutoMerge

This system maintains substantial freedom:

  1. There is no barrier to pushing changes to develop, encouraging most work to be done directly in develop.
  2. Merges are automated, not manual, so there is no need to depend on someone's availability (or subjective judgement) to merge code.

The system also maintains high stability:

  1. It should be nearly impossible for the master branch(es) to fail regression tests at any time.
  2. The only way to get one individual's changes accepted into master is to ensure they are compatible with changes by other developers.
  3. The way to ensure the master branch behaves a certain way is to set up an automated regression test for it.

By default, most work should be pushed to develop. Forks and other branches can still be maintained for serious refactoring, with conscious awareness that each day a version remains separate decreases its probability of survival via merging.

Clone this wiki locally