Subject: [cuirass] Missing dependencies.

From: Mathieu Othacehe <[email-masked]>
Date: Wed, 06 Oct 2021 08:53:52 +0000

Hello,

I noticed that some builds were missing dependencies in the Cuirass web
interface. For instance, compare those two builds of python-git-review:

https://ci.guix.gnu.org/build/89691/details
https://ci.guix.gnu.org/build/1000035/details

When looking closer to one dependency, python-pysocks for the build
100035, this command reports the corresponding derivation:

--8<---------------cut here---------------start------------->8---
guix time-machine --commit=79fbbe5e4a7cd79613d49c0dda51872f2492cc76 -C ~/.config/guix/channels-default.scm --  build --no-grafts python-pysocks -d
/gnu/store/49bprfjvzlfm893622fkmi4jb6msyg2j-python-pysocks-1.7.1.drv
--8<---------------cut here---------------end--------------->8---

On the other hand, in the Cuirass database, we have:

--8<---------------cut here---------------start------------->8---
cuirass=# select derivation from jobs left join builds on jobs.build = builds.id  where jobs.evaluation = 27768 and name = 'python-pysocks.x86_64-linux';
 /gnu/store/pm576s0gi7b8n9bpllmj3kdin0r6dj22-python-pysocks-1.7.1.drv
--8<---------------cut here---------------end--------------->8---

There are two different derivations which explains why python-pysocks is
not listed as dependency of the build 100035.

While those derivations are different, they have the same output:

--8<---------------cut here---------------start------------->8---
guix time-machine --commit=79fbbe5e4a7cd79613d49c0dda51872f2492cc76 -C ~/.config/guix/channels-default.scm --  build --no-grafts python-pysocks
/gnu/store/x76mk7rx4hyqk6hngflpx1rrrr82rvmb-python-pysocks-1.7.1
--8<---------------cut here---------------end--------------->8---

and

--8<---------------cut here---------------start------------->8---
cuirass=# select path from jobs left join builds on jobs.build = builds.id left join outputs on builds.derivation = outputs.derivation  where jobs.evaluation = 27768 and jobs.name = 'python-pysocks.x86_64-linux';
 /gnu/store/x76mk7rx4hyqk6hngflpx1rrrr82rvmb-python-pysocks-1.7.1
--8<---------------cut here---------------end--------------->8---

So, when Cuirass tried to register the
/gnu/store/49bprfjvzlfm893622fkmi4jb6msyg2j-python-pysocks-1.7.1.drv, it
skipped it because another build with the same output already
existed.

Cuirass uses the derivation file names to determine the dependencies and
is thus tricked by this mismatch.

There are two things that are a bit unclear to me:

1. What causes those derivation differences while the output is identical?

2. How we could work-around this issue to have Cuirass list all
dependencies?

Thanks,

Mathieu