(I apologize in advance for anything I ask about that should be obvious. I've been tasked with extending an existing buildbot configuration with a new builder, and I am very new to buildbot. Also, I am very new to Python.)

My group has a buildbot configuration that we more or less "inherited" from a partner. We use it for regular builds of some packages (both internal and external), including OpenCV (http://opencv.org). I have been given the task of writing a new builder class to build the 3.1.0 version of OpenCV, where our current config is build the 2.4.13 version.

This *should* have been pretty straightforward, since we're already building OpenCV. But it isn't, and here's why: the OpenCV source base (in git) has a specific branch for the 2.4 line, created when they started working on 3.0 (I presume). However, they never created branches for 3.0 or 3.1. As such, I cannot checkout 3.1 directly. I have to checkout master, then do "git checkout -b v3.1.0 3.1.0" to create a local branch from the 3.1.0 tag. To make it even more interesting, I also have to apply 1-2 upstream changes via "git cherry-pick", for things that are broken in 3.1.0 but not planned for general release until they release 3.2.0 (there is no plan for a 3.1.1, apparently).

I have to do this for two repositories-- opencv and opencv_extra (though opencv_extra does not need the cherry-pick steps).

I cannot seem to back-engineer how the version-control/source-control interaction takes place, partially because I am so unfamiliar with Python. In our existing code, we instantiate an instance of the Git class, imported from buildbot.steps.source.git. However, I don't see where our code makes any actual method calls on the object returned from the instantiation, so whatever is being done may all exist in the constructor/initialization.

I know from looking at the logs of the existing builders, that each git repo (we use 4 in total) seems to go through the following steps:

 * git --version
 * git clean -f -f -d
 * git fetch -t <url> 2.4
 * git reset --hard FETCH_HEAD --
 * git branch -M 2.4
 * git rev-parse HEAD

I have no idea how to proceed on this... I suspect that the above sequence is partly predicated on the fact that the repos currently exist, that is, if they didn't I'd see a "git clone" in the logs. But the "git fetch" command is fetching based on a remote branch, and I won't have a remote branch in this case (only a tag). In fact, I don't even *need* to fetch after the initial clone, because this tag won't move. Once I've initially done the set-up steps (clone, checkout, cherry-pick) subsequent builds won't need to do any git operations at all (the only thing changing is that we link OpenCV against NVIDIA's CUDA libraries, and the regularly-scheduled builds will be done to link against progressive development versions of CUDA). Heck, we may not even schedule this builder for regular builds, but rather just have it available for manual build requests for when we have a new CUDA to link against.

So, is this sort of configuration even possible? Most (if not all) of the remaining steps I need to do with this builder, I have been able to puzzle through. But the version-control portion has me stumped.

Randy

--
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
Randy J. Ray                                Nvidia
Senior Build & Release Engineer             2701 San Tomas Expressway
rj...@nvidia.com                            Santa Clara, CA  95050


-----------------------------------------------------------------------------------
This email message is for the sole use of the intended recipient(s) and may 
contain
confidential information.  Any unauthorized review, use, disclosure or 
distribution
is prohibited.  If you are not the intended recipient, please contact the 
sender by
reply email and destroy all copies of the original message.
-----------------------------------------------------------------------------------
_______________________________________________
users mailing list
users@buildbot.net
https://lists.buildbot.net/mailman/listinfo/users

Reply via email to