- status of all projects can be determined at any point
- experiments are cheap to create, pause, run and stop
- Reproducibility assumes use of pure build system
Top Level Directory
- A system is persisted as a top level git repository with projects as git submodules
- In order to assure reproducibility, the following must be included:
- specification and implementation of integration processes
- system specific process code
- project specific integration code
- generic integration code
- a pure representation of third party dependencies
In all cases:
- master is production quality
- release is what is in production
- dev contains unverified changes
- master branch
- all project submodules have SHAs equal to tip of project's master branch
- all project submodules have SHAs equal to tip of project's release branch
- no constraints on project submodule SHAs
Developers rarely update the Top-Level repository directly. The integration process should manage commits to this repository.
A Project Repository
No constraints on repository format.
- release branch is not (easily) modifiable.
- master branch is modifiable
- dev branch is freely modifiable
- all first-party or forked-third party projects are listed in the "dependencies" folder
- each dependency is a symbolic link to the submodule in the Top-Level repository.
Develop in Projects
In the standard case the developer is in the "dev" branch of the Top-Level repository.
For a given development task:
- state project of interest. system processes assure:
- system state is synced
- project of interest is synced
- project dependencies are synced
- (changes in release patches are merged in)
- modify project of interest.
- test changes if desired
- commit modified projects.
- push changes
Performed on branch being integrated into:
- sync system graph
- propose merge into master:
- for each modified project topologically sorted:
- merge to proposed master
- perform project verification
- on all pass:
- commit merge of each project
- commit merge of system
system of actors:
- responsible for integrations to a branch of system state
- system state changes
- merges from target branch
- commits to source branch
- user commands
- system state changes
- actor state
a single git repository "projects". Containing: