public inbox for openembedded-core@lists.openembedded.org
 help / color / mirror / Atom feed
From: Randolph Sapp <rs@ti.com>
To: Mathieu Dubois-Briand <mathieu.dubois-briand@bootlin.com>,
	<rs@ti.com>, <raj.khem@gmail.com>,
	<richard.purdie@linuxfoundation.org>, <alex@linutronix.de>,
	<otavio@ossystems.com.br>, <kexin.hao@windriver.com>
Cc: <afd@ti.com>, <detheridge@ti.com>, <denis@denix.org>,
	<reatmon@ti.com>, <openembedded-core@lists.openembedded.org>,
	<vijayp@ti.com>
Subject: Re: [oe-core][PATCH] reproducible: fix git SOURCE_DATE_EPOCH randomness
Date: Tue, 17 Feb 2026 13:48:39 -0600	[thread overview]
Message-ID: <DGHHWMH13HPU.3RE8CUYMSM3T4@ti.com> (raw)
In-Reply-To: <DGELD1TRQ45N.3TZRX9CWB25E1@bootlin.com>

On Sat Feb 14, 2026 at 3:53 AM CST, Mathieu Dubois-Briand wrote:
> On Fri Feb 13, 2026 at 1:42 AM CET, Randolph Sapp via lists.openembedded.org wrote:
>> From: Randolph Sapp <rs@ti.com>
>>
>> Anything that defines multiple git sources should have the largest value
>> taken when calculating the SOURCE_DATE_EPOCH for a package.
>>
>> The previous iteration actually introduced some degree of randomness, as
>> it would stop on the first git repository reported by os.walk, which
>> does not assure any specific ordering by default.
>>
>> Signed-off-by: Randolph Sapp <rs@ti.com>
>> ---
>
> Hi Randolph,
>
> Thanks for trying to fix this. However, it looks like this is causing
> another intermittent issue.
>
> We got the following error on the autobuilder:
>
> ERROR: libjitterentropy-3.6.3-r0 do_unpack: Error executing a python function in exec_func_python() autogenerated:
> ...
> File: '/srv/pokybuild/yocto-worker/qemux86-world/build/layers/openembedded-core/meta/lib/oe/reproducible.py', lineno: 107, function: get_source_date_epoch_from_git
>      0103:            bb.debug(1, "%s does not have a valid HEAD: %s" % (gitpath, p.stdout.decode('utf-8')))
>      0104:            continue
>      0105:
>      0106:        bb.debug(1, "git repository: %s" % gitpath)
>  *** 0107:        p = subprocess.run(['git', '-c', 'log.showSignature=false', '--git-dir', gitpath, 'log', '-1', '--pretty=%ct'],
>      0108:                           check=True, stdout=subprocess.PIPE)
>      0109:        sources_dates.append(int(p.stdout.decode('utf-8')))
>      0110:
>      0111:    if sources_dates:
> File: '/usr/lib64/python3.13/subprocess.py', lineno: 577, function: run
>      0573:            # We don't call process.wait() as .__exit__ does that for us.
>      0574:            raise
>      0575:        retcode = process.poll()
>      0576:        if check and retcode:
>  *** 0577:            raise CalledProcessError(retcode, process.args,
>      0578:                                     output=stdout, stderr=stderr)
>      0579:    return CompletedProcess(process.args, retcode, stdout, stderr)
>      0580:
>      0581:
> Exception: subprocess.CalledProcessError: Command '['git', '-c', 'log.showSignature=false', '--git-dir', '/srv/pokybuild/yocto-worker/qemux86-world/build/build/tmp/work/x86-64-v3-poky-linux/libjitterentropy/3.6.3/sources/libjitterentropy-3.6.3/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/tests/raw-entropy/recording_userspace/jitterentropy/.git/', 'log', '-1', '--pretty=%ct']' returned non-zero exit status 128.
>
>
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/59/builds/3177
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/3/builds/3231
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/6/builds/3194
> https://autobuilder.yoctoproject.org/valkyrie/#/builders/37/builds/3345
>
> I only saw it on libjitterentropy so far. I quickly tried to reproduce
> locally, without any success. Yet I confirm dropping this patch solve
> the issue.
>
> Can you have a look?
>
> Thanks,
> Mathieu

Oh, a recursive symbolic link. Fun. I thought glob didn't traverse links by
default. Guess I was thinking about Pathlib's version. I'll go back to a
modified os.walk version since that supports more python versions and has an
explicit 'followlinks' parameter.

- Randolph


  reply	other threads:[~2026-02-17 19:48 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-02-13  0:42 [oe-core][PATCH] reproducible: fix git SOURCE_DATE_EPOCH randomness rs
2026-02-14  9:53 ` Mathieu Dubois-Briand
2026-02-17 19:48   ` Randolph Sapp [this message]
     [not found] <1893A7AF46371281.653184@lists.openembedded.org>
2026-02-13  1:36 ` Randolph Sapp

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DGHHWMH13HPU.3RE8CUYMSM3T4@ti.com \
    --to=rs@ti.com \
    --cc=afd@ti.com \
    --cc=alex@linutronix.de \
    --cc=denis@denix.org \
    --cc=detheridge@ti.com \
    --cc=kexin.hao@windriver.com \
    --cc=mathieu.dubois-briand@bootlin.com \
    --cc=openembedded-core@lists.openembedded.org \
    --cc=otavio@ossystems.com.br \
    --cc=raj.khem@gmail.com \
    --cc=reatmon@ti.com \
    --cc=richard.purdie@linuxfoundation.org \
    --cc=vijayp@ti.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox