Samvera Community Wiki
Solution Bundle and Common Component creation process
The Goals
Share common code quickly and easily
Solution bundles that can lower the barrier for adoption of Hydra
Focus on partner needs first before considering adopters only
In the past, development proceeded by forking common code bases. This worked well for sharing code quickly but when someone wanted to push changes back up the tree and have the changes distributed among the forks it was extremely painful. The problems:
Each fork could have diverged enough away from the core where original features are now different
A patch that is created works for a diverged fork but does not fit in another
Everyone has the same problem but cannot easily use a patch because it must be written for the fork, then for the core, and then modified again to work for every other fork.
A feature that exists in one fork is wanted by everyone else but to adopt it must be rewritten for every single fork
There are many desirable features locked up in multiple Hydra solutions
[Insert pictures of past workflows]
To move away from this it needs to be a multi phase approach:
Identify code and gems you want to share and create common gem:
Integrate gem into destination Hydra Head(s)
Replace source destination code with new gem
Apply patch to common gem that gets shared automatically in Hydra Heads
More detailed list below
Identify existing solutions that contain code that can be transformed into a common module with descriptions
Identify who is interested in working on it and/or is able to work on the common gem
Create common gems (modules)
In existing solution? If yes?
Check test coverage and expand testing as necessary
Extract desired code from existing solution
Transform into common gem
Integrate into new solution
Reintegrate new common gem into source solution
Verify tests pass and still working for source and destination solution
Contribute future changes to common code base
If no?
Create common module that has good test coverage
Create common gem
Start using common gem in solution bundle
Adapt Hydra core to smoothly integrate common components into solution bundles
Identify common modules needed for solution bundles
Assemble solution bundles with existing modules and/or create new modules to complete the solutions
How automatic should this be?
If solution bundles are created how much do we pursue adoption by teams with no development resources? Do we look for some kind of maintenance funding support? Seek sponsors?
Hydra Core solution bundle architecture
(feature gems below not complete or exact list, but just examples illustrating possible architectures).
Phase 1: Simply bundle common gems together in a Hydra Head application - or -
Phase 2: Create an integration layer that plugs gems together on demand. We would need allowable combinations to be tested and stable.
Phase 1
Phase 2?
Create multiple solution bundles using this pattern as turnkey distributables (keep scope within needs of partners)
...
….