I have around 20 different repositories. Many are independent and compile as libraries but some others have dependencies among them. Dependency resolution and branching is complicated.
Suppose that I have a super project that only aggregates all other repositories. It is used exclusively to run tests -- no real development goes here.
/superproject [master, HEAD]
/a [master, HEAD]
/b [master, HEAD]
/c [master, HEAD]
/...
Now, to develop specific features or fixes for each one (a
), especially one of those that require specific versions of projects to compile or run (b v2.0
and c 3.0
) I have to create a new branch:
/superproject [branch-a, HEAD] <-- branch for 'a' project
/a [master] <-- new commits here
/b [v2.0]
/c [v3.0]
For b
, it might be required something else, like a v0.9
and c v3.1
:
/superproject [branch-b, HEAD] <-- branch for 'b' project
/a [v0.9] <-- older version than 'a'
/b [master] <-- new commits go here
/c [v3.1] <-- newer version than 'a'
This becomes even more complex and complicated when implementing common git workflows involving feature branches, hotfix branches, release branches, etc. I was advised to (and advised against) using git-submodules
, git-subtree
, google's git-repo
, git-slave
, etc.
How can I manage continuous integration for such a complex project?
EDIT
The real question is how to run tests without having to mock all other dependent projects? Especially when all projects might use different versions. Trigger Jenkins tests after commits in git submodules