Closed szabo137 closed 3 weeks ago
@AntonReinhard @SimeonEhrig what do you think?
Sounds like a working approach
First step completed with https://github.com/QEDjl-project/QEDcore.jl/pull/6
@AntonReinhard Seems like we've done it. Is there anything left over, except releasing?
Yes I think we're done except for all the releases
Thank you very much for your help!
As we discussed offline, we must reorganize parts of the QEDjl ecosystem. Most importantly,
QEDbase.jl
must contain all interfaces used in severalQED.jl
packages. Furthermore, there is a new packageQEDcore.jl
which contains all the core types and functionality (particles, four-momenta, dirac-tensors, etc). Essentially, we move all concrete implementations fromQEDbase.jl
toQEDcore.jl
and ship all interfaces from the downstream packages toQEDbase.jl
.Some pull requests were already opened to reorganize
QEDbase.jl
,QEDcore.jl
, andQEDprocesses.jl
(big thanks to @AntonReinhard). Nevertheless, the procedure of merging is still an open question and seems to be doable, but not straightforward, as discussed offline with @SimeonEhrig.Here I would like to propose an alternative solution to the follow-the-integration-test errors.
Suggested solution
Preparation
Assume, we have a working version of
QEDcore.jl
(sayQEDcore0.1
), depending on the old version ofQEDbase.jl
(sayQEDbase0.1
). This is possible by replacingwhere
AbstractType
andinterface_function
stand for the root types and interface functions of all interfaces.Similarly, in the downstream packages, one can put
QEDbase0.1
besideQEDcore0.1
without breaking the unit tests, by using againimport QEDbase
,QEDbase.AbstractType
, andQEDbase.interface_function
instead ofusing QEDbase
. In this case, usingusing QEDcore
will not break the tests, because the breaking redefinitions still are in theQEDbase
namespace.At this point, one can easily include the integration tests to
QEDcore.jl
without breaking anything.Updates
Now we can update
QEDbase.jl
by removing the core functions (now provided byQEDcore0.1
) and merge the new version (sayQEDbase0.2
) to dev. This must not break the integration tests, because all downstream packages only depend on exported types and interface functions, the core functions are already coming fromQEDcore
. Therefore, one can releaseQEDbase0.2
.Since
QEDbase0.2
is now in place, we can update all the downstream packages (includingQEDcore0.1
) can be updated by bumping the version ofQEDbase.jl
, removing the interfaces now inQEDbase
and revoking the replacementProposed schedule
QEDcore
, add integration tests to `QEDcore, and merge it to dev (using the replacement above), passing all unit tests and all integration tests. This might require several PRs and registration in the local registry.QEDbase
stuff behind theQEDbase
namespace using the replacement above. AddQEDcore
as the dependency, where the core functionality now comes from.QEDbase
by removing core functionality, which is now placed inQEDcore
(must not break anything because of 2.) and adding all interfaces from all downstream packages. This must not break the integration tests. ReleaseQEDbase0.2
.QEDcore
by revoking theQEDbase
-namespace replacement. Must not break the integration tests. ReleaseQEDcore0.1
.QEDprocesses.jl
by revoking theQEDbase
-namespace replacement along with removing the interfaces now inQEDbase
. ReleaseQEDprocesses0.2
QEDevents.jl
by revoking theQEDbase
-namespace replacement along with removing the interfaces now inQEDbase
. ReleaseQEDevents0.1
.QEDfields.jl
by revoking theQEDbase
-namespace replacement along with removing the interfaces now inQEDbase
. ReleaseQEDfields0.1
.Afterwards, all packages are released using the new structure and all integration tests should pass.