Hi @fedorov ,
When using ctest
and CDash
to build a single project, this work our of the box.
The challenge here is that we conveniently centralize the configure/build/test of more than hundred of projects.
You will find below comments and idea I came up with while looking at the current system
in a nutshell
… the extension build system is doing the following:
- Discover and parse all extension description files
- Sort extension topologically based on dependency information
- Add one external project per extension with associated dependency information (this allow to support parallel build): This is used to download the source code and build the project.
The external project is added here.
way forward
The idea is to have for every extension build, repository information send along the configure/build/test restults. This should allow to associate together new configure/build/test error or warning with a given revision of the code.
To support this, I think we need to:
- keep around the extension source directory between successive builds
- ensure that the command ctest_update is called.
Do we need to keep extension source checkout around between build ?
Say differently, how does CTest/CDash find out the diff associated with two consecutive configure/build/test ?
Note 1: the diff is important to know as it allows to find out the list of authors who potentially introduced warnings/errors/failures/… and later notify them.
Note 2: the extension sources are checked out cleanly every night, we are currently not keep source trees around. The only source tree we currently keep around it the one associated with the ExtensionsIndex
The answer to this question will help us move forward and decide what are the steps.
case 1: if the answer is no
This means that CDash can compute the diff on its his own by only using the build name and repository name.
In that case, it may be as simple as adding the ctest_update
call between these two calls:
intuition: I doubt this is the case, I will confirm this with the CDash development team.
case 2: if the answer is yes
This means that the diff is generated locally by using the call to ctest_update
In that case, I think more changes would be involved:
We need to:
- update the system to keep
extension source checkouts
outside of the extension index build tree
- use
ctest_update
to update the checkout instead of teaching ExternalProject how to do it. The code used to setup the download command is here
Setting either CTEST_GIT_UPDATE_OPTIONS or CTEST_GIT_UPDATE_CUSTOM should help checking a specific branch or commit.
i also suggest we transition all remaining extensions from svn to git, and only support git. That would help simplify the system.