Help to get mrbslp working when software packages have inconsistent versions
Occasionally the CI get cases where software packages that need to be tested have inconsistent versions, this usually happens when an experiment software stack is not fully updated.
An example is with CI build sbnd_ci/5626
that was building following packages
sbnobj where updated by the SBN release manager to version
sbndutil where set to version
v09_07_00 'cause at that time the SBND release manager didn't had a chance to update their package release.
The dependency tree of these packages is like this:
sbndcode |__sbncode | |__sbnobj |__sbndutil
The CI was able to build those packages,
mrbsetenv didn't complain when the development environment was setup.
However when the CI tried to setup the local built products with
mrbslp it complained with
5: local product directory is /scratch/workspace/sbnd_ci/label_exp/SLF7/label_exp2/swarm/SBND/localProducts_SBND_SBND_lar_ci_e19_prof 6: ----------- this block should be empty ------------------ 7: Error encountered when setting up product: sbndcode 8: ERROR: Version conflict -- dependency tree requires versions conflicting with current setup of product sbncode: version v09_07_00 vs v09_08_00 9: ---------------------------------------------------------
local products weren't setup and so regression test failed.
Unfortunately I couldn't use the
mrbslp exit status to detect the version mismatch, 'cause
mrbslp seems to always return exit status 1.
As the CI tests experiment codes as they are at the time the CI build is triggered, considering those packages are maintained by different release manages, it is not guaranteed that those packages will have consistent versions all the time.
Is there a way I can use in the CI to automatically detect version mismatch like this and eventually override that to build the code stack with consistent versions?
#4 Updated by Vito Di Benedetto 9 days ago
- % Done changed from 0 to 100
- Status changed from Assigned to Resolved
In the CI I have implemented a function that accesses mrbslp output through a pipe and parses it to check for errors, if any error is found, the function returns 1, while it returns 0 otherwise.
this CI build
shows how this function worked as expected.
In the particular use of this function in the SBND CI workflow I also dump the output of
ups active to provide info of currently UPS products set up in the environment.