QA/Bibisect/Implementation

This page is about the technical details and Implementation pieces of our Bibisect repositories.

Bibisect Content Repos and Bundles
TDF-provided bibisect repositories are available at  https://bibisect.libreoffice.org/$OS-$VERSION.git . Also provided are git bundles, which can help with initial downloads on unstable connections. Detailed instructions for how to locally clone bundles (and for live repositories fetch updates) can be found on each repository page, such as https://bibisect.libreoffice.org/linux-64-5.2.

Bibisect Code Repos
Bibisect-related code lives in the dev-tools repo: https://git.libreoffice.org/dev-tools/tree/master/bibisect

Scripts available include
 * Bibisect repo generation
 * Bibisect mergeranges tool
 * [todo] - User helper scripts (e.g. run-libreoffice.sh)

In the future, some code may live in the buildbot repo: https://git.libreoffice.org/buildbot

(Perhaps the buildbot repo would be a reasonable home for all of the bibisect scripts?)

On the infrastucture side, the deployment resides on our Salt states:

https://git.libreoffice.org/infra/salt/tree/master/bibisect/init.sls

Workflow to create and update repositories
(Partially taken from .) Update and creation are normally done by The Document Foundation QA engineer. To do this one needs a remote shell on bibisect.libreoffice.org as the bibisect user.

Note: Bibisect repositories used to live on gerrit but this is no longer the case. (This was deemed overkill by the infrastructure team, as code review was unnecessary, ACLs were trivial, and bibisect-* repositories cluttered the project list.)

Create a new repository
Fetch-based workflow, cloning an existing repository from username@hostname/path/to/repo.git (a tinderbox).

bibisect@bibisect.libreoffice.org:~$ git clone --bare --mirror --template ~/templates \ ssh://username@hostname/path/to/repo.git ~/repositories/linux-64-7.0.git Cloning into bare repository… […]

(No need to create the magic file git-daemon-export-ok anymore. Repositories under ~bibisect/repositories are all public, and all exposed to git-http-backend(1), which runs as an unprivileged dynamic user. Don't put any private world-readable repositories in there!)

Next, create the bundle to be served alongside the git repository:

bibisect@bibisect.libreoffice.org:~$ bibisect-create-bundle ~/repositories/linux-64-7.0.git

Update active repositories
bibisect@bibisect.libreoffice.org:~$ git -C ~/repositories/linux-64-7.0.git remote update Fetching origin […]

The bundles don't need to always be up to date (instructions to keep local clones in sync can be found on the live repository page), but if they're lagging too far behind folks might have trouble fetching large updates. In doubt, run

bibisect@bibisect.libreoffice.org:~$ bibisect-create-bundle ~/repositories/*.git

which will update bundles that needs to be updated and leave others alone.

Remove inactive repositories
Once a repository is no longer active, we archive it and only serve the bundle. First, make sure the bundle is up to date, then remove the repository:

bibisect@bibisect.libreoffice.org:~$ bibisect-create-bundle ~/repositories/linux-64-6.2.git bibisect@bibisect.libreoffice.org:~$ rm -rf ~/repositories/linux-64-6.2.git

Also see

 * QA/Bibisect/Bibisectzilla