Nightly build TESTS failing for extensions with dependencies to other scriptable modules

Thanks for the fix, Andras!

Seems like mpReviews CMake can now find SlicerDevelopmentToobox, after I added the line yesterday, but the tests are still failing

http://slicer.cdash.org/testDetails.php?test=8435164&build=1133229

When loading module  "mpReview" , the dependency "SlicerDevelopmentToolbox" failed to be loaded.

Look like the edit you are mentioning are not yet integrated: SlicerDeveloperToolsForExtensions/CMakeLists.txt at master ¡ Slicer/SlicerDeveloperToolsForExtensions ¡ GitHub

i suggest you submit a PR against SlicerDeveloperToolsForExtensions and then update the Extension index.

I was not talking about the repository that you were mentioning. I am talking about SlicerDevelopmentToolbox and not about SlicerDeveloperToolsForExtensions

Sorry for the confusion.

Good new is that the additional settings contain the dependent extension paths.

That said, we still need to investigate the remaining issues.

kitware@factory-south-ubuntu:~/Dashboards/Nightly/S-0-E-b/mpReview-build$ cat AdditionalLauncherSettings.ini
[General]
additionalPathVariables=PYTHONPATH

[LibraryPaths]
1\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/cli-modules/.
2\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/qt-loadable-modules/.
3\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/cli-modules/.
4\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/qt-loadable-modules/.
size=4

[Paths]
1\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/cli-modules/.
2\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/bin/.
3\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/cli-modules/.
4\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/bin/.
size=4

[EnvironmentVariables]




[PYTHONPATH]
1\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/qt-scripted-modules
2\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/qt-loadable-modules/.
3\path=/home/kitware/Dashboards/Nightly/S-0-E-b/mpReview-build/lib/Slicer-4.9/qt-loadable-modules/Python
4\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/qt-scripted-modules
5\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/qt-loadable-modules/.
6\path=/home/kitware/Dashboards/Nightly/S-0-E-b/SlicerDevelopmentToolbox-build/lib/Slicer-4.9/qt-loadable-modules/Python
size=6

Is there a specific order in which the paths are loaded into Slicer from the AdditionalLauncherSettings.ini?

If it’s loaded in the same order, then the missing dependency makes sense to me since mpReview is would be loaded first.

Order of module class instantiation is random. Order of module widget and logic creation is based on the order determined from module dependencies.

And to clarify, currently the “GenericTest” are executed without loading any dependencies are expected to pass independently of this.

How can it pass the generic tests without dependencies to be loaded? I an extension depends on other extensions, it won’t be available in slicer.modules unless the dependencies are available, right?

I just tried to join the weekly developer hangout but there was no response.

Is there any progress regarding this issue? Looking at today’s dashboard [1] all Tests are failing.

[1] http://slicer.cdash.org/index.php?project=Slicer4&display=project&filtercombine=and&filtercombine=and&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercombine=or&filtercount=4&showfilters=1&filtercombine=or&field1=buildname&compare1=63&value1=SliceTracker&field2=buildname&compare2=63&value2=SlicerDevelopmentToolbox&field3=buildname&compare3=63&value3=mpReview&field4=buildname&compare4=63&value4=QuantitativeReporting

Today is a project week discussion during the developer hangout. It’s going on now but the topics aren’t currently addressing development (more about coordinating projects).

https://meet.google.com/wzh-syuy-otj

The single dependency issue seems to have been resolved. I still have failing tests, but it’s not because of dependencies (see GelDosimetry).
Multiple dependencies still don’t work (see SegmentRegistration - interestingly the passing tests are the real failures).
Here’s the filtered dashboard.

(Hang on, I didn’t commit the stripped quotes from around the extension dependencies)

Update: Same thing after applying the fix

Is there a way to simulate the build server locally on my system, so that I can just test that locally? Making some tiny changes and waiting 24hours to it failing again doesn’t sound very productive :wink:

1 Like

Yes. It’s very simple to set up extension build on your computer. See instructions here: https://www.slicer.org/wiki/Documentation/Nightly/Developers/Build_ExtensionsIndex

Ok same thing is happening when I run the extension build locally. (see http://slicer.cdash.org/testDetails.php?test=8443330&build=1135723)

I managed to run the tests with multiple dependencies by adding the dependencies to the tests, see

and

If the Xyz_DIR variables are correctly set (you can check it on your local factory build), then the tests should run if you add these too.

This error

/Users/christian/sources/cpp/Builds/Slicer/Release/Slicer-build/lib/Slicer-4.9/qt-loadable-modules/./libvtkSlicerMarkupsModuleMRMLDisplayableManagerPythonD.dylib: malformed mach-o: load commands size (32840) > 32768

seems to be due to the limit on total size of all the load commands in the dynamic library in the MacOS loader.

I guess using a shorter build directory path would solve the issue. For example, instead of /Users/christian/sources/cpp/Builds/Slicer/Release, you could try /Users/christian/D/S4R.

@lassoan so does this mean that the way things work, developers cannot have python modules that are independent from Slicer? Python modules must have Slicer widget/logic in order to establish module class instantiation?